Hiện thực hóa thiết kế

Một phần của tài liệu bài giảng môn thiết kế vi mạch lập trình được - nguyễn thế dũng (Trang 88 - 94)

Hiện thực hóa thiết (Implementation) kế FPGA là quá trình chuẩn bị dữ liệu cho việc cấu hình FPGA từ thông tin đầu vào là mô tả netlist. Quá trình này bắt đầu bằng quá trình biên dịch và ánh xạ thiết kế lên đối tượng FPGA cho tới khi thiết kế vật lý được phân bố cụ thể và kết nối với nhau. Quá trình đó gồm 3 bước như sau:

Hình 3.6. Quá trình hiện thực hoá FPGA 3.2.3.1. Translate

Netlist của chương trình được dịch thành định dạng EDIF (Electronic Device Interchangeable Format) hoặc NGC format (một định dạng netlist riêng của Xilinx)sau đó kết hợp với hai file quy định điều kiện ràng buộc của thiết kế.

- NCF (Native Constraint File) chứa những thông tin vật lý về thời gian, tốc độ, các tham số tải, tham số vật lý ký sinh… của chip vật lý FPGA là đối tượng sẽ tiến hành cấu hình.

- UCF (User Constraint File) chứa những ràng buộc yêu cầu từ phía người thiết kế với vi mạch của mình. UCF được xem là một phần quan trọng trong thiết kế, nếu như mô tả chức năng chỉ quy định vi mạch định làm gì thì trong file UCF sẽ chứa những yêu cầu đòi hỏi về tốc làm việc (timing constraint) cũng như mức độ sử dụng tài nguyên. Các yêu cầu này là cơ sở cho các trình biên dịch trong ISE tối ưu hóa thiết kế. Để có thể viết được những yêu cầu này thì người thiết kế trước hết phải hiểu rất rõ thiết kế của mình, chẳng hạn trong thiết kế có dùng những tín hiệu xung nhịp như thế nào, khu vực tổ hợp nào có khả

năng gây ra thời gian trễ lớn nhất và ước tính được giá trị của độ trễ. Phân tích nội dung một file UCF có nội dung như dưới đây.

# IO location defination

NET "HIGH_voltage" LOC = P102; NET "LOW_voltage" LOC = P100; NET "voltage[0]" LOC = P160; NET "voltage[1]" LOC = P161; NET "voltage[2]" LOC = P162; NET "voltage[3]" LOC = P163; # Timing constraint

INST "LOW_voltage" TNM = "OUT_REG"; INST "HIGH_voltage" TNM = "OUT_REG";

NET "voltage[0]" OFFSET = IN 2 ns VALID 0.5 ns BEFORE "CLK" TIMEGRP "OUT_REG" RISING;

NET "voltage[1]" OFFSET = IN 2 ns VALID 0.5 ns BEFORE "CLK" TIMEGRP "OUT_REG" RISING;

NET "voltage[2]" OFFSET = IN 2 ns VALID 0.5 ns BEFORE "CLK" TIMEGRP "OUT_REG" RISING;

NET "voltage[3]" OFFSET = IN 2 ns VALID 0.5 ns BEFORE "CLK" TIMEGRP "OUT_REG" RISING;

Nhóm mô tả thứ nhất quy định cách gán chân vào ra của FPGA, cách gán chân này phụ thuộc thứ nhất vào từng loại FPGA, thứ hai vào bản mạch ứng dụng FPGA cụ thể, chẳng hạn như ở trên các chân voltage được gán cho các cổng từ P160 đến P163, còn hai tín hiệu LOW_voltage và HIGH_voltage được gắn cho chân P102 và P100.

Nhóm thứ hai mô tả điều kiện ràng buộc về mặt thời gian: hai lệnh đầu ghép hai Flip-flop đầu ra của mạch thành một nhóm có tên là OUT_REG, 4 lệnh

OFFSET = IN 2 ns VALID 0.5 ns BEFORE "CLK" TIMEGRP "OUT_REG" RISING

nghĩa là thời gian trễ của các tín hiệu này trước khi đến các Flip-Flop của nhóm OUT_REG không quá 2 ns và thời gian giữ tín hiệu ổn định cho Flip-Flop (Setup time) không qus 0,5 ns.

Xilinx ISE hỗ trợ trình soạn thảo với giao diện đồ họa cho UCF tuy vậy có thể sử dụng trình soạn thảo Text bất kỳ để soạn file UCF, yêu cầu duy nhất là đặt tên file UCF trùng với tên thiết kế.

Hình 3.7. Quá trình biên dịch

Quá trình translate sẽ đọc các thông tin từ 3 file trên và chuyển về định dạng NGD (Native Generic Database) của Xilinx để phục vụ cho hai bước kế tiếp là Mapping và Routing.

NGD bản chất là một mô tả cấu trúc của mạch trên cơ sở các phần tử chức năng được mô tả trong thư viện có tên SIMPRIM (simulation primitves) của Xilinx. Các phần tử này không phụ thuộc vào FPGA cụ thể, nó có thể được sử dụng cho tất cả các dạng FPGA và CPLD của Xilinx.

Người thiết kế có thể tạo ra file netlist để phục vụ mô phỏng kiểm tra sau Translate (Post-translate simulation model). Ví dụ file netlist như sau:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL; library SIMPRIM;

use SIMPRIM.VPACKAGE.ALL; entity sp3_led is

port (

LED1 : out STD_LOGIC; LED2 : out STD_LOGIC; ...

SW7 : in STD_LOGIC := 'X'; SW8 : in STD_LOGIC := 'X' );

end sp3_led;

architecture Structure of sp3_led is signal LED1_OBUF_1 : STD_LOGIC; signal SW8_IBUF_31 : STD_LOGIC; begin LED81 : X_LUT2 generic map( INIT => X"1" ) port map ( ADR0 => SW8_IBUF_31, ADR1 => SW7_IBUF_29, O => LED8_OBUF_15); ... SW8_IBUF : X_BUF port map (

O => SW8_IBUF_31); LED51_INV_0 : X_INV port map ( I => SW5_IBUF_25, O => LED5_OBUF_9); LED8_OBUF : X_OBUF port map ( I => LED8_OBUF_15, O => LED8); NlwBlockROC : X_ROC

generic map (ROC_WIDTH => 100 ns) port map (O => GSR);

NlwBlockTOC : X_TOC port map (O => GTS); end Structure;

3.2.3.2. Maping

Mapping là động tác gán các khối sơ đồ logic vào các khối cơ sở của một FPGA cụ thể, đầu vào của quá trình là dữ liệu được lưu trong file NGD bao gồm mô tả logic sử dụng các phần tử chức năng độc lập với công nghệ có trong thư viên SIMPRIM và các thông tin về các khối, đương kết nối cố định. Đầu ra của quá trình này là một file dạng NCD (Native Circuit Database), file này chứa mô tả chức năng mạch thiết kế trên đối t ợng FPGA cụ thể.

Quá trình maping trải qua các bước cơ sở như sau: - Đọc thông tin của đối tượng FPGA.

- Đọc thông tin thiết kế từ file NGD.

- Thực hiện DRC (Design Rule Check) Kiểm tra thiết kế bao gồm: kiểm tra khối (Block check) là kiểm tra sơ đồ kết nối của các khối, kiểm tra sự tồn tại của các mô tả khối con. Kiểm tra các đường nối logic (Net check) bao gồm kiểm

tra các khối đầu vào đầu ra và việc tuân thủ các quy tắc nối các đầu vào đầu ra đó. Ngoài ra còn có các kiểm tra khác như kiểm tra các vị trí vào ra (PAD check), kiểm tra các khối đệm cho tín hiệu đồng bộ (Clock buffer check), kiểm tra sự trùng lặp tên gọi(Name check).

- Nếu như bước DRC không phát sinh ra lỗi thì quá trình maping được thực hiện tiếp tục, ở bước này sẽ tiến hành lược bỏ các phần tử thừa trong thiết kế và ánh xạ các khối thiết kế lên các khối chức năng của đối tượng FPGA cụ thể…

- Tạo ra một file chứa các điều kiện ràng buộc của mô tả vật lý của mạch sinh ra bởi bước trên PCF (Physical Constrait File), với nội dung là tập hợp tất cả các điều kiện ràng buộc của thiết kế ở cấp độ cổng (NCF, UCF) và đối tượng FPGA cụ thể.

- Thực hiện DRC với thiết kế đã ánh xạ, nếu DRC ở bước này không gây ra lỗi thì sẽ thực hiện bước cuối cùng là tạo ra file NCD.

3.2.3.3. 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).

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 mức, kết thúc Placing một kết quả NCD mới được tạo ra.

Routing: Là quá trình tiến hành sử dụng các tài nguyên kết nối (interconnects), các kết nối được thực hiện nhằm đạt thời gian trễ thấp nhất có thể, khi kết nối PAR sẽ phải quan tâm tới thông tin trong PCF file. Quá trình này cũng được thực hiện thành nhiều pha, ở mỗi pha một file NCD mới sẽ được lưu lại nếu như có được sự tối ưu về thời gian so với phương án trước đó.

Floorplaning: Là quá trình cho phép người thiết kế sử dụng FPGA editor để can thiệp vào quá trình Placing và Routing, bước này có thể làm trước hoặc sau các bước của PAR.

Một phần của tài liệu bài giảng môn thiết kế vi mạch lập trình được - nguyễn thế dũng (Trang 88 - 94)