Kết nối xa - Long line
Hình 2.17. Đường kết nối dài
Đường kết nối dài gồm tổ hợp 24 đường nối 1 trong 4 CLB liên tiếp theo phương ngang hoặc phương dọc. Từ mỗi ô kết nối có 4 đường kết nối thông qua
26 ma trận chuyển để nối với các ô còn lại. Đƣờng kết nối xa có trở kháng thấp do vậy thích hợp cho những tín hiệu toàn cục như CLK hay Reset.
Kết nối 3- Hex lines
hf Hình 2.18. Đường kết nối 3
Kết nối 3 là kênh kết nối gồm 8 đường nối tới 1 trong 3 CLB liên tiếp, đối với kết nối dạng này tín hiệu chỉ có thể truyền từ một đầu xác định tới các đầu khác theo hướng mũi tên như hình 2.18.
Kết nối kép – Double lines
Hình 2.18. Đường kết nối kép
Kết nối kép là kênh kết nối gồm 8 đường nối tới 1 trong 2 CLB liên tiếp, đối với kết nối dạng này tín hiệu chỉ có thể truyền từ một đầu xác định tới các điểm khác như hex lines. Số lượng của double lines trong FPGA lớn hơn nhiều so với hai dạng Long lines và Hex lines do khả năng kết nối linh động.
Kết nối trực tiếp - Direct lines
Hình 2.19. Đường kết nối trực tiếp
Kết nối trực tiếp kết nối các CLB cạnh nhau theo phương ngang, dọc và chéo mà không cần thông qua ma trận kết nối.
Việc phân cấp các tài nguyên kết nối trong FPGA tuy làm cho việc thiết kế bản thân FPGA phức tạp hơn cũng như tăng độ phức tạp cho thuât toán kết nối đường truyền nhưng góp phần rất lớn vào việc tiết kiệm diện tích và tối ưu hóa thiết kế trên FPGA. Trên
27 thực tế việc sử dụng tài nguyên kết nối trong FPGA được thực hiện tự động, bản thân người thiết kế ít tham gia vào quá trình này hoặc nếu có chỉ là tạo các tín hiệu toàn cục kiểu như CLK, RS, TST để sử dụng phân bố đã được tối ưu hóa của các tín hiệu này. 2.4 Khối RAM
Bên cạnh nguồn tài nguyên lưu trữ dữ liệu như trình bầy ở trên là RAM phân tán (Distributed RAM) với bản chất là một hình thức sử dụng khác của LUT thì trong Xilinx FPGA còn đƣợc tích hợp các RAM (Block RAM) riêng biệt được cấu hình như một khối RAM hai cổng, số lượng này trong Spartan 3E thay đổi từ 4 đến 36 tùy theo từng IC cụ thể. Tất cả Block RAM hoạt động đồng bộ và có khả năng lưu trữ tập trung một khối lượng lớn thông tin. Giao diện của một Khối RAM như sau:
Hình 2.20. Giao diện khối RAM
Khối RAM có hai cổng A và B vào ra cho phép thực hiện các thao tác đọc ghi độc lập với nhau, mỗi một cổng có các tín hiệu xung nhịp đồng bộ, kênh dữ liệu và các tín hiệu điều khiển riêng. Có 4 đường dữ liệu cơ bản như sau:
1) Đọc ghi cổng A 2) Đọc ghi cổng B
3) Truyền dữ liệu từ A sang B 4) Truyền dữ liệu từ B sang A
28 Hình 2.21. Phân bố của các khối RAM trong Spartan 3E FPGA
Tùy theo từng FPGA cụ thể mà có thể có từ một đến 5 cột bố trí Block RAM, các cột này thường được bố trí bên cạnh cùng các khối nhân 18-bit. 16-bit cổng A phần thuộc khối nhớ bên trên dùng chung với 16 bit cổng A, tương tự như vậy với 16 bit cổng B của Block RAM được chia sẻ với 16 bit cổng B của khối nhân.
2.5 Khối nhân chuyên dụng 18x18
Các khối nhân chuyên dụng 18bitx18bit (Dedicated Multiplier) được thiết kê riêng, thường được ứng dụng trong các bài toán xử lý tín hiệu số, ký hiệu là MULT18X18SIO trong thư viện chuẩn của Xilinx.
Các khối nhân được đặt tại các vị trí sát với các Block RAM nhằm kết hợp hai khối này cho những tính toán lớn với tốc độ cao. Số lượng của các khối này bằng với số lượng của các khối RAM trong FPGA, ngoài ra hai thành phần này còn chia sẻ với nhau các cổng A, B 16 bit dùng chung..
Khối nhân trong Spartan 3E thực hiện phép nhân hai số 18 bit có dấu, kết quả là một số 36 bit có dấu. Phép nhân không dấu được thực hiện bằng cách giới hạn miền của số nhân và số bị nhân (bit dấu luôn bằng 0). Mô tả các cổng vào ra của phần tử nhân MULT18X18SIO thể hiện ở hình sau:
29 Hình 2.21. Cổng vào ra của khối nhân 18 bit
Khối nhân có tất cả 13 cổng vào ra với các chức năng như sau: A, B[17:0] là cổng vào 18 bit số nhân và số bị nhân. P[35:0] là 36 bit kết quả nhân (Product).
CEA, CEB là tín hiệu cho phép xung nhịp ở các đầu vào A, B.
RSTA, RSTB, RSTP là các cổng Set/Reset đồng bộ tương ứng cho các giá trị A, B, P.
CLK là tín hiệu xung nhịp đồng bộ cho các Flip-flop trong khối nhân.
BCIN, BCOUT[17:0] là các cổng vào ra tương ứng nhằm chia sẻ giá trị số bị nhân giữa các khối nhân với nhau nhằm mục đích tạo thành các khối nhân nhiều bit hơn. BCOUT = BCIN.
Pipelined option: Khối nhân có thể được thực hiện như một khối tổ hợp thuần túy hoặc có thể chia nhỏ bởi các thanh ghi để đạt hiệu suất làm việc cao hơn. Cấu trúc pipelined của khối nhân thể hiện ở hình sau:
30 Hình 2.21. Cấu trúc pipelined của khối nhân
Các nhân tử A, B và kết quả P có thể được lưu trong các thanh ghi trung gian gồm AREG, BREG, PREG, mỗi thanh ghi là một chuỗi các Flip-flop. Trong cấu trúc pipelined đó thì REGA, REGB có cùng mức.
2.6 Khối điều chỉnh xung nhịp đồng bộ
Digital Clock Manager (DCM) là một khối đặc biệt trong FPGA có nhiệm vụ điều chỉnh và tạo ra xung nhịp đồng bộ (Clock) theo những yêu cầu cụ thể của bài toán. DCM có cấu tạo không đơn giản và có số lượng hạn chế (2-4 DCM trong Spartan 3E). 3 thao tác chính mà khối DCM có thể thực hiện là:
- Loại bỏ độ trễ giữa các xung Clock ở các vị trí khác nhau (Clock Skew Elimination). Xung đồng bộ gửi tới các thành phần khác nhau trong FPGA có thể không đến đồng thời do sự khác biệt về tải đường truyền. DCM có khả năng tăng các giá trị Thold, Tsetup của xung đồng bộ và thời gian từ điểm kích hoạt cho tới khi đầu ra ổn định Tclk_q để ―đồng nhất‖ các xung đồng bộ. Trong các bài toán đòi hỏi làm việc với tần số cao thì đây là một trong những thao tác không thể bỏ qua.
- Tổng hợp tần số (Frequency Synthesis): Tổng hợp tần số ở đây bao gồm nhân và chia tần số, với tần số cố định đầu vào DCM có thể thực hiện thao tác nhân tần số với 1 số M, chia cho một số D hoặc đồng thời nhân và chia M/D. Đây là một khả năng đặc biệt quan trọng cho những bài toán yêu cầu tần số làm việc là cố định như điều khiển VGA, DAC, ADC, LCD…
31 - Dịch pha (Phase shifting) Dịch pha của xung nhịp đồng bộ đi 0, 90, 180, hoặc
270 độ.
Hình 2.22. Sơ đồ khối DCM
Khối DCM được cấu tạo từ 4 khối chính, khối dịch pha PhS (Phase shifter), khối lặp khóa pha DLL (Delay Locked Loop), khối tổng hợp tần số DFS (digital Frequency Synthesis) và khối Trạng thái logic của DCM.
32
Chương 3: Quy trình thiết kế bằng ISE
Một trong những yếu tố góp phần vào sự thành công của FPGA phải kể đến là có một quy trình thiết kế đơn giản, hoàn thiện được thực hiện bằng các bộ phần mềm chuyên dụng. Các phần mềm này được tích hợp nhiều các thuật toán xử lý tối ưu khác nhau nhằm tăng tính tự động hóa cho quy trình thiết kế. Trong đề tài này tập trung tìm hiểu phần mềm thiết kế FPGA băng Xilinx ISE (Integrated Software Enviroments).
Có một số điểm khác nhau cho từng loại FPGA hay cho FPGA của từng hãng nhưng quy trình thiết kế IC số sử dụng FPGA chung đều có thể chia thành năm bước thể hiện ở sơ đồ dưới đây:
33 3.1 Idea Design
Để thiết kế một con chip, người thiết kế cần có ý tưởng một cách chính xác những gì con chip đó sẽ hoạt động. Tất cả các bước thiết kế tiếp theo luôn phải đảm bảo ý tưởng thiết kế đúng như ban đầu.
3.2 Specifications – Sự chỉ định rõ
Đây là bước đầu tiên để biến ý tưởng vào trong một con chip. Specifications chỉ ra những mục đích cụ thể của thiết kế:
Mục đích và những ràng buộc của thiết kế. Chức năng của chip.
Hiệu suất của chip như tốc độ và năng lượng tiêu thụ. Những ràng buộc về công nghệ như kích thước (ASIC) Công nghệ sản xuất và kĩ thuật thiết kế (ASIC)
Trong bước này cũng chỉ rõ kiểu kiến trúc mà người thiết kế mong muốn như RISC/CISC, ALU, pipelining… để dễ dàng cho việc thiết kế một hệ thống phức tạp, người ta thường chia nhỏ thiết kế thành nhiều khối nhỏ. Chức năng của các khối này cũng được chỉ định rõ. Đồng thời, mối quan hệ giữa các khối với nhau và với toàn bộ hệ thống cũng được xác định cụ thể.
3.3 RTL
Khi toàn bộ hệ thống đã được chỉ định rõ, thiết kế cần phải được thực thi. Thiết kế được thực thi bằng diễn tả logic (Boolean Expressions), máy biến trạng thái (Finite State Machines), mạch tổ hợp (Combinational), mạch tuần tự ( Sequencial), Schematic… Bước này được gọi là Logic Design/RTL Design (Register Transfer Level). RTL về cơ bản mô tả các khối nhỏ trong hệ thống. RTL thường được miêu tả bằng Verilog hoặc VHDL, được gọi là ngôn ngữ mô tả phần cứng (Hardware Description Languages). HDL được dùng để mô tả hệ thống số như một vi xử lý, bộ nhớ hay một flip flop đơn giản. Điều này có nghĩa là, bằng cách sử dụng ngôn ngữ mô tả phần cứng, ta có thể mô tả một phần cứng (digital) bất kì, tại bất kì mức nào. Funtional/ Logical Verification là công đoạn để dảm bảo rằng RTL design đúng với mục đích thiết kế ban đầu.
Bên cạnh dạng mô tả HDL của người dùng thì có dạng mô tả HDL thứ hai sử dụng các khối thiết kế có sẵn. Loại mô tả này có hai dạng, thứ nhất là các khối thiết kế được định nghĩa trong thư viện UNISIM của Xilinx. Khi muốn cài đặt các khối này thì phải khai báo thêm thư viện Unisim ở đầu thiết kế:
library UNISIM;
34 Một số khối thiết kế điển hình là các LUT, thanh ghi dịch, Block RAM, ROM, DCM…có thể tìm thấy trong Language template của ISE, các khối này gọi chung là các phần tử cơ bản của FPGA (FPGA primitives), đặc điểm của các khối này là phụ thuộc vào đối tượng FPGA cụ thể.
Hình 3.2. Các dạng mô tả thiết kế trên FPGA
Ngoài FPGA primitives thì ISE cho phép người dùng sử dụng một số khối thiết kế sẵn ở dạng IPCore (Intellectual Property core). IP core là các khối thiết kế sẵn có đăng ký sở hữu trí tuệ và thường là các thiết kế khá phức tạp ví dụ như các khối FIFO, khối làm việc với số thực (Floating Point Unit), khối chia, các khối CORDIC, các khối giao tiếp Ethernet, PCI EXPRESS, SPI, các khối xử lý số tín hiệu… Trong khuôn khổ chương trình học thì việc sử dụng này là được phép tuy vậy nếu muốn sử dụng các khối này với mục đích tạo ra sản phẩm ứng dụng thì cần xem xét kỹ vấn đề bản quyền. Với sự hỗ trợ phong phú của các IP Cores này cho phép thực hiện những thiết kế lớn và hữu dụng trên FPGA. Lưu ý là khi sử dụng các khối này thì phần thiết kế HDL thực sự cũng bị ―giấu đi‖ mà chương trình chỉ cung cấp các mã đã biên dịch và mô tả giao diện (wrapper file) của IPCore được sử dụng.
3.4 Synthesis
Công cụ Synthesis lấy file RTL cùng với thư viện chuẩn để tạo ra một file neslist. Quá trình tổng hợp FPGA (FPGA Synthesis) bằng chương trình ISE bao
35 Hình 3.3. Tổng hợp thiết kế FPGA trên Xilinx ISE
Check Syntax & Synthesis: Trước khi thiết kế được tổng hợp thì mã nguồn VHDL được biên dịch và kiểm tra trước. Nếu xuất hiện lỗi cú pháp ở mã nguồn thì qua trình tổng hợp sẽ dừng lại. Nếu mô tả VHDL không có lỗi thì chuyển sang bước thứ hai là tổng hợp (synthesis). Tổng hợp thiết kế là chuyển mô tả tử mức trừu tượng cao (con người có thể đọc hiểu) xuống mức trừu tượng thấp hơn (máy tính mới có khả năng đọc hiểu). Đối với FPGA quá trình tổng hợp logic là quá trình biên dịch từ mô tả chức năng sang mô tả cổng (netlist). Mô tả cổng bản chất vẫn là các mô tả VHDL nhưng sử dụng các phần tử của FPGA, hiểu một cách khác nếu mô tả chức năng là sơ đồ nguyên lý thì mô tả netlist là sự chi tiết hóa sơ đồ nguyên lý. Có thể so sánh mã dưới dạng Netlist như mã Assembly của chương trình gốc mô tả bằng các ngôn ngữ lập trình bậc cao C/C++, Pascal, Basic...
Các mã nguồn VHDL đƣợc chia thành hai dạng là tổng hợp được (Synthesizable code) và không tổng hợp được (Simulation-only code), việc phân biệt hai dạng mã nguồn này được ISE làm tự động. Khi cố tình tổng hợp một cấu trúc chỉ dùng cho mô phỏng thì sẽ gây ra lỗi. Người thiết kế vì vậy ngoài việc đảm bảo chức năng làm việc đúng cho mạch còn luôn phải đảm bảo rằng những cấu trúc viết ra là những cấu trúc có thể tạo thành mạch thật nghĩa là tổng hợp được.
Kết xuất mô tả netlist: mô tả netlist là mô tả VHDL của thiết kế nhưng được ánh xạ lên thư viện phần tử logic của FPGA. Mô tả netlist là dạng mô tả ở mức cổng vì vậy không mô tả trực quan được chức năng của vi mạch mà chỉ thể hiện được cấu trúc của mạch, trong đó các khối con (components) là các phần tử cơ bản được mô tả trong thư viện UNISIM của FPGA.
Netlist có thể không phản ánh đúng bản chất thực tế của mạch mà mô tả này này chỉ sử dụng để kiểm tra lại chức năng của vi mạch sau khi ánh xạ lên thư viện phần tử FPGA. Việc kiểm tra này được thực hiện giống như kiểm tra mô tả VHDL ban đầu, tức là có thể dùng bất kỳ chương trình mô phỏng logic nào mà hỗ trợ thư viện UNISIM.
36 Create Technology schematic (Sơ đồ công nghệ chi tiết) Sau khi tổng hợp chương trình cũng cho phép kết xuất sơ đồ công nghệ chi tiết của thiết kế mà bản chất là mô tả trực quan bằng hình ảnh của netlist, ví dụ một sơ đồ công nghệ chi tiết ở hình sau:
Hình 3.4. Schematic tổng hợp được trên ISE
Việc so sánh sơ đồ này với sơ đồ nguyên lý ở bước ban đầu cho phép kiểm tra trực quan sơ bộ việc thực hiện đúng sơ đồ nguyên lý của mô tả VHDL.
Create RTL schematic (Sơ đồ logic chi tiết) Sơ đồ logic chi tiết là sơ đồ thể hiện chức năng của thiết kế sử dụng các cổng logic chuẩn như AND, OR, NOT, FFD thay vì sử dụng các phần tử chuẩn của FPGA, sơ đồ này vì thế không phụ thuộc vào đối tượng công nghệ cụ thể.
37 3.5 Physical Implementation – Hiện thực hóa thiết kế
File neslist được chuyển thành dạng mô tả hình học. Physical Implementation gồm có 3 bước: Floor planning->Placement->Routing.
Place and Routing
Placing & Routing (PAR) là quá trình ánh xạ những khối logic đã được phân chia ở phần Maping sang những khối logic (LUT, IOBUF…) có vị trí cụ cụ thể trên FPGA và kết nối chúng lại với nhau thông qua khối tài nguyên kết nối. Người thiết kế có thể can thiệp vào quá trình này bằng FPGA editor, một công cụ giao diện đồ họa tích hợp trong ISE, nhưng trên thực tế thì quá trình này thƣờng thực hiện hoàn toàn tự động bằng công cụ PAR (Place and Route).
Hình 3.6. Phân bố và kết nối
Placing: Ở bước này PAR lựa chọn các khối logic chức năng cụ thể phân bố trên FPGA để gán cho các khối chức năng trên mô tả thiết kế, việc lựa chọn dựa trên các tiêu chí như nguồn tài nguyên, độ dài kết nối, điều kiện ràng buộc trong PCF file… Quá trình này thực hiện thông qua một số pha, kết thúc mỗi pha thì thiết kế được tối ưu thêm một