File để nạp cho FPGA là .bit, file để nạp vào Flash PROM XCF04S của là .mcs.
Do đó file .mcs được được tạo ra từ file .bit đã tạo được ở bước 1. Thực hiện: Click đúp vào Generate PROM, ACE, or JTAG File để khởi động chương trình
iMPACT (hình 4-13).
Hình 3.11. Double-Click Generate PROM, ACE, or JTAG File
Click đúp vào PROM File Formatter (hình 3.12).
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 65
Phần target PROM type chọn Xilinx PROM.
Phần PROM File Formats chọn MCS. (chọn định dạng khác cũng được, nhưng
MCS là phổ biến).
Phần PROM File Name đặt tên cho file nạp vào PROM. (hình 3.13).
Hình 3.13. Choose the PROM Target Type, the, Data Format, and File Location Tiếp tục click Next, chọn xcf04s.
Click Add, rồi click Next và Finish để hoàn tất lựa chọn. Chương trình sẽ hỏi file .bit , chọn file .bit rồi click OK.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 66
Hình 3.14. Format và config PROM
Kết quả sẽ như hình 3.15. Giá trị % ở PROM là dung lượng file so với tổng dung lượng của PROM.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 67
Hình 3.15. PROM Formatting Completed
Để tạo file thật sự cho PROM ta chọn : Operations -> Generate File (hình 3.16).
Hình 3.16. Click Operations -> Generate File to Create the Formatted PROM File
Đến đây đã hoàn tất việc tạo file cấu hình cho PROM (hình 4-21).
Hình 3.17. PROM File Formatter Succeeded 3.6.2.3. Nạp chương trình vào PROM
Ở bước 1 và 2 đã tạo ra các file cần thiết cho việc cấu hình FPGA. Bước này là nạp file cấu hình vào PROM.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 68
Hình 3.18. Switch to Boundary Scan Mode
Gán file PROM vào XCF04S bằng cách click phải vào biểu tượng của
XCF04S và chọn Assign New Configuration File, chọn file PROM được tạo ở bước trên rồi click OK (hình 3.19).
Hình 3.19. Assign the PROM File to the XCF04S Platform Flash PROM Tiếp tục click phải vào biểu tượng của XCF04S và chọn Program (hình 3.20).
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 69
Hình 3.20. Program the XCF04S Platform Flash PROM
Chương trình sẽ hỏi kiểu PROM mà ta cần nạp vào, lựa chọn XCF04S và click
OK (hình 3.21).
Hình 3.21. Select XCF04S Platform Flash PROM
Trước khi nạp vào PROM ta nên thêm tùy chọn sau:
Đánh chéo (check) vào các ô: Erase Before Programming, Verify, Load FPGA
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 70
Hình 3.22. PROM Programming Options
Cuối cùng click OK để hoàn thành. Quá trình nạp vào PROM và cấu hình lại
FPGA sẽ được thực hiện và chương trình sẽ cho biết quá trình nạp có thành công hay không. Nếu không chéo vào ô Load FPGA (hình 3.22) thì phải nhấn nút
PROG_B (hình 3.7) để reset lại cấu hình cho FPGA. Nếu thành công led DONE
(hình 3.7) sẽ sáng.
3.7. Tổng quan cấu trúc SPARTAN - 3E
Các thành phần:
- Input/Output Blocks (IOBs) : các khối vào ra
- Configurable Logic Blocks (CLBs) : được cấu tạo từ Look-Up Tables (LUTs). - Block RAM : Hỗ trợ 16 Kb RAM trên mỗi Block RAM, số lượng các Block
RAM tùy thuộc vào mỗi chip , với XC3S500E có 20 Block RAM.
- Multiplier Blocks : Khối nhân 2 lối vào 18 bit.
- Digital Clock Manager (DCM) Blocks : khối điều khiển xung clk.
- Interconnect : Các kết nối.
3.7.1. Input/Output Blocks (IOBs) : các khối vào ra
Bao gồm các khối vào ra 2 chiều I/O và các khối ngõ vào input path (không thể làm ngõ ra). Ngõ vào là một khối chức năng có tác dụng làm trì hoãn tín hiệu vào trước khi nó được đưa vào các khối bên trong. Cũng có thể thiết lập sự trì hoãn cho các ngõ I/O. Ta có thể không dùng chức năng trì hoãn này.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 71
Sau khi cấu hình cho FPGA, các chân không sử dụng, theo mặc định được thiết
lập thành ngõ vào với một điện trở nội pull-down.
Cấp nguồn cho IOBs :
VCCO : Cấp nguồn cho ngõ ra, tức điện thế ngõ ra sẽ bằng với VCCO. Khoảng
3.3 V
VCCINT : Cấp nguồn cho các khối bên trong FPGA. Khoảng 1.2 V.
VCCAUX : Nguồn hỗ trợ. Ít quan trọng. Khoảng 2.5 V.
3.7.2. Configurable Logic Blocks (CLBs) : Khối chức năng logic
Khối này thực hiện các chức năng logic và lưu trữ. Mỗi CLBs có 8 bảng tìm kiếm LUTs (Look-Up Table) và 8 phần tử nhớ. LUTs là một khối có chức năng
thực hiện các biểu thức logic, ngoài ra mỗi LUTs có thể cấu hình thành một RAM
16 bit hay một thanh ghi 16 bit. Phần tử nhớ là một khối mà có thể chỉ định để trở
thành một Flip-Flop hay latch.
XC3S500E có 1164 CLBs. Tương ứng với 9312 LUTs và 9312 Flip-Flop.
Logic Cell : Mỗi một LUTs kết hợp với một phần phần tử nhớ gọi là một “Logic
Cell”. XC3S500E có 10476 Logic Cell.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 72
Hình 3.23. CLB Locations
3.7.3. Block RAM : Khối nhớ
Các LUTs ở phần CLBs (phần 3.7.2) có thể cấu hình như RAM, nhưng RAM này thường dùng như một bộ buffer dữ liệu, trong khi các Block RAM thường
dùng cho việc chứa dữ liệu có kích thước lớn hơn.
XC3S500E có chứa 20 Block RAM. Mỗi Block RAM có thể chứa 18 Kbit data
(hình 3.24).
Hình 3.24. Spartan 3E Family Architecture
3.7.4. Dedicated Multipliers : Bộ nhân chuyên dụng
Các bộ nhân được đặt cùng với các Block RAM thành một khối. Bộ nhân hỗ
trợ 2 ngõ vào 18 bit và ngõ ra 36 bit. Có thể ghép chồng (cascade) các bộ nhân để tăng số ngõ vào (hình 3.25).
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 73
Hình 3.25. Principle Ports and Functions of Dedicated Multiplier Blocks
3.7.5. Digital Clock Managers (DCMs) : Bộ quản lí xung Clock
Bộ quản lí xung clock là một khối có 3 chức năng chính (hình 3.26):
- Loại bỏ sự lệch xung clock (Clock-skew Elimination): Giúp tăng tốc độ chuyển
mạch.
- Tổng hợp tần số (Frequency Synthesis): Giúp thay đổi tần số ở ngõ ra xung clock.
Qui tắc thực hiện:
- Trong đó CLKOUT là Clock ra, CLKIN là Clock vào, Integer_1 là tùy chọn từ 2 – 32, Integer_2 là tùy chọn từ 1- 32.
- Dịch Pha (Phase Shifting) : Giúp thay đổi pha clock.
XC3S500E có:
- 16 ngõ vào clock toàn cục GCLK0 – GCLK 15 đặt ở phía trên và dưới của
FPGA.
- 8 ngõ vào clock phía phải RHCLK0 – RHCLK7. - 8 ngõ vào clock phía trái RLCLK0 – RLCLK7.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 74
Hình 3.26. DCM Functional Blocks and Associated Signals
3.7.6. Interconnect : Các kết nối
Cung cấp các đường (segment) kết nối, các ma trận chuyển mạch (switch matrix) để tạo thành một mạng các đường tín hiệu giúp kết nối các IOBs, CLBs,
DCMs và block RAM lại với nhau (hình 3.27).
Hình 3.27. Bốn kiểu kết nối (CLBs, IOBs, DCMs, and Block RAM/ Multiplier)
3.8. Sơ lược về ISE 9.2 i
3.8.1. Tạo một Project
Vào Start > All Programs > Xilinx ISE 9.2i > Project Navigator để khởi động chương trình. Vào File > New Project cửa sổ hướng dẫn hiện ra :
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 75
Project Name: Đặt tên project.
Project location : Nơi chứa project.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 76
Ô Family : chọn Spartan3E . Ô Device : chọn XC3S500E. Ô Package : chọn FG320.
Tiếp tục click Next , cửa mới hiện ra, chọn thanh : New Source.
Cửa sổ mới hiện ra, chọn VHDL Module để viết code vhdl, nếu viết bằng verilog
thì chọn : Verilog Module.
Chọn tên file vhdl ở ô File name. (ở đây ta đang tạo bộ đếm nên chọn tên là
counter).
Tiếp tục click Next . Cửa sổ mới hiện ra , ta sẽ chọn giao diện cho vào ra cho khối
counter:
Cột Port Name để chọn tên cổng
Cột Direction để chọn chân là lối vào, lối ra hay cả hai vào/ra
Cột Bus : nếu dùng bus thì tréo vào ô này. Ở đây, bộ đếm của ta có ngõ ra là một
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 77
Tiếp tục click Next -> Next -> Finish.
Xuất hiện cửa sổ thông báo tổng quan về cái project của mình.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 78
Đến đây ta đã tạo ra một project có tên thavali và trong project này có chứa
một file vhdl tên là counter. ( sau này chúng ta cần add thêm một số file khác nữa
vào project).
Công việc tiếp theo là viết code vhdl .
Đoạn code cho bộ counter sẽ như sau: (coppy và bỏ vào cửa sổ soạn thảo).
library IEEE;
use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following library declaration if instantiating -- any Xilinx primitive in this code.
--library UNISIM;
--use UNISIM.VComponents.all; entity counter is
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 79
DIRECTION : in STD_LOGIC;
COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0)); end counter;
architecture Behavioral of counter is
signal count_int : std_logic_vector(3 downto 0) := "0000"; begin
process (CLOCK) begin
if CLOCK='1' and CLOCK'event then if DIRECTION='1' then count_int <= count_int + 1; else count_int <= count_int - 1; end if; end if; end process; COUNT_OUT <= count_int; end Behavioral;
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 80
Tới đây ta có thể tổng hợp (synthesis) được rồi. Tuy nhiên ta cần mô phỏng kết
quả để kiểm tra hoạt động của mạch. Do đó ta cần tạo file mô phỏng (test bench wave form). Ta làm như sau:
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 81
Sẽ xuất hiện lại cửa sổ sau:
Chọn Test Bench WaveForm, đặt tên cho file là test (file này trong project có đuôi
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 82
Đây là cửa sổ để ta thiết lập các giá trị khởi tạo cho việc mô phỏng.
Ở ô Clock Information chọn kiểu mạch mà ta muốn mô phỏng. Mạch ta tạo ra
là một bộ đếm, là mạch tuần tự có một xung clock nên chọn Single Clock. Nếu là mạch tổ hợp ta chọn combinatorial.
Các tham số khác cũng đã được giải thích ngay trong ảnh.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 83
Click vào dòng tín hiệu ngõ vào DIRECTION để có thể thay đổi dạng sóng của
nó (click vào các chấm xanh da trời). Tất cả các tín hiệu ngõ vào điều có thể thay đổi theo ý, còn ngõ ra thì không ( điều hiển nhiên).
Click File -> Save để lưu tùy chọn dạng sóng.
Bây giờ quay lại cửa sổ sources window để tổng hợp và chạy mô phỏng.
Xem kết quả mô phỏng:
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 84
Behavioral Simulation
Trong cửa sổ mới chọn test.tbw. Trong ô Processes click đúp vào Simulate Behavioral Model và chờ một lát.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 85
Đến đây ta đã hoàn thành việc mô phỏng, như vậy trong Project của ta lúc này có thêm một file nữa là test.tbw.
Bây giờ ta sẽ thực hiện các ràng buộc (Constraints), gán chân (Assigning Pin),
tổng hợp (Synthesis) và nạp vào chip FPGA .
Trước hết là tạo các ràng buộc.
Quay lại cửa sổ Sources Window chọn Synthesis/ Implement Design và chọn
counter-behavioral.
Trong cửa sổ processes click vào dấu + ở dòng User Constraints .
Click đúp vào Create Timing Constraints sẽ xuất hiện thông báo yêu cầu thêm
file .UCF vào project, đương nhiên ta đồng ý (chọn YES ).
Cửa sổ mới xuất hiện:
Phía dưới cửa sổ chọn Global, phía trên chọn CLOCK rồi click vào nút (ở dưới chữ window). Sẽ xuất hiện cửa sổ mới, chọn các giá trị như hình.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 86
40 ns : chu kì clock. 50 % : cycle duty.
Click OK để hoàn thành lựa chọn.
Tiếp tục click vào biểu tượng để thiết lập pad to setup.
Pad to setup là thời gian tối ta mà dữ liệu phải đặt vào chân ngõ vào của chip
trước khi có xung clock. Tức là ta phải có dữ liệu ở chân ngõ vào một khoảng thời gian trước khi có xung clock.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 87
Ta chọn các thông số cho pad to setup như hình liền dưới, rồi click OK.
Tiếp tục click vào biểu tượng để thiết lập thông số Clock to Pad .
Clock to Pad là thời gian tối thiểu để dữ liệu ở ngõ vào được đưa tới ngõ ra sau khi có cạnh (lên hay xuống) của xung clock.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 88
Cửa sổ xuất hiện, ta chọn các thông số như hình liền dưới rồi click OK.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 89
Chọn File -> Save để lưu kết quả lại.
Ta cũng có thể đóng luôn cửa sổ Constraints Editor lại. Như vậy ta đã tạo xong các ràng buộc (Constraints).
Việc tiếp theo là gán chân (Assigning Pin).
Bây giờ quay trở lại cửa sổ chương trình chính ISE.
Click đúp vào Assign Package Pins cửa sổ mới hiện ra, chọn thanh Package View ở phía dưới.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 90
Dùng chuột kéo các tín hiệu của bộ counter của cửa sổ Design Object List (ở
bên trái) rồi thả vào các chân của FPGA (bên phải).
Bỏ CLOCK vào chân U10. (đây là chân cấp clock cho FPGA)
Bỏ DIRECTION vào chân U1. (chân input của FPGA)
Bỏ COUNT_OUT(0) vào chân T12. (chân I/O của FPGA)
Bỏ COUNT_OUT(1) vào chân R12. (chân I/O của FPGA)
Bỏ COUNT_OUT(2) vào chân R11. (chân I/O của FPGA)
Bỏ COUNT_OUT(3) vào chân R10. (chân I/O của FPGA)
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 91
Click File -> Save -> OK để hoàn thành việc gán chân.
Ta có thể đóng cửa sổ của PACE editor lại.
Tới đây ta đã hoàn thành công việc gán chân.
Tiếp theo là tổng hợp (synthesis).
Thực ra trong quá trình mô phỏng thì quá trình tổng hợp đã xảy ra rồi. Thực ra,
nếu bạn chỉ mô phỏng không thôi thì tổng hợp sẽ là công việc đầu tiên và không cần các bước ràng buộc (Constraints), gán chân (Assigning Pin) gì cả. Do đó bước
này phải gọi là: Map, Place and Route mới đúng.
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 92
Chương 3: Giới thiệu Kit Spartan 3E và công cụ ISE 9.2i 93
Bạn cũng có thể xem mạch được tổng hợp như thế nào bằng cách:
Trong cửa sổ Processes, chọn synthesize -> View Technology Schematic (mức
cổng). hay: synthesize -> View RTL Schematic (mức thanh ghi).
Chương 4: Thiết kế mạch và nạp Kit 94
CHƯƠNG 4
THIẾT KẾ MẠCH VÀ NẠP KIT
4.1. Ý tưởng thiết kế mạch
Hiện nay, chuyển mạch không gian đang được sử dụng phổ biến trong các loại
tổng đài điện tử số hiện đại. Trong khuôn khổ một đồ án tốt nghiệp, chúng em chỉ đưa ra mô hình chuyển mạch không gian đơn giản dùng ma trận chuyển mạch.
Hình 4.1. Ma trận chuyển mạch không gian
Chuyển mạch ma trận gồm m × n điểm thông đóng/ mở được điều khiển bởi bộ
nhớ CM. Mỗi địa chỉ nhị phân đánh dấu một điểm thông thích hợp để thiết lập nối
kết giữa ngõ ra và ngõ vào trên bus. Kích thước mỗi từ của CM phải đáp ứng được
yêu cầu cất giữ địa chỉ nhị phân cho 1 trong n điểm thông và có thể thêm 1 địa chỉ để thể hiện rằng mọi điểm thông trong cột là mở. Như vậy gồm n +1 địa chỉ. Vậy,
mỗi từ CM gồm log2(n +1) bits.
Mỗi bộ nhớ CM phải lưu được toàn bộ địa chỉ điểm thông trong 1 khung và để
CM làm việc một cách đồng bộ với ma trận chuyển mạch nên các ô nhớ của CM
sẽ tương ứng với thứ tự các khe thời gian vào, cho nên , nó phải có ít nhất R ô nhớ
( R là số khe thời gian trong một khung). Như vậy, địa chỉ của điểm thông sẽ được
nối trong khe thời gian TS1 sẽ được lưu trữ trong ô nhớ đầu tiên trong CM.