Thông báo
Collapse
No announcement yet.
Tâm sự về FPGA
Collapse
X
-
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
-
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:
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: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%
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.
================================================== =======================
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ỏ.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)
Leave a comment:
-
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
Leave a comment:
-
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
Leave a comment:
-
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.
Leave a comment:
-
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.
Leave a comment:
-
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
Leave a comment:
-
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) ...
Leave a comment:
-
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ứ.
Leave a comment:
-
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
Leave a comment:
-
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ế ...
Leave a comment:
Về tác giả
Collapse
Bài viết mới nhất
Collapse
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:05 -
-
Trả lời cho Giúp mình vẽ sơ đồ và phân tích nguyên lý làm việc của khảo sát các mạch nguồn ổn áp vớibởi Tuyenvc345
-
Channel: Hỗ trợ học tập
Hôm qua, 18:04 -
-
bởi bqvietDiễn đàn vốn vắng, muốn vào viết bài trả lời chút nhưng cứ thấy luồng nào thành viên này mở thì cũng đồng thời xuất hiện ở Otofun, thế là chùn tay ... Thôi thì dientuvietnam không thể so sánh được về độ phổ cập, biết thân biết phận vậy.
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 17:49 -
-
bởi chinhnguyen9So sánh sóng 2 mạch nguồn Push-pull
· Sóng vuông giửa 2 cực D của mạch Pushpull trong module inverter 24-220V sine giả của TQ. Mạh điện này khá đặc biêt ở chổ, không thấy mạch snubber mà hiêu quả triêt sóng hài quá tốt dù hoạt...-
Channel: Nguồn!
Hôm qua, 14:27 -
-
bởi chinhnguyen9Mạch điên bếp tù gộm 2 khối:
Khối điêu khiển:
-Thiết lập công suất nấu
-Thiết lập thời gian nấu
-Kiểm tra có đặt nồi hay không, đúng loại hay không?
-Có quá nhiệt không?
Khối công suất:
- Nắn+ lọc điên AC ra 310VDC +loọc nhiểu...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 14:05 -
-
bởi ittcHi các bác, sau khi được vài lời khuyên thì em có vào lướt web để xem vài mẫu máy, thì ở phần thông số kỹ thuật của máy, thấy họ để vài thông số sau thì em không rành lắm, nhờ các bác giải thích hộ em được không, cụ thể như hình...
-
Channel: Điện tử gia dụng
15-03-2026, 18:34 -
.

Leave a comment: