Tài liệu kỹ thuật về Spartan-3E Starter Kit.
Trang 1Spartan-3E Starter Kit
Biên soạn: thavali
ĐH Khoa Học Tự Nhiên TP.Hồ Chí Minh
I CÁC THÀNH PHẦN CỦA KIT
1 Xilinx XC3S500E Spartan-3E FPGA : con chính của KIT
2 Xilinx 4 Mbit Platform Flash configuration PROM
3 Xilinx 64-macrocell XC2C64A CoolRunner CPLD
4 64 MByte (512 Mbit) of DDR SDRAM, x16 data interface, 100+ MHz
5 16 MByte (128 Mbit) of parallel NOR Flash (Intel StrataFlash)
6 16 Mbits of SPI serial Flash (STMicro)
7 2-line, 16-character LCD screen
8 PS/2 mouse or keyboard port
9 VGA display port
10 10/100 Ethernet PHY (requires Ethernet MAC in FPGA)
11 Two 9-pin RS-232 ports (DTE- and DCE-style)
12 On-board USB-based FPGA/CPLD download/debug interface
13 50 MHz clock oscillator
14 SHA-1 1-wire serial EEPROM for bitstream copy protection
15 Hirose FX2 expansion connector
16 Three Digilent 6-pin expansion connectors
17 Four-output, SPI-based Digital-to-Analog Converter (DAC)
18 Two-input, SPI-based Analog-to-Digital Converter (ADC) with programmable-gain
19 pre-amplifier
20 ChipScope™ SoftTouch debugging port
21 Rotary-encoder with push-button shaft
22 Eight discrete LEDs
23 Four slide switches
II SƠ ĐỒ CHÂN CỦA XC3S500E
XC3S500E có kiểu chân BGA, 320 chân như hình:
Cách đánh số chân:
Vị trí của 1 chân được xác định theo qui tắc ma trận 2 chiều Chiều ngang (dòng) là số từ 0 tới 18 Chiều dọc (cột) là chữ từ A tới V
Ví dụ: chân A1, là chân ở dòng A, cột 1 Đây là chân GND của FPGA
Tài nguyên: 10000 logic cells, có 232 chân I/O cho người dùng tự định nghĩa
Trang 2III BỘ TẠO DAO ĐỘNG TRÊN KIT
Có 3 nguồn cập xung clk cho FPGA:
1 Dùng thạch anh có sẵn 50 MHz trên board
Ngõ ra của thạch anh nối với chân C9 của chip
2 Cấp xung clk thông qua chân cắm 8 pin trên board (hình 3.1)
Ngõ ra của thạch anh nối với chân B8 của chip
3 Cấp Cấp xung clk thông qua chân cắm SMA, chân cắm này chỉ nhận clk từ máy phát clk, không dùng trực tiếp thạch anh được
Ngõ ra clk nối với chân A10 của chip
Trang 3IV CÁC NÚT CHUYỂN, NÚT NHẤN, LED
4 nút chuyển (hình 2-1) theo thứ tự là : SW0, SW1, SW2, SW3 kết nối với chân tương ứng của chip là : L13,
L14, H18, N17 của chip FPGA Để ý: đây là các chân ngõ vào của FPGA Trên Chip chỉ có 232 chân I/O tùy chọn Khi các nút SWx (x =0,3) ON (bật lên) thì chân FPGA tương ứng ở mức cao (3.3V) và ngược lại (hình)
4 nút nhấn (hình 2-3) theo thứ tự là BTN_EAST (phải), BTN_NORTH ( trên), BTN_SOUTH (dưới), BTN_WEST (trái) kết nối tương ứng với các chân H13, K14, V17, D18 , là các chân input của FPGA
Khi nhấn các nút trên thì chân tương ứng với nó sẽ lên mức cao Khi không nhấn, cần dùng 1 điện trở nội pull-down để tạo mức thấp (bắt buộc)
Trang 4Nút Encoder : có 3 ngõ ra: ROT_A, ROT_B, ROT_CENTER : nốivới chân K18, G18, V16 của FPGA Nút Encoder có
2 chức năng : Như nút nhấn : nhấn xuống sẽ đưa chân V16 của FPGA lên mức cao Xoay phải (hay trái) sẽ tạo xung encoder ngõ ra tương ứng (hình 2-8) Cả 3 chân ngõ ra của encoder điều cần dùng điện trở pull-up nội
8 Led (góc dưới cùng bên phải) LD0, …, LD7 nối với 8 chân tương ứng F9, E9, D11, C11, F11, E11, E12,
F12 của FPGA Đầu còn lại của các Led nối với GND thông qua điện trở 290 ohm (hình 2-10)
V CẤP NGUỒN
Tất cả các chân của FPGA điều có 2 lựa chọn nguồn cấp 2.5 v hoặc 3.3V thông qua jumper JP9 (cắm bên trái 2.5 V, cắm bên phải 3.3 V)
VI CẤU HÌNH FPGA
Có 4 cách để nạp chương trình cho FPGA (hình 4-1)
1 Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB
2 Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial
Mode
3 Nạp vào serial Flash PROM ST Microelectronics (16 Mbit), rồi cấu hình cho FPGA ở chế độ SPI
Mode
4 Nạp vào StrataFlash parallel PROM Intel (128 Mbit), rồi cấu hình cho FPGA ở chế độ BPI Up
Mode hay BPI Down Mode
Trang 5Để thiết lập các chế nạp cho FPGA, ta set jumper JP 30 như bảng 4-1 Mỗi lần thay đổi chế độ cấu hình phải
nhấn nút PROG (hình) để restart lại cấu hình
Trang 6
1 Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB
Set Jumper như bảng 4-1 trên Mở Tool iMPACT rồi nạp bình thường như với CPLD Nếu dùng cổng USB
sẽ có cảnh báo:
Trang 7
Chọn OK, rồi nạp bình thường (file có đuôi bit)
Để ý: Chương trình cấu hình cho FPGA bị mất khi cắt nguồn
2 Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial Mode
Đây là PROM cấu hình của xilinx PROM này sẽ giữ cấu hình của FPGA nên khi cắt nguồn , file cấu hình sẽ không bị mất Thực hiện:
Set Jumper như bảng 4-1 trên Cắm cổng USB Cài drive nếu máy (window) yêu cầu
a Tạo file bitstream (.bit) cho FPGA :
Click phải vào Generator Programming File, chọn Properties (hình 4-10)
Chọn Configuration Options, chọn Configuration Rate là 25 (để tốc độ nạp vào PROM là nhanh nhất 25 MHz) Cuối cùng nhấn OK để hoàn tất lựa chọn (hình 4-11)
Trang 8Click đúp vào Generate Programming File để tạo file bit (hình 4-12)
b Tạo file cấu hình cho PROM
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 a Thực hiện:
Trang 9Click đúp vào Generate PROM, ACE, or JTAG File để khởi động chương trình iMPACT (hình 4-13)
Click đúp vào PROM File Formatter (hình 4-14)
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 4 -15)
Trang 10Tiế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.
Tiếp tục click NO rồi OK để bắt đầu format và config PROM (hình 4-18)
Trang 11Kết quả sẽ như hình 4-19 Giá trị % ở PROM là dung lượng file so với tổng dung lượng của PROM
Để tạo file thật sự cho PROM ta chọn : Operations -> Generate File (hình 4-20)
Trang 12Đến đây đã hoàn tất việc tạo file cấu hình cho PROM (hình 4-21)
C Nạp Chương Trình Vào PROM
Ở bước a và b đã 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
Trong cửa sổ iMPACT, chọn Boundary Scan (hình 4-22)
Trang 13Gá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 4-23)
Tiếp tục click phải vào biểu tượng của XCF04S và chọn Program (hình 4-24)
Trang 14Chươ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 4-25)
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 rồi click OK (hình 4-26)
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
Trang 154-26) thì phải nhấn nút PROG_B (hình 4-2) để reset lại cấu hình cho FPGA Nếu thành công led DONE
(hình 4-2) sẽ sáng
- - - - - - - - - - - - - - - - - - - -
Hai cách nạp còn lại thực hiện phức tạp hơn, soạn sau
VII 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
VII.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
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 :
V CCO : 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
V CCINT : Cấp nguồn cho các khối bên trong FPGA Khoảng 1.2 V
V CCAUX : Nguồn hỗ trợ Ít quan trọng Khoảng 2.5 V
VII.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”
Trang 16XC3S500E có 10476 Logic Cell (hình 14)
VII.3 Block RAM : Khối Nhớ
Các LUTs ở phần CLBs (VII.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 1)
VII.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 36)
Trang 17VII.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 40):
- 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
- 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
Trang 18VII.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 48)
VIII SƠ LƯỢT VỀ ISE Webpack 9.1 i
VIII.1 Tạo Một Project:
Vào Start > All Programs > Xilinx ISE 9.1i > Project Navigator để khởi động chương trình Vào File > New Project cửa sổ hướng dẫn hiện ra :
Trang 19Project Name: Đặt tên project
Project location : Nơi chứa project
Click Next, cửa sổ mới hiện ra
Trang 20Cử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 port 4 bit nên ta tréo ô này
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
Trang 22Nên bỏ nó đi, ta sẽ ra cái này:
Đế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
architecture Behavioral of counter is
signal count_int : std_logic_vector (3 downto 0) := "0000";
Trang 23Ta được kết quả sau:
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ọn Project –> New source
Sẽ xuất hiện lại cửa sổ sau:
Trang 24Chọn Test Bench WaveForm, đặt tên cho file là test (file này trong project có đuôi là tbw)
Tiếp tục click Next -> Next -> Finish Sẽ ra cửa sổ như sau:
Đâ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
Trang 25Các tham số khác cũng đã được giải thích ngay trong ảnh
Click Finish để hoàn tất lựa chọn Ta được cửa sổ sau:
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
Trang 26Xem kết quả mô phỏng:
Trong cửa sổ Sources Window chọn : Behavioral Simulation
Trang 27Trong cửa sổ mới chọn test.tbw Trong ô Processes click đúp vào Simulate Behavioral Model và chờ một
lát
Kết quả sẽ xuất hiện của sổ thể hiện kết quả mô phỏng
Đế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
Trang 28Click đú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
Trang 2940 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
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
Trang 30Cử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
Cuối cùng ta được kết quả như hình sau:
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
Trang 31Như 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
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)
Kết quả ta được như sau: