Thông báo

Collapse
No announcement yet.

Tâm sự về FPGA

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

  • #16
    DCM của Virtex 5 có 1 port ẩn gọi là "Dynamic Reconfiguration Port" cho phép thay đổi dynamically tần số được tạo ra. Cái này khá hay và rất hữu ích.
    Fout = Fin x (m/d).
    Chỉ cần tạo 1 FSM đơn giản thay đổi dynamically m và d là có thể thay đổi Fout.
    Chi tiết trong Chương 5 Dynamic Reconfiguration Port (DRP) của ug191 "Virtex-5 FPGA Configuration User Guide".
    http://www.xilinx.com/support/docume...ides/ug191.pdf

    Comment


    • #17
      Nắm vững mấy khái niệm về clock thì code khá an toàn rồi, ít sợ bị mấy cái warning với lỗi timing.

      b) LE/Slice/LUT/FF
      Hai thành phần cơ bản để tạo sự uyển chuyển cho FPGA là : Look-up-table (LUT) và Flip-flops.
      Khi FPGA mới ra đời, chúng ta không có BlockRAM, DSP, hay multiplier cứng, và chỉ có toàn LUT và Flip-flop kết nối với nhau để thực hiện các mạch logic.
      Trong Xilinx FPGA, LUT và FF được xếp với nhau trên 1 slice. Ví dụ như họ Spartan3 thì trên 1 slice có 2 Flip-flop và 2 LUT
      Còn họ Spartan6 thì có tới 4 LUT và 8 FF trên 1 slice
      Sau khi thiết kế, thì chỉ số Slice mà thiết kế của bạn xài cho biết độ lớn về diện tích của thiết kế mạch của bạn. Chỉ số này khá quan trong trong thiết kế PCB, lúc bắt đầu thiết kế PCB, bạn cần phải chọn FPGA có dung lượng phù hợp --> bạn cần biết đại khái về yêu cầu diện tích của các IP bạn sẽ chạy trên FPGA. Trong Altera FPGA, LUT và FF được xếp lên LE (Logic Element). LE hay Slice đều chỉ về độ lớn của thiết kế trên FPGA.
      - Theo kinh nghiệm thì trong các thiết kế thực tế, mình chưa bao giờ cần thao tác trực tiếp lên các block này cho nên các bạn cũng không cần biết chi tiết làm gì. Nhưng mình nghĩ các bạn cần nhớ rằng, khi viết code HDL hay code gì đi nữa thì cuối cùng mạch của bạn sẽ được hiện thực hóa bằng LUT và FFs, cho nên không phải code nào bạn mô phỏng được là có thể xếp lên được các LUT và FFs này. Ví dụ đơn giản nhất là dòng lệnh wait for 5 ns; , và còn nhiều ví dụ khác mà các bạn mới viết HDL có thể sáng tạo ra. . Phần này gọi là coding for synthesis (http://www.xilinx.com/itp/xilinx4/da...m/coding5.html). Hoặc ví dụ như khi tạo một bus có cổng tri-state thì bạn cũng nên băn khoăn xem nó sẽ tạo ra cái gì.
      - Mình nghĩ, cũng tương tự như viết lập trình vậy, biết được cấu trúc bên dưới của CPU và hệ thống bộ nhớ, sẽ giúp bạn lập trình tốt hơn, hiệu quả hơn. Biết được cấu trúc bên dưới của họ FPGA sẽ giúp các bạn nên đoán xem code của mình sẽ tạo ra gì sau khi synthesis. Đoán trúng thì tốt, sau này bạn sẽ dự đoán được trễ của các thiết kế của bạn.

      ---------------
      Ngoài lề một chút, lâu lâu nếu các bạn nghe FPGA có dung lượng tương đương 1 triệu gates, thì gates đó là ASIC gates. Thật ra câu nói đó không dúng lắm, nó chỉ giúp ai quen thuộc với ASIC hình dung được dung lượng của FPGA đó. Ví dụ bạn dùng 1 LUT để tạo mạch not, thì tương đương 2 gates ASIC, khi bạn dùng 1 LUT để tạo mạch NAND thì LUT đó lại tương đương 4 gates... cho nên nói FPGA tương đương với bao nhiêu ASIC gates là nói cho dzui .

      Cũng như Processor, FPGA ngày càng "lớn" hơn vì transistor ngày càng nhỏ hơn, và xu hướng của các dòng Chip là sẽ thêm vào nhiều IP cứng (Hard IP). Ví dụ như MAC, PCI express, PowerPC, DSP48, SERDES IO ... để tối ưu hóa một số nhiệm vụ thường gặp trong các ứng dụng. Mình chưa có dip sử dụng hết các block này, nếu bạn nào có sử dụng qua rồi, và có những chia sẽ về kinh nghiệm, sẽ rất cảm tạ

      Bài này viết quả đúng theo tinh thần tâm sự, không đầu không đuôi
      Attached Files

      Comment


      • #18
        Post tài liệu lên mà ko có được .
        Người nhỏ bé.

        Comment


        • #19
          Nói nhảm mấy phần căn bản và triết lý về thiết kế FPGA xong rồi
          Hôm nay tâm sự tiếp tới phần tổng hợp code HDL (Synthesis)

          Tổng hợp code HDL nghĩa là "dịch" những thứ bạn miêu tả sang một mạng lưới (netlist) các LUT và Flip-flop. Có nhiều phần mềm để tổng hợp từ HDL sang netlist. Altera và Xilinx có riêng bộ tổng hợp và kèm trong 2 phần mềm ISE và Quartus. Ngoài ra còn có Synplicity, Synnopsis, Leonardo gì đó tùm lum cũng thực hiện việc tổng hợp. Các phần mềm có bản quyền này chắc chắn sẽ tốt hơn các phần mểm free của Xilinx và Altera (Xilinx cũng thừa nhận như vậy). Nhưng cuối cùng nắm đàng cán vẫn là Xilinx và Altera, chỉ có Altera và Xilinx mới có thể xếp mạng lưới LUT và FF này lên FPGA (Place and Route).

          Mấy cái tutorial để sử dụng ISE thì bạn có thể tìm ở đây:
          www.google.com.vn

          Về phần Synthesis của Xilinx. Lấy cái code sau làm ví dụ. Trong code này mình thực hiện giải thuật đơn giản tính logarit cơ số 10.

          Code thì mình đính kèm. Module trên cùng có 2 file, 1 file log_10.vhd với 1 file log_10_fast.vhd.
          Các bạn chạy thử với file log_10.vhd làm module top trước.
          Trong phần Synthesis mình muốn tập trung vào những phần sau:
          - Synthesis report
          - Synthesis options
          Trong phần Synthesis report, thường mình ngó qua phần cuối cùng gồm có report về diện tích (Area) và report về trễ (timing, delay)
          ------------------------------------------
          Trong ví dụ trên, report của mình như sau:
          Selected Device : 3s50pq208-5

          Number of Slices: 255 out of 768 33%
          Number of Slice Flip Flops: 151 out of 1536 9%
          Number of 4 input LUTs: 475 out of 1536 30%
          Number used as logic: 474
          Number used as Shift registers: 1
          Number of IOs: 85
          Number of bonded IOBs: 85 out of 124 68%
          Number of BRAMs: 1 out of 4 25%
          Number of MULT18X18s: 1 out of 4 25%
          Number of GCLKs: 1 out of 8 12%
          Ngó sơ qua phần này cho biết chip của mình có đủ tài nguyên cho thiết kế này không. Về số lượng FF và LUT thì chính xác. Nhưng về Slice thì đây chỉ là ước tính trước khi xếp lên FPGA. Cho dòng FPGA spartan3, 1 slice có 2 LUT và 2 FF. Số lượng slice sử dụng tùy thuộc vào việc mình có sử dụng hết các LUT và FF trên 1 Slice không. Theo kinh nghiệm:
          SLICE=1/2(LUT+FF)*0.8
          Nếu có 1 trong các tài nguyên vượt quá 100% thì không nên làm tiếp, mất thời gian và sẽ bị lỗi khi xếp lên FPGA.
          Về phần timing report:
          Phần timing report này cũng do Xilinx ước tính, và chưa thật chính xác, chỉ có thể có số liệu chính xác sau khi đã xếp lên FPGA. Nhưng dù gì thì phần report này cũng đại khái cho một số liệu ước tính tần số cao nhất có thể áp lên mạch. Thường thường, sau khi xếp lên FPGA, trễ thực sẽ khoảng 0.7->1.3 lần trễ ước tính, tùy thuộc nhiều yếu tố. Nghĩa là ước tính này sẽ sai số nhiều nhất khoảng 30%. Điều này có ý nghĩa khi mà bạn muốn thiết kế mạch chạy được 100MHz (chu kì 10 ns) nhưng sau khi synthesis, phần mềm thông báo mạch bạn đường trễ dài nhất 13 ns thì cần phải thiết kế lại.
          Cái hay của Xilinx trong phần này là cho bạn biết được mạch của bạn trễ dài nhất ở đâu, đường này gọi là critical path (đường trọng điểm)
          ------------------
          Timing Summary:
          ---------------
          Speed Grade: -5

          Minimum period: 9.540ns (Maximum Frequency: 104.822MHz)
          Minimum input arrival time before clock: 4.936ns
          Maximum output required time after clock: 6.507ns
          Maximum combinational path delay: No path found

          Timing Detail:
          --------------
          All values displayed in nanoseconds (ns)
          ================================================== =======================
          Ví dụ như trong mạch log_10 thì Xilinx thông báo mạch chạy được 104MHz và đường trễ dài nhất bắt đầu ở thanh ghi (register) mant_in_expanded và kết thúc ở myrom.

          Timing constraint: Default period analysis for Clock 'clk'
          Clock period: 9.540ns (frequency: 104.822MHz)
          Total number of paths / destination ports: 4820 / 150
          -------------------------------------------------------------------------
          Delay: 9.540ns (Levels of Logic = 7)
          Source: mant_in_expanded_34 (FF)
          Destination: myrom/Mrom__varindex00001 (RAM)
          Source Clock: clk rising
          Destination Clock: clk rising
          ....
          ------------------------------------------------------------------------

          ================================================== =======================

          Bây giờ giả sử mình muốn tăng tốc độ của mạch, thì mình phải chèn các thanh ghi vào giữa các đường trọng điểm này. Hình phạt là việc mình tốn 2 chu kì, nhưng được cái lợi là mạch có thể chạy ở tần số cao hơn. Tuy nhiên việc chèn các thanh ghi vào giữa rất khó khăn vì chúng ta thiết kế ở mức "hành vi" (behaviorial level), các mạch bên dưới cho các phần mềm tạo ra. Để chèn các thanh ghi vào giữa chúng ta sử dụng Option: Register Balancing hay còn gọi là retiming.
          Nói đơn giản là bạn làm cân bằng các đường trễ để tối ưu hóa đường trễ dài nhất.

          Khi sử dụng option Register Balancing (Ở trong muc Synthesis Option, Xilinx Specific Option), thì phần mềm sẽ tự di chuyển các thanh ghi (register) để cải thiện thời gian trễ.

          Như vậy để tận dụng kĩ thuật này, mình đã thêm một tầng register nữa sau mant_in_shifted (trong file log_10_fast.vhd) và bật chức năng này của Xilinx (Register Balancing-backwards), để có thời gian trễ tốt hơn.


          Sau khi bật Register balance, trễ được giảm đi rất nhiều. Để ý rằng Level of logic lúc sau chỉ bằng 3, lúc đầu = 7.
          ================================================== =======================
          Timing constraint: Default period analysis for Clock 'clk'
          Clock period: 7.001ns (frequency: 142.828MHz)
          Total number of paths / destination ports: 3221 / 246
          -------------------------------------------------------------------------
          Delay: 7.001ns (Levels of Logic = 3)
          Source: mant_in_expanded_38 (FF)
          Destination: mant_in_shifted_1_BRB0 (FF)
          Source Clock: clk rising
          Destination Clock: clk rising

          Data Path: mant_in_expanded_38 to mant_in_shifted_1_BRB0
          Gate Net
          Cell:in->out fanout Delay Delay Logical Name (Net Name)
          ---------------------------------------- ------------
          FD:C->Q 27 0.626 1.721 mant_in_expanded_38 (mant_in_expanded_38)
          LUT2:I1->O 1 0.479 0.851 mant_in_shifted_mux0032<32>61 (N83)
          LUT4:I1->O 1 0.479 0.704 mant_in_shifted_mux0032<33>40 (mant_in_shifted_mux0032<33>_map12)
          LUT4:I3->O 3 0.479 0.771 mant_in_shifted_mux0032<33>151 (mant_in_shifted_mux0032<33>_map33)
          FDS:S 0.892 mant_in_shifted_1_BRB0
          ----------------------------------------
          Total 7.001ns (2.955ns logic, 4.046ns route)
          (42.2% logic, 57.8% route)
          Register balancing hay retiming là một option quan trọng, rất hữu ích và có kết quả trực tiếp trong việc tăng tốc độ xử lý, nó gần giống như khái niệm pipeline. Mục đích chính là cắt đường trễ lớn ra thành các trễ nhỏ.
          Attached Files

          Comment


          • #20
            em có một ý kiến như thế này,giờ những ai đã học FPGA rồi thì nên post các bài tập để cho những người đi sau có cơ hội tiếp cận nhanh hơn,mình qua các chuyên mục khác có nhiều title rất hay bên FPGA chưa có nhiều lắm

            Comment


            • #21
              Àh tại vì đạo FPGA nhìn chung vẫn còn ít người thờ
              .....
              Nhưng nói đi cũng phải nói lại, tài liệu trên internet nhiều vô kể, và các bạn có kinh nghiệm về FPGA cũng không phải là thiếu, chỉ là những ai muốn học có chủ động tìm kiếm thông tin không hay chờ thông tin đến với mình.
              ---
              Aniway, các bạn nào có bài tập/câu hỏi/thắc mắc/thách đố v.v thì dành chút thời giờ pót lên cho xôm tụ nhé

              Comment


              • #22
                Advanced FPGA Design: Architecture, Implementation, and Optimization by Steve Kilts(pdf)

                http://ebooks-freedownload.com/2009/...hitecture.html

                Enjoy!

                Comment


                • #23
                  Đọc qua những bài của Jeff trên đề tài này rồi tôi mới hiểu là tại sao SV Việt Nam chí trọng về FPGA kit. Tại sao trường học ở VN không xin mấy hãng EDA những phần mềm về simulation và synthesis (tổng hợp) để dạy cho SV? Đa số những hãng EDA đều có chương trình ủng hộ cho bên giáo dục (High Education Program).

                  Tony
                  Chúc một ngày vui vẻ
                  Tony
                  email : dientu_vip@yahoo.com

                  Comment


                  • #24
                    Ý của anh Tony là sao?
                    Em cũng có cảm giác trên diễn đàn này, đa số mọi người hứng thú với thiết kế các kit FPGA.

                    Comment


                    • #25
                      Nguyên văn bởi jefflieu Xem bài viết
                      Àh tại vì đạo FPGA nhìn chung vẫn còn ít người thờ
                      .....
                      Nhưng nói đi cũng phải nói lại, tài liệu trên internet nhiều vô kể, và các bạn có kinh nghiệm về FPGA cũng không phải là thiếu, chỉ là những ai muốn học có chủ động tìm kiếm thông tin không hay chờ thông tin đến với mình.
                      ---
                      Aniway, các bạn nào có bài tập/câu hỏi/thắc mắc/thách đố v.v thì dành chút thời giờ pót lên cho xôm tụ nhé
                      Em chào bác jefflieu,
                      Em mới bắt đầu bước vào đạo FPGA, để kiểm tra trình độ để xem có tiếp nhận làm đệ tử hay không, sư phụ em một hôm đến vỗ vai em và nói: " . . . hay về dùng con FPGA làm cho ta bộ tạo trễ, độ trễ có thể thay đổi được đấy nhé. Bộ này nhà ngươi làm sao thì làm, miễn là khi ta cho đầu vào là 1 tín hiệu tương tự (ví dụ đơn giản nhất là 1 tín hiệu hình sin), đầu ra ta thu được 1 cái tín hiệu y chang cái tín hiệu đầu vào mỗi tội nó bị làm trễ đi mất 1 thời gian là T (ví dụ là 0.1 ms). Nói xong lão sư biến mất tăm
                      Vâng lời sư phụ, em mang giấy ra ngồi vẽ mạch, sau 1 khoảng thời gian dài không đụng cham gì tới may cái circuit design (các bác thông cảm là em hơi bị gà vụ này). Em cũng về trằn trọc mấy đêm và cho ra được 1 cái report về ý tưởng thiết kế. Nhưng càng nghĩ em lại càng thấy ý tưởng của em siêu gà.
                      Trong buổi tối ngồi cắn bút chì nghĩ cách vượt qua được thử thách đầu tiên hòng huy vọng được nhấp đạo FPGA, em post câu hỏi của sư phụ em lên đây cho bác jefflieu và anh em đồng đạo giúp cho em 1 ít ý tưởng.
                      Em xin chân thành cảm ơn!!!

                      Comment


                      • #26
                        Nguyên văn bởi cachep Xem bài viết
                        Em chào bác jefflieu,
                        Em mới bắt đầu bước vào đạo FPGA, để kiểm tra trình độ để xem có tiếp nhận làm đệ tử hay không, sư phụ em một hôm đến vỗ vai em và nói: " . . . hay về dùng con FPGA làm cho ta bộ tạo trễ, độ trễ có thể thay đổi được đấy nhé. Bộ này nhà ngươi làm sao thì làm, miễn là khi ta cho đầu vào là 1 tín hiệu tương tự (ví dụ đơn giản nhất là 1 tín hiệu hình sin), đầu ra ta thu được 1 cái tín hiệu y chang cái tín hiệu đầu vào mỗi tội nó bị làm trễ đi mất 1 thời gian là T (ví dụ là 0.1 ms). Nói xong lão sư biến mất tăm
                        Vâng lời sư phụ, em mang giấy ra ngồi vẽ mạch, sau 1 khoảng thời gian dài không đụng cham gì tới may cái circuit design (các bác thông cảm là em hơi bị gà vụ này). Em cũng về trằn trọc mấy đêm và cho ra được 1 cái report về ý tưởng thiết kế. Nhưng càng nghĩ em lại càng thấy ý tưởng của em siêu gà.
                        Trong buổi tối ngồi cắn bút chì nghĩ cách vượt qua được thử thách đầu tiên hòng huy vọng được nhấp đạo FPGA, em post câu hỏi của sư phụ em lên đây cho bác jefflieu và anh em đồng đạo giúp cho em 1 ít ý tưởng.
                        Em xin chân thành cảm ơn!!!
                        Tôi chỉ góp ý kiến thôi, cachep nên tự nghĩ ra nhé:

                        1) Hình Sin là analog, cachep nên chuyển qua digital.
                        2) Muốn làm trễ thời gian thì tín hiệu phải đi qua một số logic nào đó. Nếu đi qua AND, OR, XOR, vân vân ... thì khó xác định độ trễ vì còn tùy thuộc vào technology cho nên tín hiệu cần phải đi qua ??? (cachep tự suy nghĩ) thì mới có độ trễ cố định.

                        Chúc cachep tự tìm ra câu trả lời và chia sẻ với mọi người
                        Tony
                        Chúc một ngày vui vẻ
                        Tony
                        email : dientu_vip@yahoo.com

                        Comment


                        • #27
                          - Cần phải biết giới hạn của tín hiệu đưa vào : Đưa vào hình SIN 1 GHz thì làm khác, 1 Hz thì làm khác.
                          - Tái tạo lại y chang là sao? Không cách gì tái tạo lại y chang được.
                          - Trễ đó đó có tương quan gì với tần số tin hiệu đưa vào?

                          Comment


                          • #28
                            Nguyên văn bởi tonyvandinh Xem bài viết
                            Đọc qua những bài của Jeff trên đề tài này rồi tôi mới hiểu là tại sao SV Việt Nam chí trọng về FPGA kit.
                            Tony
                            Em chưa hiểu ý anh. Sao anh lại suy ra điều đó từ mấy bài viết của em?

                            Comment


                            • #29
                              Nguyên văn bởi jefflieu Xem bài viết
                              Em chưa hiểu ý anh. Sao anh lại suy ra điều đó từ mấy bài viết của em?
                              Có thể là tôi hiểu lầm vì qua những design flow mà Jeff nói trên, tôi không thấy đề cập tới RTL simulation cho nên tôi suy đoán là sv VN dùng FPGA kit để xác nghiệm thiết kế.

                              Có nhiều kỹ sư đã cut short RTL simulation vì ỷ vào xác nghiệm dùng FPGA (sai thì sửa kô mất mát gì hết mentality) cho nên không chú trọng học hỏi thêm về advance verification và mất lợi thế khi thiết kế trở thành phức tạp hơn.

                              Nếu tôi có hiểu lầm thì bỏ qua nhe.

                              Tony
                              Chúc một ngày vui vẻ
                              Tony
                              email : dientu_vip@yahoo.com

                              Comment


                              • #30
                                Nguyên văn bởi tonyvandinh Xem bài viết
                                Có thể là tôi hiểu lầm vì qua những design flow mà Jeff nói trên, tôi không thấy đề cập tới RTL simulation cho nên tôi suy đoán là sv VN dùng FPGA kit để xác nghiệm thiết kế.

                                Có nhiều kỹ sư đã cut short RTL simulation vì ỷ vào xác nghiệm dùng FPGA (sai thì sửa kô mất mát gì hết mentality) cho nên không chú trọng học hỏi thêm về advance verification và mất lợi thế khi thiết kế trở thành phức tạp hơn.

                                Nếu tôi có hiểu lầm thì bỏ qua nhe.

                                Tony
                                Àh, trong phần này em chủ yếu viết về FPGA + FPGA tool ... nên không đề cập đến RTL simulation và HDL, em nghĩ phần này thuộc về Digital System Design.
                                RTL simulation là phần không thể thiếu trong Digital System Design nói chung và trong FPGA nói riêng, không simulate trước thì chỉ có mất thời gian.
                                Jeff dừng vì cảm thấy ít người hưởng ứng, có vẻ mấy thứ em nghĩ quan trọng không phù hợp hoặc ai cũng biết.

                                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