Thông báo

Collapse
No announcement yet.

Tâm sự về FPGA

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

  • Tâm sự về FPGA

    Chào anh em,
    Mình tính viết một vài bài tạm gọi là "tâm sự về FPGA" tổng hợp từ nhũng hiểu biết và kinh nghiệm của mình bao gồm các topic sau:
    ---
    - FPGA là gì?
    - Vai trò của FPGA và một số cấu hình tiêu biểu trong hệ thống sử dụng FPGA
    - Thiết kế FPGA cần biết những gì?
    - Các bước thiết kế FPGA
    - Các thành phần trong FPGA chip:
    Clocks (DCM) & Clock Buffers
    CLB – LUT and FFs
    Routing Lines
    Output/Input Buffers and delay
    BRAM

    - Các kĩ thuật tối ưu hóa cơ bản:
    Register balancing
    Register duplication
    Equivalent register removal
    Keep Hierarchy
    Fanin/Fanout

    - Các thành phần cơ bản được xếp (map) lên FPGA như thế nào?
    Multiplexers
    Adders/Subtractor
    ROM/RAM
    Multipliers

    - Các câu lệnh VHDL được “dịch” và xếp lên FPGA như thế nào
    If else
    Case
    If clock edge

    - Thiết kế với Timing Constraint:
    Chu kì của clock
    Trễ từ Input tới clock
    Trễ từ clock tới output
    Đường trễ nhiều chu kì

    - Thiết kế với Placement Constraint
    - Thiết kế với IO Constraints và các chuẩn IO
    - Phương pháp tổng hợp tăng dần

    Mong anh em tham gia thảo luận và có các ý kiến phản hồi (thêm bớt các topic nào đó) để box thêm dzui dzẻ.

    Jeff

  • #2
    Tính rồi sao không làm luôn đi?
    Từ chối trách nhiệm:
    Mọi thông tin từ ITX cung cấp với hi vọng nó có ích và không đi kèm với bất kì sự bảo đảm nào.
    Blog: http://mritx.blogspot.com

    Comment


    • #3
      Từ từ, để nuốt nước m**ng rùi viết típ

      Comment


      • #4
        cảm ơn trước khi bài viết ra lò. mong là nó không chung chung va giống giống các bài viết trên mạng khác. nên chi tiêt hơn 1 chút, tập trung vào chi tiết kĩ thuật hơn là phần giới thiệu chung chung.

        Comment


        • #5
          I) FPGA là gì?
          Báo chí, google, wikipedia và rất rất nhiều website đã nói về FPGA, mình không muốn nói lại nhiều. Chỉ xin tóm tắt một vài điểm cơ bản để các bạn nào chưa làm việc với FPGA bao giờ có thể hình dung được nó làm việc như thế nào.
          FPGA= Field Programmable Gate Array. Trước tiên phải hiểu cái tên của nó. Mất một thời gian dài mình mới hiểu được chữ FIELD nghĩa là nơi sử dụng con Chíp. Mình thấy nhiều chỗ dịch là dạng trường gì gì đó là không đúng, FIELD PROGRAMMABLE nghĩa là có thể lập trình được tại nơi của người sử dụng khác với một số chip khác Phải lập trình tại nơi sản xuất.
          FPGA được tạo thành từ một mảng (matrix hay array) các phần tử nhỏ khả trình nên gọi là PROGRAMMABLE GATE ARRAY.
          Làm thế nào để có được một PROGRAMMABLE GATE (Cổng khả trình)?Trong FPGA, PROGRAMMABLE GATE được tạo thành từ MEMORY. Chẳng qua là người ta sử dụng bộ nhớ một cách khác so với thông thường. Ví dụ ban có một bộ nhớ có 2 ô nhớ, mỗi ô nhớ có1 bit. Bây giờ ô nhớ số không chứa giá trị 1, ô nhớ số 1 chứa giá trị 0. Lấy địa chỉ (address) làm input, thì khi input = 1 thì output = 0, input = 0 thi output = 1 --> Bạn tạo được cổng NOT. Đó là lý do người ta gọi các FPGA thông dụng bây giờ sử dụng công nghệ SRAM. Trong FPGA, các ô nhớ để tạo thành logic như vậy gọi là Look-up-table (LUT, bảng tra cứu). Đa số các FPGA bây giờ sử dụng các LUT có 4 inputs, một số sử dụng 5-input LUT (Virtex5), 6-input LUT (Virtex 6) ... Với một LUT có 4 inputs bạn có thể dùng nó dể tạo thành bất kì mạch logic nào có 4 inputs:
          F = X1X2+X2X3+X4.X2 ... vì chung qui lại vẫn sẽ chỉ có 16 trường hợp mà thôi.

          Một điều quan trọng khác cần phải biết là các PROGRAMMABLE GATE nói trên được kết nối với nhau thông qua một mạng lưới gọi là tài nguyên dẫn (ROUTING RESOURCE). Các đường dây dẫn này chạy theo 2 hướng Nam-bắc, Đông tây và được kết nối bằng các hộp chuyển tiếp (SWITCH BOX). Các SWITCH BOX này cũng khả trình, có nhiệm vụ rẽ tín hiệu sang hướng khác như trong hình vẽ sau: http://en.wikipedia.org/wiki/File:Switch_box.svg

          Bằng cách cấu hình cho các LUT và SWITCH BOX, chúng ta có thể tạo ra được mạch LOGIC như ý. Khi thiết kế với FPGA, các bạn đang thiết kế mạch điện chứ không phải đang lập trình cho chip nó chạy . Điểm hay là chúng ta có thể xóa, sửa thiết kế và cài đặt lại trong khoảng thời gian ngắn, không mất nhiều công sức. Đó là cũng điểm quan trọng khác của FPGA: thời gian cho ra sản phảm ngắn (Short Time-to-Market).

          (Anh em bạn nào biết rồi thì bỏ qua, mình viết với hy vọng bạn nào mới tìm hiểu có được khái niệm cơ bản)

          Comment


          • #6
            2) FPGA thường được sử dụng như thế nào?
            FPGA thường được sử dụng để làm mẫu (prototype), hoặc trong các ứng dụng công nghệ cao như các máy phát biến điệu (modulator, demodulator), digital cameras (các bộ codec hoặc transcoder), các máy đo như của Rhode&Shwards, Agilent, Tektronix, router, các audio amplifiers, mixer như của Denon … Mình còn biết FPGA còn được dùng để xử lý các dữ liệu để tìm túi dầu, giải các thuật toán trong sinh học ...

            FPGA rất mạnh, mạnh nhất là khả năng xử lý song song, on-the-fly (ngay lập tức) bằng kĩ thuật pipeline, các dữ liệu dạng stream, không cần phải buffer trong bộ nhớ rồi xử lý như phần mềm.

            Ít khi nào FPGA được xử dụng 1 mình, nó thường đi chung với một con microP hoặc microC và giúp xử lý các dữ liệu nhanh chóng và hiệu quả hơn. Dưới đây là 3 cấu hình phần cứng thường gặp (hay ít ra mình đã thấy qua) trong hệ thống sử dụng FPGA để tối ưu tốc độ xử lý.



            CPU trong những hình vẽ có thể là vi điểu khiển (microcontroller) hoặc vi xử lý (microprocessor: ARM, PowerPC, MIPS ... ), hardcore (Xscale, ARM, PowerPC ... ) hoặc softcore (MicroBlaze, Nios ...)
            - Trong cấu hình (a), FPGA đảm nhận hoàn toàn việc xử lý tín hiệu, microprocessor chỉ có nhiệm vụ nhận điểu khiển từ giao diện người dùng (User Interface) và điểu chỉnh các parameter. Dùng FPGA để viết lên LCD hoặc nhận các tín hiệu nút bấm từ bàn phím thì hơi phí.
            - Trong cấu hình (b), FPGA sẽ xử lý một phần tín hiệu đưa vào và chờ FPGA đọc, ví dụ như tốc độ truyền của tín hiệu bao nhiêu byte một giây, hoặc như bạn muốn quét phổ của tín hiệu vào, hoặc nếu tín hiệu vào đã được mã hóa, FPGA có thể giải mã tín hiệu trước cho CPU ...
            - Trong cấu hình (c), FPGA viết data thẳng vào bộ nhớ chính, trường hợp này sử dụng khi lượng dữ liệu sau khi xử lý lớn ... cấu hình này cũng có thể coi là cấu hình (b) nhưng được tối ưu hóa.
            - Trong cấu hình (d), FPGA đóng vai trò như bộ gia tốc (Accelerator), giống như card đồ họa trên máy tính vậy ...

            Còn khi sử dụng FPGA để prototype ASIC, FPGA thường được kết nối với nhiều thiết bi ngoại vi như ADC/DAC, VGA, USB, Flash Disk ... Mảng này mình chưa có kinh nghiệm nhiều nên không biết gì hay để nói. Bạn nào làm ở các công ty sản xuất chip lớn, dùng FPGA để prototype và verification, nếu có lỡ đọc bài này xin cho vài ý kiến ...

            ------------------------------------
            Ngoài lề một chút, năm 2008 mình có tham dự một cuộc thi thiết kế FPGA tên là memocode design contest 2008 ... trong cuộc thi, mỗi team được cho một thuật toán hoàn toàn viết bằng C, nhiệm vụ là làm cách nào đó chạy thuật toán càng nhanh càng tốt. Thuật toán chạy mất 20s trên powerpc 100MHz, 6s trên pentium 4 và 0.5s trên PowerPC+FPGA của team mình (về thứ 5) và chạy mất 20ms trên PowerPC+FPGA của team về nhất ...
            Các bạn tham khảo http://memocode.irisa.fr/2008/design...ins/index.html
            Các bạn chuẩn bị năm sau chúng ta thi chơi ... Các bạn có thể download mấy bài presentation để tham khảo các thiết kế ...
            Attached Files

            Comment


            • #7
              Công nghệ QuickAssist giúp FPGA kết nối với Intel Chip thông qua Front Side Bus (FSB) dễ dàng hơn, tiếc là chỉ có mấy công ty trâu bên Mỹ mới có thể rớ tới mấy thứ này ... bạn nào làm trong các viện nghiên cứu quân sự ở VN thử nghiên cứu và ứng dụng xem) http://www.intel.com/technology/adva...uickassist.htm

              Comment


              • #8
                Mấy cái này thì cũng đọc hiểu lâu rồi. Nhưng năm mới cứ "canh thiu" vài cái coi như mừng tuổi dép liều nhở. Mong có những bài viết hay hơn, sống động và chi tiết hơn.

                Chúc đủ thứ.
                Đêm nay tớ không ngủ - ngày mai tớ ngủ bù

                Comment


                • #9
                  Cảm ơn anh Nhà Thủng

                  Comment


                  • #10
                    3) Thiết kế FPGA cần biết những gì và bắt đầu từ đâu?
                    0-Biết sử dụng máy tính (Cài phần mềm+drivers)
                    1-Nắm vững các thành phần cơ bản và khái niệm cơ bản của mạch số: Flip-flop, các cổng logic, multiplexers, các khái niệm về tín hiệu đồng bộ (synchrnous signal) và không đồng bộ (asynchronous signal), khái niệm về trễ, khái niệm về điều kiện thời gian của FF...
                    2-Biết vững một trong các ngôn ngữ VHDL/Verilog/SystemVerilog/SystemC
                    Điều 1 quan trong hơn điều 2 và phải biết trước điều 2.

                    4) Các bước thiết kế trong FPGA
                    Thiết kế FPGA bắt đầu với việc mô tả hệ thống phần cứng mà bạn muốn xây dựng. Việc mô tả có thể thực hiện bằng 2 cách cơ bản:
                    - Vẽ sơ đồ mạch (schematic)
                    - Viết code VHDL/Verilog
                    Ngoài ra, tùy thuộc vào phần mềm bạn sử dụng, bạn có thể mô tả bẳng cách khác, cao cấp hơn, gần gũi với ngôn ngũ phần mềm hơn và trực quan hơn ví dụ như : ImpulseC, SystemGenerator ...

                    Sau đó khi mô tả bạn dùng phần mềm để đọc các file mô tả phần cứng của bạn và tạo ra phần cứng như bạn mô tả. 2 phẩn mềm cơ bản và free mà ai cũng nên biết là ISE và Quartus.
                    ISE dùng cho chip của Xilinx
                    Quartus dùng cho chip của Altera
                    Nói đại khái là các phần mềm này có nhiệm vụ dịch code VHDL của bạn và tạo ra một mạng lưới các Flips-Flops và cổng logic, sau đó xếp mạng lưới này lên FPGA tương ứng bằng cách cấu hình cho các LUT và SWITCH BOX nói trên. Sản phẩm cuối cùng của thiết kế của bạn là một file duy nhất sẽ được nạp vào FPGA để cấu hình cho nó. Xilinx gọi file này là bit file, còn altera gọi là sof file.
                    Từ VHDL file, để cho ra được bit file, các phần mềm tiến hành nhiều bước:
                    - Tổng hợp (Synthesis)
                    - Xếp (Mapping)
                    - Đặt và Kết nối (Place and Route)
                    - Tạo ra bit file. (Bit file Generation)
                    Nói về mấy phần này chán, buồn ngủ và chưa cần thiết, chi tiết các bước các bạn có thểm tìm đọc trong các hướng dẫn sử dụng (Userguide) ...

                    Comment


                    • #11
                      5) Các thành phần quan trọng trong FPGA
                      a) Clocks:
                      Ai học mạch số rồi thì biết, clock là thành phần quan trong nhì trong mạch (sau nguồn điện), như nhịp tim vậy, mạch mà không chạy là kiểm tra coi thằng Power có không, rồi đến clock có chạy không. Do đó tín hiệu clock được ưu ái trên FPGA:
                      - Clock được đưa vào từ những chân riêng.
                      - Clock được dẫn trên hệ thống dẫn riêng và được lái (drive) bằng buffers đặc biệt gọi là Global Buffers (Xilinx gọi là BUFG, Altera gọi là Clock Control Block). Hệ thống clock này được gọi là Global Clock Network. Clock được ưu ái như vậy để clock có thể đến tất cả các Flip-flop trên chip tại cùng một thời điểm (hay ít ra là gần như vậy) ( low skew). Bạn nào không rõ khái niệm clock skew thì có thể đọc ở đây http://en.wikipedia.org/wiki/Clock_skew.

                      Những điều này có ý nghĩa thế nào khi thiết kế? Những điều này có ý nghĩa là bạn không thể coi clock như tín hiệu bình thường. Ví dụ như bạn không thể (hoặc không nên) đảo clock một cách tùy ý, để tạo ra clock khác ngược với clock đang có, và cho clock này chạy một mạch khác. Hoặc một ví dụ khác là bạn cần một mạch chạy ở clock 1MHz, clock bạn đang có là 50MHz, bạn dùng code VHDL/Verilog viết một bộ đếm để chia clock từ 50MHz xuống 1MHz như sau:

                      process(clk_50M)
                      if(rising_edge(clk_50M)) then
                      if(counter=24) then counter <= 0 else counter <= counter+1; end if;
                      if(counter=0) then clk_1M <= not clock_1M; end if;
                      end if;
                      end process;

                      Sau đó, bạn dùng slow_clk này để chạy một process khac
                      process(clk_1M)
                      begin
                      if(rising_edge(clk_1M)) then
                      ....
                      end if;
                      end process;

                      Khi bạn dùng như vậy, không có gì sai, nhưng về nguyên tắc thì không nên ... một số phần mềm sẽ tư động phát hiện clk_1M là clock và dùng Global Clock Network cho tín hiệu này. Một số phần mềm sẽ không thông minh như vậy. Ví dụ như ISE sẽ hiện thông báo sau:

                      -----------------------------------+------------------------+-------+
                      Clock Signal | Clock buffer(FF name) | Load |
                      -----------------------------------+------------------------+-------+
                      clk_50M | BUFGP | 9 |
                      clk_1M | NONE(cntri_1) | 8 |
                      -----------------------------------+------------------------+-------+
                      INFO:Xst:2169 - HDL ADVISOR - Some clock signals were not automatically buffered by XST with BUFG/BUFR resources. Please use the buffer_type constraint in order to insert these buffers to the clock signals to help prevent skew problems.


                      Trong bảng thông báo trên, Xilinx báo là đã tự động tạo Clock Buffer cho tín hiệu clk_50M, còn clk_1M thì không chèn thêm Clock Buffer nào và kèm theo bảng thông báo.

                      Đó là một ví dụ nhỏ, để các bạn mới làm quen với FPGA phải nhớ là CLOCK không giống các tín hiệu khác và phải xử lý riêng. Các tài nguyên để sử dụng trong Xilinx cho vấn đề clock là:
                      - DCM/PLL
                      - BUFGMUX

                      Comment


                      • #12
                        Góp sức cùng anh dép liều 1 chút. Đây là tài liệu hướng dẫn sử dụng ISE Webpack. Tài liệu viết rất chi tiết.
                        Người nhỏ bé.

                        Comment


                        • #13
                          Quên upload bạn oy!

                          Comment


                          • #14
                            Tiếp tục chủ đề các tài nguyên dùng cho clock.
                            Như đã nói trên, tín hiệu clock phải được xử lí riêng và cẩn thận vì đôi khi các phần mềm không tự chèn các buffer cho chúng ta được.
                            Các tài nguyên phần cứng có sẵn trên FPGA được gọi là PRIMITIVES. Các PRIMITIVE này có tên riêng và sẽ được phần mềm nhận biết là bạn muốn dùng tài nguyên của FPGA.

                            Khi sử dụng các tài nguyên phần cứng các bạn vào phần language template của Xilinx


                            Càng ngày FPGA càng phát triển, mình chưa có dịp xài hết các PRIMITIVE của các dòng chip sau này (Virtiex 4 5 6). Trong giới hạn, xin giới thiệu một số khái niệm thông dụng để các bạn làm căn bản, khi cần có thể tra cứu và tìm hiểu sâu hơn.

                            BUFGMUX: dùng để chọn giữa 2 xung clock
                            BUFG: buffer clock
                            BUFGCE : clock buffer với chân clock enable dùng để tắt clock (giảm power)
                            Các bạn nên sử dụng các primitive này thay vì dùng câu lệnh VHDL để bật tắt clock. Các buffer này được thiết kế đặc biệt bằng kĩ thuật analog không tạo ra các glitch khi chuyển clock (Xilinx nói như vậy).

                            Một thành phần quan trọng khác trong phần tài nguyên clock là DCM (Digital clock manager - Bộ quản lý clock). DCM gồm có: DLL (Delay lock loop) và/hoặc PLL (Phase lock loop)
                            Trong thiết kế FPGA, người ta thường xuyên có nhu cầu chạy nhiều clock nhanh hơn hoặc chậm hơn, đồng bộ hoặc không đồng bộ với clock đưa vào. Tạm thời chúng ta không quan tâm DCM hoạt động thế nào, chỉ quan tâm chúng ta sử dụng chúng như thế nào. Các sử dụng cơ bản:
                            - Sử dụng DCM để tạo ra một tần số clock khác (Frequency synthesis)
                            - Sử dụng DCM để tạo độ lệch pha mong muốn giữa clock trên FPGA và clock bên ngoài
                            DCM được sử dụng bằng cách dùng PRIMITIVE hoặc dùng core gen để tạo core. Các chân vào ra và các thông số tổng quát (GENERIC) của DCM cũng khá dễ hiểu. Các bạn tự nghiên cứu thêm ở APPNOTE này. Rất chi tiết và áp dụng trong đa số các thiết kế và dòng chip.
                            http://www.xilinx.com/support/docume...es/xapp462.pdf
                            Trong đó có phần nói về clock skew rất hay và dễ hiểu.
                            Mình chỉ muốn nói thêm 2 điều quan trọng:
                            - Chân clock feed back: chân clock feed back này dùng để chỉnh độ lệch pha giữa clock trên mạch và clock ở chân đưa vào và phải nối cho đúng (Xem application note ở link)
                            - Thông số CLKIN_PERIOD: thông số này bạn nên set cho đúng, sẽ đỡ cho phần sau khi bạn phải cài đặt giới hạn về thời gian (Timing Constraint). Ví dụ, bạn tạo ra 2 clock 80MHz và 100MHz từ clock 50MHz, khi cài 50MHz cho clock từ đầu vào, phần mềm sẽ tự động hiểu và cài cho 2 clock mới tạo ra (derived clock).
                            - Jitter là thuật ngữ dùng để chỉ noise trong chu kì của clock. Nghĩa là chu kì của clock biến đổi xung quanh chu kì chính. Vì dụ 10ns +/- 100ps. Khi thiêt kế với các ADC, suy nghĩ kĩ khi dùng FPGA để cho ra clock output để clock ADC, vì các DCM trên FPGA sẽ tạo thêm jitter cho clock được sinh ra. Các ứng dụng trong viễn thông hoặc xử lý tín hiệu sẽ bị ảnh hưởng do các jitter này.

                            Comment


                            • #15
                              hok có bình loạn gì hả? :-s

                              Comment

                              Về tác giả

                              Collapse

                              jefflieu Email minh trực tiếp nếu bạn cần download tài liệu gấp Tìm hiểu thêm về jefflieu

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

                              Collapse

                              Đang tải...
                              X