41
Spartan-3E Starter Kit Biên son: thavali ĐH Khoa Hc TNhiên TP.HChí Minh. I. CÁC THÀNH PHN CA KIT 1. Xilinx XC3S500E Spartan-3E FPGA : con chính ca 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 CA XC3S500E XC3S500E có kiu chân BGA, 320 chân như hình: Cách đánh schân: Vtrí ca 1 chân được xác định theo qui tc ma trn 2 chiu. Chiu ngang (dòng) là st0 ti 18. Chiu dc (ct) là chtA ti V. Ví d: chân A1, là chân dòng A, ct 1. Đây là chân GND ca FPGA. Tài nguyên: 10000 logic cells, có 232 chân I/O cho người dùng tđịnh nghĩa.

Spartan 3e - Vietnamese

Embed Size (px)

Citation preview

Page 1: Spartan 3e - Vietnamese

Spartan-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.

Page 2: Spartan 3e - Vietnamese

III. 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.

Page 3: Spartan 3e - Vietnamese

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

Page 4: Spartan 3e - Vietnamese

Nút Encoder : có 3 ngõ ra: ROT_A, ROT_B, ROT_CENTER : nối vớ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.

Page 5: Spartan 3e - Vietnamese

Để 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.

Page 6: Spartan 3e - Vietnamese

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:

Page 7: Spartan 3e - Vietnamese

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

Page 8: Spartan 3e - Vietnamese

Click đú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:

Page 9: Spartan 3e - Vietnamese

Click đú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).

Page 10: Spartan 3e - Vietnamese

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. Tiếp tục click NO rồi OK để bắt đầu format và config PROM (hình 4-18).

Page 11: Spartan 3e - Vietnamese

Kế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).

Page 12: Spartan 3e - Vietnamese

Đế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).

Page 13: Spartan 3e - Vietnamese

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

Page 14: Spartan 3e - Vietnamese

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 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

Page 15: Spartan 3e - Vietnamese

4-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 : 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.

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”.

Page 16: Spartan 3e - Vietnamese

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

Page 17: Spartan 3e - Vietnamese

VII.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.

Qui tắc thực hiện:

OUT _1CLK *_ 2IN

IntegerCLKInteger

=

Trong đó CLKOUT là clock ra, CLKIN là clock vào, Integer_1 là tùy chọn từ 2 tới 32, Integer_2 là tùy chọn từ 1 tới 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.

Page 18: Spartan 3e - Vietnamese

VII.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 :

Page 19: Spartan 3e - Vietnamese

Project Name: Đặt tên project. Project location : Nơi chứa project. Click Next, cửa sổ mới hiện ra.

Ô 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.

Page 20: Spartan 3e - Vietnamese

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

Page 21: Spartan 3e - Vietnamese
Page 22: Spartan 3e - Vietnamese

Nê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. --library UNISIM; --use UNISIM.VComponents.all; entity counter is Port ( CLOCK : in STD_LOGIC; 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;

Page 23: Spartan 3e - Vietnamese

Ta đượ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:

Page 24: Spartan 3e - Vietnamese

Chọ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.

Page 25: Spartan 3e - Vietnamese

Cá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.

Page 26: Spartan 3e - Vietnamese

Xem kết quả mô phỏng: Trong cửa sổ Sources Window chọn : Behavioral Simulation

Page 27: Spartan 3e - Vietnamese

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.

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 .

Page 28: Spartan 3e - Vietnamese

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.

Page 29: Spartan 3e - Vietnamese

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.

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.

Page 30: Spartan 3e - Vietnamese

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.

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.

Page 31: Spartan 3e - Vietnamese

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.

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:

Page 32: Spartan 3e - Vietnamese

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. Trở về chương trình chính ISE, ở cửa sổ processes click vào Implement Design.

Page 33: Spartan 3e - Vietnamese

Như vậy bạn đã xong công việc place and route.

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

Bước cuối cùng là nạp chương trình cho FPGA, phần này đã trình bày ở mục VI. Chú ý:

- Board Spartan 3E còn nhiều thành phần nữa mà tôi chưa trình bày kịp, bạn nào có thể thì xin bổ sung để tài liệu thêm đầy đủ.

- Phần trình bày trên chỉ là sơ lượt về ISE, còn nhiều phần nữa, nhưng vì trình độ và thời gian nên chưa thể soạn được.

- Tài liệu này có thể có những sai sót, nên các bạn có thể sửa chữa tùy ý .

Page 34: Spartan 3e - Vietnamese

IX. PHẦN NÀY DÀNH CHO QUẢNG CÁO. Chuẩn bị ra trường (wow, may quá). Tui rất thích công việc liên quan tới FPGA, vi điều khiển (8051 hay AVR, còn PIC thì chưa biết) .v.v. Có bác nào muốn tuyển dụng tui xin liên hệ: Mail: [email protected] Xin vui lòng giới thiệu về bạn hay công ty của bạn. Xin cảm ơn.

HCM, ngày 27-07-2007. thavali

Page 35: Spartan 3e - Vietnamese

Micron DDR RAM MT46V32M16

I. SƠ ĐỒ CHÂN VÀ CẤU TRÚC a. Sơ Đồ Chân VDD, VDDQ : cấp nguồn 2.5 v. VSS, VSSQ : nối GND. NC, DNU : Không sử dụng.

Page 36: Spartan 3e - Vietnamese

b. Cấu Trúc

MT46V32M16 (Gọi tắt là DRAM) có dung lượng 64 Mbyte. Bộ nhớ được phân chia thành 4 bank. Mỗi bank là 16 Mbyte với giao diện : 8Meg x16 bit (meg = mega). DRAM có có cấu trúc kiểu lưới (grid) mà mỗi vị trí của một ô nhớ (1 word) được xác định dựa vào địa chỉ bank (Bank address), địa chỉ dòng (row address) và địa chỉ cột (column address). MT46V32M16 có 8K địa chỉ dòng, 1K địa chỉ cột và 4 bank. Việc truy xuất DRAM được thực hiện bằng cách dùng các nhóm tín hiệu: Điều khiển, địa chỉ và dữ liệu. a. Nhóm tín hiệu điều khiển bao gồm: - CKE : clock enable. - CK,CK# : cặp xung clock (differential clock). - CS# : Chip select. - WE# - CAS# - RAS#

Page 37: Spartan 3e - Vietnamese

b. Nhóm tín hiệu địa chỉ: A0 – A12 : chỉ định địa chỉ dòng hay cột. BA0 – BA1: chỉ định địa chỉ bank.

c. Nhóm tín hiệu dữ liệu: DQ0 – DQ15: bus dữ liệu. LDQS, UDQS: dò dữ liệu (data strobe)

LDM, UDM : data mask. II. HOẠT ĐỘNG Truy xuất DRAM được thực hiện theo từng chuỗi dữ liệu có hướng (oriented data burst). Chiều dài của chuỗi có thể tùy chọn từ 2, 4, 8 từ nhớ (word). Để thực hiện điều này ta gởi đi các lệnh điều khiển thông qua các tín hiệu điều khiển. Cụ thể, quá trình truy xuất DRAM được thực hiện như sau:

1. Chuyển DRAM vào trạng thái nghỉ. 2. Gởi đi lệnh ACTIVE để kích hoạt dòng (tức địa chỉ dòng). 3. Gởi lệnh read hay write để đọc hay ghi vào DRAM. 4. Gởi lệnh precharge để kết thúc đọc hay ghi một chuỗi và chuẩn bị đọc/ghi chuỗi khác.

Đây chỉ là các bước chính, về chi tiết các DRAM khác nhau có cách truy xuất khác nhau. - Các lệnh (command) được gởi đi khi cạnh lên (rising) của CLK giao với CLK# .

- Dữ liệu được gởi đi ở cả hai cạnh của CLK. III. TẬP LỆNH Dựa vào các tín hiệu điều khiển ta có thể gởi tới DRAM các lệnh sau (bảng III.1): NOP : không làm gì. DESELECT : không làm gì. ACTIVE: Lựa chọn (kích hoạt) bank và dòng. READ : Chọn bank và cột để đọc chuỗi (burst).

Page 38: Spartan 3e - Vietnamese

WRITE: Chọn bank và cột để ghi chuỗi (burst). PRECHARGE (PRE): Ngừng kích hoạt dòng trong một bank hay tất cả các bank. LOAD MODE REGISTER (LMR): chọn chế độ hoạt động cho DRAM. AUTO REFRESH (AR): Tự làm tươi. BURST TERMINATE (BST): Chấm dứt (bằng cách cắt ngang) quá trình đọc một burst. Bảng III.1

Quá trình truy xuất DRAM có liên quan tới các tham số chính như sau:

- tCAS (CAS latency) : là thời gian trì hoãn (tính bằng số chu kì xung clock) tính từ lúc truy xuất cột cho đến khi bit dữ liệu đầu tiên xuất hiện ở ngõ ra.

- tRCD (RAS to CAS delay) : là thời gian trì hoãn từ lúc một dòng (row) được kích hoạt cho đến khi một cột (column) tương ứng được kích hoạt.

- tRP (RAS precharge) : là thời gian trì hoãn để kết thúc truy xuất một dòng và bắt đầu truy xuất một dòng khác.

- tRAS (RAS latency): thời gian trì hoãn giữa lệnh lệnh PRECHARGE và ACTIVE, do dòng chỉ cần kích hoạt một lần trong suốt thời gian truy xuất một chuỗi dữ liệu nên, nói chung, thông số tRAS ít quan trọng.

- Burst length: chiều dài của chuỗi dữ liệu trong một lần truy xuất. Có thể 2, 4, 8 word. - Burst type: thứ tự sắp xếp các word trong một burst.

1. ĐỌC DRAM

Để đọc DRAM, trước hết ta cấu hình chế độ hoạt động cho DRAM bằng cách dùng lệnh LMR, lệnh này chỉ được phát ra khi DRAM ở chế độ nghỉ (idle). Có nhiều chế độ hoạt động của DRAM. Phần trình bày sau là cách đọc DRAM với các tham số như sau:

- DRAM hoạt động ở chế độ bình thường Bằng cách thiết lập A7 – A10 = {0, 0, 0, 0}.

- Chế độ thanh ghi cơ bản. Bằng cách thiết lập BA0, BA1 = {0, 0}.

- Burst length = 4. Bằng cách thiết lập A0, A1, A2 = {0, 1, 0}.

- Burst type = tuần tự (sequential).

Page 39: Spartan 3e - Vietnamese

Bằng cách thiết lập A3 = 0. - CAS Latency = 2.

Bằng cách thiết lập A4, A5, A6 = {0, 1, 0}. Cuối cùng ta gởi đi lệnh LMR để bắt đầu cấu hình, bằng cách cho CS#, WE#, CAS#, RAS# = {0,0,0,0}. Các lựa chọn cấu hình khác có thể dựa vào bảng III.2.

Cần để ý là tất cả các lệnh (command) chỉ có thể gởi đi ở vị trí giao nhau của cạnh lên xung CLK và cạnh xuống xung CLK#. Còn dữ liệu thì được truyền ở cả hai cạnh của CLK, do đó tốc độ truy xuất dữ liệu nhanh gấp đôi tốc độ CLK (DDR = Double data rate). Thông số CAS Latency khá quan trọng vì nó ảnh hưởng đến việc lựa chọn tốc độ xung clock. Với CAS Latency =2 thì tốc độ xung clock tối đa là CLK = 133 MHz. Ở CAS Latency = 3 thì tốc độ xung clock tối đa là CLK = 200 MHz. Như vậy nếu như chọn CAS Latency = 3 thì tốc độ truy xuất dữ liệu của DRAM là 400 MHz. Trong thực tế, tốc độ có thể chậm hơn vì cần tốn thời gian để truyền đi các lệnh trước khi dữ liệu được truy xuất. Tuy nhiên, nếu quá trình truy xuất là một chiều (chỉ đọc hoặc ghi) thì tốc độ có thể lên đến 400 MHz bằng cách gởi đi các lệnh theo một chu kì thích hợp (xem chi tiết bên dưới ). Bảng III.2

Page 40: Spartan 3e - Vietnamese

- Sau khi lệnh cấu hình LMR được gởi đi, thì lệnh kế tiếp là ACTIVE, lệnh ACTIVE thực chất là lệnh kích hoạt dòng (row) và bank, nơi mà ta cần truy xuất dữ liệu. Các thông số đi kèm với lệnh ACTIVE là địa chỉ bank (thông qua các tín hiệu BA0, BA1) và địa chỉ cột (thông qua các tín hiệu A0 – A12 ). - Cuối cùng lệnh READ có thể được gởi đi để đọc hay ghi dữ liệu. Các thông số đi kèm với lệnh READ là địa chỉ bank (thông qua các tín hiệu BA0, BA1) và địa chỉ cột (thông qua các tín hiệu A0 – A9). Tín hiệu A10 dùng để lựa chọn chức năng AutoPrecharge, nếu chọn chức năng này, sau khi đọc xong chuỗi dữ liệu (data burst), thì tất cả các dòng của bank tương ứng với chuỗi này sẽ tự động ngưng kích hoạt (deactive). Ngược lại, nếu không chọn chức năng AutoPrecharge thì dòng vẫn mở. Sau một khoảng thời gian tRAS từ lúc lệnh READ được gởi đi, dữ liệu sẽ xất hiện ở ngõ ra. - Để xác định thời đểm bắt đầu của chuỗi dữ liệu (data burst) ở ngõ ra, người ta dùng tín hiệu dò DQS (data strobe), khi DRAM không được truy xuất, DQS ở trạng thái High_Z. Tín hiệu DQS sẽ từ High_Z xuống mức thấp để báo hiệu bắt đầu của chuỗi dữ liệu, DQS từ thấp chuyển thành High_Z để báo chầm dứt quá trình đọc dữ liệu. Hình III.1 là quá trình đọc dữ liệu với CAS latency = 2. Hình III.2 là quá trình đọc dữ liệu liên tục (CAS latency = 2) bằng cách gởi đi liên tiếp các lệnh READ cách nhau 2 chu kì CLK. Cách này giúp cho tốc độ truy xuất dữ liệu nhanh gấp đôi tốc độ CLK. Chiều cao lưng chừng của tín hiệu DQS ở cả hai hình III.1, III.2 để chỉ trạng thái High_Z.

Hình III.1

Hình III.2

Page 41: Spartan 3e - Vietnamese

2. GHI DRAM