Professional Documents
Culture Documents
Huong Dan Thuc Hanh FPGA Xilinx Ise V Kit Spartan 3e
Huong Dan Thuc Hanh FPGA Xilinx Ise V Kit Spartan 3e
Tiếp theo, chọn NEXT để sang cửa sổ thiết lập các thuộc tính cho project, ở đây ta phải
chọn đúng tên, gói (package), và tốc độ cho FPGA mà chúng ta muốn nạp, những thông tin này
ghi trên mặt trên của chip FPGA.
Cụ thể đối với Kit của chúng ta sẽ chọn: mục Family là Spartan3E, mục Device là
XC3S500E, mục Package là PQ208 và Speed bằng -5.
Ngầm định thì chương trình dùng để mô phỏng kiểm tra sẽ là Modelsim SE. Đối với ô
Prefer Language ta chọn là VHDL
Sau khi ấn Next sẽ xuất hiện hộp thoại Project Summary. Chọn Finish để ISE tạo ra một
project mới với các thuộc tính như trên vẽ.
Sau khi tạo Project thành công, chương trình chuyển sang chế độ làm việc với Project,
Có 4 cửa sổ chính bao gồm:
- Design: Chứa sơ đồ cấu trúc của các khối thiết kế trong project bao gồm mã nguồn,
các file constraint nếu có và các file khác.
- Process: Nơi thực hiện các thao tác của quy trình thiết kế FPGA.
- View/Editor là cửa sổ làm việc chính, nơi có thể chỉnh sửa file nguồn, xem thông tin
tổng hợp…vvv.
- Command line (Console): Là cửa sổ hỗ trợ dòng lệnh trực tiếp (giống cửa sổ TCL
script trong ModelSim).
Bảng Define Module cho phép thiết lập các tham số của file mã nguồn:
+ Mục Entity name: đặt tên thực thể (mặc định tên thực thể trùng với tên file mã nguồn).
+ Mục Architecture name: dạng cấu trúc được dùng.
+ Bảng phía dưới để thiết lập các cổng vào, ra của khối thiết kế.
- Nhấn Next và Finish để kết thúc việc khởi tạo file mã nguồn.
- Cửa sổ chứa nội dụng file mã nguồn hiện ra, có thể hoàn thiện tiếp nội dung file mã
nguồn này, hoặc xóa toàn bộ và viết đầy đủ nội dung của file mã nguồn đó.
--------------------------------------------------
-- Company: BMKTVXL
-- Module Name: board_demo1 - Behavioral
--------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity board_demo1 is
Port (
sw0 : in STD_LOGIC_VECTOR (7 downto 0);
led0 : out STD_LOGIC_VECTOR (7 downto 0)
);
end board_demo1;
architecture Behavioral of board_demo1 is
-------------------------------------------------
begin
led0 <= sw0;
end Behavioral;
Người sử dụng có thể làm theo cách truyền thống là mô phỏng bằng Modelsim mà
không nhất thiết phải gọi từ Xilinx ISE. Để đơn giản và thống nhất từ bây giờ về sau các động
tác kiểm tra ta đều làm theo phương pháp truyền thống là chạy riêng Modelsim mà không cần
gọi từ ISE. Ngoài mô phỏng bằng ModelSim có thể sử dụng trình mô phỏng tích hợp Isim của
Xilinx, cách sử dụng trình mô phỏng này người dùng có thể tự tìm hiểu thêm.
Bước 5: Kiểm tra cú pháp (Biên dịch mã nguồn VHDL)
Tại cửa sổ Process, ấn chuột mở rộng quá trình Synthesis – XST và chọn Check Syntax.
Chương trình kích hoạt khối kiểm tra cú pháp mà thực chất là thực hiện biên dịch mã VHDL
bằng lệnh Vcom, thông thường nếu chúng ta đã làm mô phỏng kiểm tra chức năng ở bước trên
thì ở bước này không thể phát sinh lỗi. Kết quả thông báo ở cửa sổ Command line
Bước 6: Tổng hợp thiết kế (Synthesis)
Click đúp chuột vào Synthesis –XST để kích hoạt trình tổng hợp thiết kế XST (Xilinx
Synthesis Technology). Kết quả của quá trình tổng hợp thông báo ở cửa sổ Command Line.
Design Statistics
# IOs : 16
Cell Usage :
# IO Buffers : 16
# IBUF : 8
# OBUF : 8
=====================================================
Device utilization summary:
---------------------------
Selected Device : 3s500epq208-5
Number of Slices: 0 out of 4656 0%
Number of IOs: 16
Number of bonded IOBs: 16 out of 158 10%
=====================================================
TIMING REPORT
Timing Summary:
---------------
Speed Grade: -5
Minimum period: No path found
Minimum input arrival time before clock: No path found
Maximum output required time after clock: No path found
Maximum combinational path delay: 4.632ns
Timing Detail:
--------------
All values displayed in nanoseconds (ns)
Bước 8: Kết xuất sơ đồ công nghệ, và sơ đồ RTL (không bắt buộc)
Sơ đồ công nghệ và sơ đồ RTL có thể thu được bằng cách chọn tương ứng View
Technology Schematic và View RTL Schematic. Sau đó chọn tất cả hoặc một phần Top Level
Port bổ xung vào sơ đồ, chọn Create Schematic. Một sơ đồ cơ sở được tạo ra, để quan sát các
đối tượng khác có thể click chuột vào các đối tượng hoặc kết nối trên đó để mở rộng hoặc chi
tiết hóa sơ đồ.
Sơ đồ công nghệ thu được như ở hình sau, làm tương tự như vậy để thu được sơ đồ
RTL.
Bước 9: Kiểm tra thiết kế sau tổng hợp (không bắt buộc)
Kiểm tra thiết kế sau tổng hợp là thực hiên mô phỏng file netlist sinh ra sau quá trình
tổng hợp. Đây cũng là một mô tả VHDL nhưng ở cấp độ cổng và đòi hỏi chương trình mô
phỏng phải hỗ trợ thư viện UNISIM của Xilinx.
Đối với ModelSim chuẩn không tích hợp thư viện này, để tích hợp các thư viện của
Xilinx nói chung chạy trình đơn Compxlib có thể tìm thấy trong thư mục /bin/nt nơi cài chương
trình Xilinx ISE (thông thường là C:\Xilinx\12.4\ISE_DS\ISE\bin\nt).
Chọn các tham số cần thiết, ở đây ta chọn ModelSim và kiểm tra lại vị trí cài đặt
Modelsim trên máy (thường là C:\Modeltech_6.x\win32). Chọn Next
Ở cửa sổ này chọn Both VHDL and Verilog nếu ta muốn cài đặt thư viện hỗ trợ cho cả
hai loại ngôn ngữ thiết kế. Sau đó chọn Next. Cửa sổ tiếp theo cho phép lựa chọn các thư viện
IC FPGA và CPLD sẽ được tích hợp sang trình mô phỏng, ta chọn một số các FPGA điển hình
như ở hình sau
Cửa sổ tiếp cho phép lựa chọn các dạng thư viện sẽ được tích hợp sang trình mô phỏng,
ta chọn All Library và Next, quá trình biên dịch sẽ được bắt đầu và thông thường mất từ 10-30
phút để thực hiện xong, phụ thuộc cấu hình máy và số lượng thư viện được chọn.
Nếu sử dụng Isim để mô phỏng thì không phải thực hiện các bước như ở trên và lưu ý
rằng các bước trên chỉ phải thực hiện một lần duy nhất.
Để tạo ra file netlist phục vụ cho việc kiểm tra sau mô phỏng click vào Generate Post-
synthesis simulation model như ở hình sau.
Nếu quá trình tạo file thành công sẽ có thông báo tương ứng Process "Generate Post-
Synthesis Simulation Model" completed successfully ở của sổ Command line. Sau đó mở thư
mục nơi chứa các file của project ta sẽ thấy xuất hiện thư mục có tên netgen/synthesis có chứa
file mô tả VHDL có tên board_demo1_synthesis.vhd.
Nếu Modelsim đã hỗ trợ thiết kế trên thư viện UNISIM thì có thể tiến hành mô phỏng
kiểm tra bình thường file nguồn này. Bước mô phỏng này nhằm khẳng định chức năng của
mạch không bị thay đổi sau khi tổng hợp. Người sử dụng cũng có thể copy file netlist trên và
tiến hành mô phỏng độc lập không phụ thuộc vào ISE.
Bước 10. Gán chân vào ra sau tổng hợp
Bước này làm nếu như chúng có Kit kiểm tra, trong trường hợp không có Kit thì không
có thể bỏ qua bước này, chương trình sẽ tự động gán các chân vào ra của thiết kế cho các
IO_pad bất kỳ của FPGA.
Chương trình thực hiện gán chân là PlanAhead, để khởi động ta chọn lệnh IO planing
(PlanAhead) – post synthesis trong cửa sổ Process mục User Constraint. Và chọn Yes để tạo
file UCF với tên gọi ngầm định là Board_demo1.ucf
Các cổng vào ra của khối thiết kế được gán địa chỉ các chân (được đặt tên là P1, P2,…)
tương ứng trên mạch FPGA. Sơ đồ gán chân trên mạch FPGA sẽ được trình bày ở phần phụ
lục.
Khi có cửa sổ PlanAhead hiện ra, ở cửa sổ IO port chọn cổng cần gán chân, sau khi điền
chân vào ô site trên cửa sổ IO Properties chọn Apply.
Đối với ví dụ của chúng ta, 8 đầu vào được gán với 8 switch, 8 đầu ra được gán với 8
led đơn trên mạch FPGA (có thể chọn 8 switch và 8 led bất kỳ trên mạch FPGA, tuy nhiên để
thuận tiện cho việc điều khiển và quan sát nên chọn các vị trí liền kề nhau).
NET "led0[7]" LOC = P22;
NET "led0[6]" LOC = P24;
NET "led0[5]" LOC = P29;
NET "led0[4]" LOC = P31;
NET "led0[3]" LOC = P33;
NET "led0[2]" LOC = P35;
NET "led0[1]" LOC = P39;
NET "led0[0]" LOC = P41;
NET "sw0[7]" LOC = P6;
NET "sw0[6]" LOC = P14;
NET "sw0[5]" LOC = P20;
NET "sw0[4]" LOC = P26;
NET "sw0[3]" LOC = P32;
NET "sw0[2]" LOC = P43;
NET "sw0[1]" LOC = P51;
NET "sw0[0]" LOC = P78;
Sau khi hoàn tất việc gán chân Save để lưu lại thông tin gán chân và đóng PlanAhead,
quay trở lại với chương trình ISE.
Thông tin gán chân được lưu ở trong một file text có tên là board_demo1.ucf. Khi mở
file này bằng trình soạn thảo sẽ thấy nội dung giống như ở trên. Một cách khác đơn giản hơn để
gán chân là ta tạo một file UCF có tên trùng với tên khối thiết kế chính và soạn thảo với nội
dung như vậy.
Bước 11: Hiện thực hóa thiết kế
Bước 11.1 Translate
Để thực hiện Translate, chọn lệnh Translate, và nếu cần tạo file netlist sau Translate
bằng lệnh tương ứng Generate Post-translate simulation model như ở hình dưới đây:
Sau khi tạo file netlist thành công cũng sẽ có thông báo tương ứng ở cửa sổ dòng lệnh:
Process "Generate Post-Translate Simulation Model" completed
successfully. Nếu ta mở lại thư mục netgen sẽ thấy xuất hiện thêm thư mục con translate,
file VHDL tương ứng board_demo1_translate.vhd là netlist tạo ra sau bước này, netlist này
viết trên thư viện độc lập SIMPRIM. Ta cũng có thể tiến hành mô phỏng kiểm tra thiết kế sau
translate giống bước mô phỏng kiểm tra sau Tổng hợp đã trình bày ở trên.
Bước 11.2 Mapping
Để thực hiện quá trình Mapping chọn lệnh Map trong cửa sổ Process, quá trình sẽ được
thực hiện tự động. Ở bước này chúng ta đã bắt đầu có thể kiểm tra các tham số về mặt thời gian
đối với thiết kế, để thực hiện bước này (ngầm định khi Mapping bước này không thực hiện)
chọn Analyze Post-map Static Timing như ở hình dưới đây:
Kết quả sẽ được hiện ra ở một file text tương ứng bên cửa sổ VIEW/EDITOR, đối với ví
dụ này ta thu được bảng thời gian trễ như sau:
Data Sheet report:
-----------------
All values displayed in nanoseconds (ns)
Pad to Pad
---------------+---------------+---------+
Source Pad |Destination Pad| Delay |
---------------+---------------+---------+
sw0<0> |led0<0> | 4.118|
sw0<1> |led0<1> | 4.118|
sw0<2> |led0<2> | 4.118|
sw0<3> |led0<3> | 4.118|
sw0<4> |led0<4> | 4.118|
sw0<5> |led0<5> | 4.118|
sw0<6> |led0<6> | 4.118|
sw0<7> |led0<7> | 4.118|
---------------+---------------+---------+
Sau khi maping cũng có thể tạo file netlist để mô phỏng kiểm tra chức năng bằng lệnh
Generate Post-map simulation model tương tự như với các bước trên đã làm.
Bước 11.3 Routing
Bước cuối cùng để sẵn sàng tạo ra file bitstrem để nạp vào FPGA.Ở bước này ta cũng
thực hiện các bước cơ bản như đối với các bước đã liệt kê ở phần Mapping. Điểm khác biệt là ở
đây kết quả Analyze về mặt thời gian là chính xác khi mà các khối đã thực sự kết nối với nhau.
Chương trình sẽ hỏi có muốn gán file cấu hình không chọn Yes.
Tại cửa sổ này chọn file bitstream là board_demo1.bit, chọn Open. Hộp thoại tiếp theo
chọn No
Chương trình tiếp tục hỏi nạp cấu hình vào ROM, chọn Bypass, cấu hình sẽ được nạp
vào FPGA trực tiếp.
Cửa sổ tiếp theo thông báo về cấu hình đã chọn, ấn OK để tiếp tục quay trở về ISE
imPACT, Click chuột vào biểu tượng Spartan FPGA và chọn lệnh Program trong cửa sổ
imPACT Process.
Chương trình tiến hành nạp cấu hình vào FPGA, nếu quá trình thành công sẽ có thông
báo PROGRAM SUCCESSED và đèn DONE trên mạch FPGA sẽ sáng.
Có thể kiểm tra trực tiếp trên mạch thiết kế bằng cách điều chỉnh các SWITCH và quan
sát các LED tương ứng.
Phụ lục
Bảng gán chân cho các khối giao tiếp của mạch FPGA
--Khối Switch-----------
NET "sw0[7]" LOC = P6;
NET "sw0[6]" LOC = P14;
NET "sw0[5]" LOC = P20;
NET "sw0[4]" LOC = P26;
NET "sw0[3]" LOC = P32;
NET "sw0[2]" LOC = P43;
NET "sw0[1]" LOC = P51;
NET "sw0[0]" LOC = P78;
NET "sw1[7]" LOC = P54;
NET "sw1[6]" LOC = P57;
NET "sw1[5]" LOC = P58;
NET "sw1[4]" LOC = P71;
NET "sw1[3]" LOC = P72;
NET "sw1[2]" LOC = P90;
NET "sw1[1]" LOC = P91;
NET "sw1[0]" LOC = P101;
--Khối DAC---------------------
#NET "dac_dataA[9]" LOC = P206;
#NET "dac_dataA[8]" LOC = P205;
#NET "dac_dataA[7]" LOC = P203;
#NET "dac_dataA[6]" LOC = P202;
#NET "dac_dataA[5]" LOC = P200;
#NET "dac_dataA[4]" LOC = P199;
#NET "dac_dataA[3]" LOC = P197;
#NET "dac_dataA[2]" LOC = P196;
#NET "dac_dataA[1]" LOC = P193;
#NET "dac_dataA[0]" LOC = P192;
############################