Thông báo

Collapse
No announcement yet.

Tạo hàm tính Sin, Cos

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Tạo hàm tính Sin, Cos

    Mấy bác giúp em với, em tìm hiểu về cách tạo hàm tính Sin, Cos cho FPGAs mà chưa biết cách làm, được biết là phương pháp CORDIC dùng để tính mà em chưa hiểu lắm, có bác nào biết thì chỉ em với, cám ơn mấy bác nhiều!

  • #2
    Nếu Xilinx thì có thể dùng Core Generator để tạo ra CORDIC core, hoặc là Sine-Cosine Look-up Table.

    Comment


    • #3
      chắc là bạn đang dùng phần mềm ise à. những việc tính toán loằng ngoằng như vậy bạn nên để mấy chú vi điều khiển làm. ví dụ như bạn có thể dùng PicoBlaze viết bàng ASEM hoặc bạn dùng MicroBlaze viết bằng C...

      Comment


      • #4
        Nguyên văn bởi xuantung Xem bài viết
        chắc là bạn đang dùng phần mềm ise à. những việc tính toán loằng ngoằng như vậy bạn nên để mấy chú vi điều khiển làm. ví dụ như bạn có thể dùng PicoBlaze viết bàng ASEM hoặc bạn dùng MicroBlaze viết bằng C...
        Nếu viết code bằng C / assembly để tìm sine / cosine, chúng ta có thể chạy ngay trên PC, tại sao phải dùng đến Pico/MicroBlaze chỉ có 1% processing power của AMD/Intel CPU?

        Bạn có thử dùng CORDIC core chưa? Chỉ pulse new data signal khi đưa data vào, và ready sẽ go high khi sine/cosine đã được tính xong. Rất gọn.

        Điểm mạnh của FPGA chính là việc tính toán. Xu hướng hiện thời là sử dụng FPGA để thay thế embedded processor (cỡ PowerPC 7448 chứ không phải soft processor như MicroBlaze) trong các việc tính toán, chẳng hạn như FFT.

        Comment


        • #5
          CORDIC core là các lõi có trong thư viện của ISE. thực chất của quá trình viết trên Micro
          là sử dụng các hàm API. các hàm này cũng được bọn nó viết và tối ưu rồi có khác nhau nhiều đâu????Lại nói về PPC thì nó cũng là nõi nhưng là lõi cứng tức là nó đã nhũng sẵn trong FPGA. vậy nó khác nhau ở chỗ nào bạn nhỉ. bạn có thể phân tích rõ được không? còn muốn tạo ra sóng sine và cosine thì dùng DDS trong System Generator có luôn rồi bạn ạ. thực ra thì System cũng là lấy các lõi trong core generator ra.bạn có thể phân tích rõ hơn một chút để cho mọi người hiểu???

          Comment


          • #6
            Em mới làm quen với FPGAs chưa được lâu nên còn non lắm, tại em đang làm Space Vector Modulation nên cần phần tính Cos, Sin cho góc alpha, dùng phương pháp tra bảng thông thường không được, vì góc alpha biến thiên theo thời gian mà không tăng theo bậc, có một phương pháp xây dựng hàm lượng giác như link dưới đây, mấy bác xem giúp em với. Cám ơn mấy bác nhiều!
            http://en.wikipedia.org/wiki/CORDIC

            Comment


            • #7
              Nếu chúng ta đưa alpha (theta) vào, một clock cycle sau chúng ta sẽ nhận được sin(theta) và/hoặc cos(theta) như thí dụ bên dưới dùng Xilinx look-up core, nên alpha (theta) có biến hay không biến cũng không thành vấn đề ở đây.



              Core đầu vào theta = 8-bit, nên theta = 0 = 0 radian, và theta = 128 = pi. Đầu ra = 16-bit, nên 16384 = 1.0, và -16384 = -1.0. Trong trường hợp này chúng ta dùng core cho tiện, nhưng thực chất nó chỉ là một look-up table, không nhất thiết phải dùng coregen.

              Comment


              • #8
                Còn muốn tạo ra sóng sine và cosine thì dùng DDS trong System Generator có luôn rồi bạn ạ. bạn có thể phân tích rõ hơn một chút để cho mọi người hiểu???
                Có lẽ bạn nhầm lẫn giữa DDS và tìm sin/có dùng look-up table hoặc CORDIC.

                DDS tạo sóng dựa theo output frequency và sampling frequency. Như thí dụ bên dưới, sampling clock = 100 MHz, và output frequency = 25 MHz, approximation của sóng 25 MHz lặp đi lặp lại mỗi 4 clock cycles (100 MHz).



                Tìm sin/cos đã có thí dụ ở post trên.

                Lại nói về PPC thì nó cũng là nõi nhưng là lõi cứng tức là nó đã nhũng sẵn trong FPGA. vậy nó khác nhau ở chỗ nào bạn nhỉ. bạn có thể phân tích rõ được không?
                Nếu bạn đọc kỹ ở bên trên thì sự khác biệt đã được nêu rõ. Cũng như có những khác biệt cơ bản giữa i386 vs. i686 CPU, thì cũng có sự khác biệt giữa PPC 7448 và dòng PPC được embed trong Xilinx FPGA. Nếu so sánh giữa PPC 7448 và MicroBlaze lại càng khập khiễng, nhưng đại ý là trong khâu computation, FPGA mạnh hơn processor rất nhiều.

                Một thí dụ đơn giản: trong một clock cycle, MicroBlaze có thể làm được một phép tính nhân, và cũng trong một clock cycle, một DSP48 slice (trên Virtex 4/5) hoặc built-in multiplier (trên Virtex-II) làm được một phép tính nhân. Một FPGA như Virtex-4 SX55 có 512 DSP48 slice ... bạn có thể nhúng bao nhiêu MicroBlaze processor vào một FPGA?

                MicroBlaze cũng có những điểm mạnh của nó, nhưng computation không phải là một trong số đó.

                Comment


                • #9
                  Mấy bác ơi, thế làm thế nào khai thác được Cor đó hả mấy bác, mấy bác giúp em với, em toàn dùng ISE để viết code VHDL không thôi, em chưa biết cách khai thác các lõi có sẵn được. Người ta hướng dẫn sử dụng thuật giải CORDIC để viết theo cách dịch và cộng mà em chưa hiểu. Em loay hoay hoài mà cũng không xong nữa, mong mấy bác giúp em. Đúng là khó cho mấy bác thật, vì em còn kém quá, chưa hiểu được nhiều, mong mấy bác thông cảm. Cám ơn mấy bác nhiều!

                  Comment


                  • #10
                    Mình chưa làm với Core nhưng chưa làm nhiều. bạn nemesis21 có thể viết tutorial hướng dẫn làm core được không?
                    Còn về phần tranh luận ở trên có thể mình và bạn chưa hiểu ý định của nhau.
                    Phải công nhận là các PPC mà bạn đưa ra thực sự mạnh. mình chưa được sờ đến nó nên chưa biết nó mạnh đến cỡ nào thôi. mình có mấy bo FPGA nên mới chỉ sử dụng mấy con vdk này thôi. chưa có điều kiện tiếp cận như bạn.
                    tuy nhiên cũng phải nói rằng Micro,PPC là vi điều khiển mềm 32 bit nhúng trong FPGA. nó cho phép tạo nhiều ứng dụng nhúng. các lệnh nhân nó sử dụng đâu phải chỉ có một mà có thể sử dụng tất cả các bộ nhân cứng có sẵn trong FPGA đấy chư.thực chất nó cũng gọi các core generator mà.mà ở đây nó chính là CORDIC. tuy nhiên ở đây cách truyền tham số của nó khác thôi.
                    mìng đang nghiên cứu, cách xây dựng hệ thống nhúng trên FPGA.cụ thể là nhồi lõi kernel cho các vdk 32 bít này.bạn có kinh nghiệm về mảng này có thể share cho mình một chút?

                    Comment


                    • #11
                      Đúng đó,bác nemesis21 post vài tut đi,em sẽ ủng hộ hết mình, dù ko biết nhiều lắm
                      Chuyện nhỏ như con thỏ,bắt thỏ mới là chuyện lớn!!!

                      Comment


                      • #12
                        Tutorial thì Xilinx có rồi, phần CoreGen ở trang 35-37:

                        http://www.xilinx.com/direct/ise10_t...s/ise10tut.pdf

                        Comment


                        • #13
                          Nguyên văn bởi xuantung Xem bài viết
                          Mình chưa làm với Core nhưng chưa làm nhiều. bạn nemesis21 có thể viết tutorial hướng dẫn làm core được không?
                          Còn về phần tranh luận ở trên có thể mình và bạn chưa hiểu ý định của nhau.
                          Phải công nhận là các PPC mà bạn đưa ra thực sự mạnh. mình chưa được sờ đến nó nên chưa biết nó mạnh đến cỡ nào thôi. mình có mấy bo FPGA nên mới chỉ sử dụng mấy con vdk này thôi. chưa có điều kiện tiếp cận như bạn.
                          tuy nhiên cũng phải nói rằng Micro,PPC là vi điều khiển mềm 32 bit nhúng trong FPGA. nó cho phép tạo nhiều ứng dụng nhúng. các lệnh nhân nó sử dụng đâu phải chỉ có một mà có thể sử dụng tất cả các bộ nhân cứng có sẵn trong FPGA đấy chư.thực chất nó cũng gọi các core generator mà.mà ở đây nó chính là CORDIC. tuy nhiên ở đây cách truyền tham số của nó khác thôi.
                          mìng đang nghiên cứu, cách xây dựng hệ thống nhúng trên FPGA.cụ thể là nhồi lõi kernel cho các vdk 32 bít này.bạn có kinh nghiệm về mảng này có thể share cho mình một chút?
                          Nguyên văn bởi xuantung Xem bài viết
                          những việc tính toán loằng ngoằng như vậy bạn nên để mấy chú vi điều khiển làm
                          Lúc đầu có lẽ bạn đã không viết hết ý là chỉ muốn dùng VDK chủ yếu để interface với các core đảm nhiệm phần computation.

                          Mình cũng dùng viết embedded code (chủ yếu để chuyển tiếp data) nhưng chưa có dịp dùng embedded processor trên FPGA (hơi yếu ).



                          Hình trên là quad-PPC VME board với 2 PMC sites (mỗi PMC thường có 2 FPGA).

                          Comment


                          • #14
                            Con Microblaze nhúng xuống FPGA thực ra cũng là một cái thiết kế từ VHDL hoặc gì gì đấy,nó cũng có ALU,CU...v..v.Control path và datapath.Cái tạo ra sự khác biệt về tốc độ giữa Microblaze và PPC là thằng Microblze sử dụng các LUT của FPGA để implement,đương nhiên tốc độ làm sao bằng con fix-core PPC được.Microblaze chạy 50Mhz đã là khỏe rồi,còn PPC thì chạy đc 400Mhz cơ mà.

                            Core generator thì mình đã dùng khá nhiều,và trong đấy có nhiều IP thực sự mạnh,bạn cần cái gì thì đọc datasheet của nó thôi,cũng khá đầy đủ.Mình đã làm thành công 2DFFT từ core 1DFFT của xilinx rồi.Và cũng chỉ đọc datasheet của nó thôi.Đúng là làm FPGA thì phải làm nhiều mới biết đc^^.

                            Chúc bạn thành công với hệ thống nhúng.mình đang toàn làm VHDL

                            Comment

                            Về tác giả

                            Collapse

                            over Tìm hiểu thêm về over

                            Bài viết mới nhất

                            Collapse

                            Đang tải...
                            X