netfpga tutorial

25
NetFPGA Project TUTORIAL YÊU CU: Board NetFPGA 1G. NetFPGA Package 2.2 Xilinx ISE 10.1i. Đã cài đặt và cấu hình môi trường phát triển.

Upload: vortex2910899547857

Post on 28-Apr-2015

133 views

Category:

Documents


6 download

DESCRIPTION

NetFPGA Tutorial

TRANSCRIPT

Page 1: NetFPGA Tutorial

NetFPGA Project TUTORIAL

YÊU CẦU:

Board NetFPGA 1G.

NetFPGA Package 2.2

Xilinx ISE 10.1i.

Đã cài đặt và cấu hình môi trường phát triển.

Page 2: NetFPGA Tutorial

Contents

Bài 1 Giới thiệu cấu trúc project trong NetFPGA Platform ............................................... 5

Mục tiêu: ................................................................................................................................. 5

I. Cấu trúc project trên NetFPGA Platform ......................................................................... 5

1. Cấu trúc cây thư mục NetFPGA project .................................................................. 5

2. Cấu trúc của một project ........................................................................................... 5

II. Thực hành với project mẫu trên NetFPGA. .................................................................. 6

1. Reference NIC .......................................................................................................... 6

2. Biên dịch và nạp lên board ........................................................................................ 6

3. Kiểm tra thiết kế: ...................................................................................................... 6

III. Bài tập: .......................................................................................................................... 9

Bài 2 Xây dựng project mới trên NetFPGA ..................................................................... 10

Mục tiêu: ............................................................................................................................... 10

I. Quy trình để triển khai một project trên NetFPGA platform ......................................... 10

II. Cấu trúc project template để phát triển ứng dụng trên NetFPGA. ............................. 10

III. Thực hành tạo project với module cổng AND. .......................................................... 11

1. Thêm module vào teamplate. .................................................................................. 11

2. Biên dịch và nạp lên board NetFPGA. .................................................................... 12

IV. Bài tập ......................................................................................................................... 13

Bài 3 Giao tiếp dữ liệu với board NetFPGA .................................................................... 14

Mục tiêu: ............................................................................................................................... 14

I. Giới thiệu Module nf2_reg_grp. .................................................................................... 14

II. Hiện thực module giao tiếp. ....................................................................................... 16

1. Viết chương trình module giao tiếp: ....................................................................... 16

2. Tạo Project mới ....................................................................................................... 17

3. Biên dịch và nạp lên board NetFPGA. .................................................................... 19

III. Kết hợp module người dung và module đọc ghi dữ liệu. ........................................... 19

1. Chuẩn bị source code: ............................................................................................. 19

2. Tạo project mới ....................................................................................................... 21

3. Biên dịch và nạp lên board NetFPGA. .................................................................... 23

Page 3: NetFPGA Tutorial

IV. Bài tập: ........................................................................................................................ 24

Page 4: NetFPGA Tutorial

MỤC LỤC HÌNH

Hình 1: menu.lst trước khi sửa Error! Bookmark not defined.

Hình 3: menu.lst sau khi sửa Error! Bookmark not defined.

Hình 4: Code khai báo biến vùng nhớ CORE 15

Hình 5: Code phần CORE 15

Hình 6: Module cpci_core_interface 17

Hình 7: Khai báo các biến cho module cpci_core_interface 18

Hình 8: Truyền các biến vào module nf2_reg_grp 18

Hình 9: Truyền các biến vào module cpci_core_interface 18

Hình 10: Module cpci_core_interface viết lại 21

Hình 11: Khai báo các biến cho module cpci_core_interface 22

Hình 12: Truyền các biến vào module nf2_reg_grp 22

Hình 13: AND_GATE, cpci_core_interface trong nf2_core.v 23

Page 5: NetFPGA Tutorial

Bài 1 Giới thiệu cấu trúc project trong NetFPGA

Platform

Mục tiêu:

Hiểu được cấu trúc project của NetFPGA Platform.

Biên dịch và hiện thực một project có sẵn lên board NetFPGA.

I. Cấu trúc project trên NetFPGA Platform

1. Cấu trúc cây thư mục NetFPGA project

Người sử dụng tương tác với NetFPGA thông qua các project và module. Project được phát

triển trên NetFPGA là một thiết kế hoàn chỉnh, bao gồm một thành phần phần cứng, các kiểm

nghiệm (mô phỏng và kiểm tra phần cứng hồi quy), và các thành phần phần mềm liên quan.

Các module nhỏ được thiết kế có thể tái sử dụng.

Cấu trúc cây thư mục chính của NetFPGA được tổ chức theo sơ đồ bên dưới:

NetFPGA2.1- NF2 : thư mục gốc

o bin : chứa script dùng để mô phỏng và thiết lập môi trường hoạt động.

o lib : chứa những module ổn định và những thành phần cần cho việc mô phỏng

C : chứa các công cụ phần mềm và đoạn mã để người thiết kế tham khảo.

core: chứa những module được sử dụng bởi các project tham khảo.

contrib: chứa những module được đóng góp bởi người dùng NetFPGA.

Verilog : chứa các module và tập tin Verilog có thể được sử dụng lại khi

thiết kế.

Makefiles : các makefile khác nhau cần thiết cho mô phỏng và tổng hợp.

Perl5 : chứa các thư viện perl .

o projects : chứa các project của người dùng và các project tham khảo có sẵn:

reference_nic: project tham khảo chức năng của card mạng.

reference_router: project tham khảo router IPv4 4 port.

reference_switch: project tham khảo switch Ethernet 4 port.

cpci: project cho thiết bị Spartan.

cpci_reprogrammer: project cho việc lập trình lại cho Spartan,

selftest: project dùng để test tất cả các phần của NetFPGA.

dram_queue_test: project dùng để test DRAM queues.

dram_router: project router IPv4 4 port dùng DRAM queues.

scone: phần mềm cho những thành phần của NetFPGA.

gui_scone: project sử dụng Java GUI cho các thiết kế NetFPGA.

wireshark_dissectors: project dùng Wiresharp dissectors cho việc phân

tích các gói tin của NetFPGA.

2. Cấu trúc của một project

Page 6: NetFPGA Tutorial

Gồm:

o src : chứa tất cả code verilog thiết kế của project được dùng tổng hợp và mô

phỏng.

o synth : chứa file .xco cần thiết để tạo các IPCore của hãng và makefile để hiện

thực project

o sw : chứa tất cả các thành phần phần mềm của thiết kế

o include : chứa các file macro và các file cần thiết cho tổng hợp và mô phỏng

khác

II. Thực hành với project mẫu trên NetFPGA.

1. Reference NIC

2. Biên dịch và nạp lên board

Cài đặt biến môi trường cho quá trình biên dịch

Thực hiện biên dịch thiết kế.

Nạp lên board

or

3. Kiểm tra thiết kế:

a) Phần mềm counterdump

Muốn sử dụng counterdump, đầu tiên cần phải cấu hình địa chỉ IP cho interface nf2cX. Để

làm được điều này, thực hiện câu lệnh sau:

Tiếp theo, cần phải compile phần mềm. Thực hiện lệnh sau:

/sbin/ifconfig nf2cX x.x.x.x

~/netfpga/lib/C/download/nf_download ~/netfpga/bitfiles/reference_nic.bit

cpci_reprogram.pl –all

nf_download –i nf2c0 ~/netfpga/projects/reference_nic/synth/nf2_top_par.bit

cd ~/netfpga/projects/reference_nic/synth

sudo make

sudo source /opt/Xilinx/10.1/ISE/settings32.sh

Page 7: NetFPGA Tutorial

Lệnh trên sẽ tiến hành biên dịch một số công cụ đi kèm với project reference_nic, trong đó

có counterdump. Chức năng của counterdump đơn giản chỉ là đọc nội dung của một số bộ

counter và hiện thị lên trên màn hình. Thực hiện lệnh sau:

Kết quả sẽ có dạng như sau:

b) Sử dụng send_pkts

Bây giờ chúng ta sẽ tiến hành truyền nhận một số packet và kiểm tra giá trị của counter lại

lần nữa. Một trong những công cụ đi kèm với NetFPGA package cho phép thực hiện chức năng

này là send_pkts. Phần mềm này cho phép gửi một gói tin Ethernet tùy ý.

Đầu tiên cần phải biên dịch:

Found net device: nf2c0

Num pkts received on port 0: 0

Num pkts dropped (rx queue 0 full): 0

Num pkts dropped (bad fcs q 0): 0

Num bytes received on port 0: 0

Num pkts sent from port 0: 0

Num bytes sent from port 0: 0

Num pkts received on port 1: 0

Num pkts dropped (rx queue 1 full): 0

Num pkts dropped (bad fcs q 1): 0

Num bytes received on port 1: 0

Num pkts sent from port 1: 0

Num bytes sent from port 1: 0

Num pkts received on port 2: 0

Num pkts dropped (rx queue 2 full): 0

Num pkts dropped (bad fcs q 2): 0

Num bytes received on port 2: 0

Num pkts sent from port 2: 0

Num bytes sent from port 2: 0

Num pkts received on port 3: 0

Num pkts dropped (rx queue 3 full): 0

Num pkts dropped (bad fcs q 3): 0

Num bytes received on port 3: 0

Num pkts sent from port 3: 0

Num bytes sent from port 3: 0

./counterdump

cd ~/netfpga/lib/C/nic

make

Page 8: NetFPGA Tutorial

Output sẽ có dạng nhưu sau:

Bước tiếp theo ta thử gửi một vài packet, để thực hiện, sử dụng câu lệnh sau:

Lệnh trên sẽ gửi 10 packet từ port 0 trên board NetFPGA, mỗi packet dài 100bytes. Bây giờ

kiểm tra lại giá trị của counter.

Kết quả sẽ có dạng như sau:

~/netfpga/lib/C/nic/counterdump

cd ~/netfpga/lib/C/tools/send_pkts

sudo ./send_pkts -i nf2c0 -s 10 -l 100

gcc `libnet-config --defines --cflags` -O2 -o send_pkts send_pkts.c

`libnet-config --libs` -L/usr/lib-lnet -lpcap --static

cd ~/netfpga/lib/C/tools/send_pkts

make

Page 9: NetFPGA Tutorial

III. Bài tập:

1. Phân tích cấu trúc project của Reference NIC. Làm rõ các vấn đề sau:

Tại sao thư mục src của project Reference NIC không cần verilog sourcefile.

Những module nào được sử dụng trong project Reference NIC và vị trí của nó.

2. Tham khảo thêm

http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Guide

Found net device: nf2c0

Num pkts received on port 0: 0

Num pkts dropped (rx queue 0 full): 0

Num pkts dropped (bad fcs q 0): 0

Num bytes received on port 0: 0

Num pkts sent from port 0: 10

Num bytes sent from port 0: 1000

Num pkts received on port 1: 0

Num pkts dropped (rx queue 1 full): 0

Num pkts dropped (bad fcs q 1): 0

Num bytes received on port 1: 0

Num pkts sent from port 1: 0

Num bytes sent from port 1: 0

Num pkts received on port 2: 0

Num pkts dropped (rx queue 2 full): 0

Num pkts dropped (bad fcs q 2): 0

Num bytes received on port 2: 0

Num pkts sent from port 2: 0

Num bytes sent from port 2: 0

Num pkts received on port 3: 0

Num pkts dropped (rx queue 3 full): 0

Num pkts dropped (bad fcs q 3): 0

Num bytes received on port 3: 0

Num pkts sent from port 3: 0

Num bytes sent from port 3: 0

Page 10: NetFPGA Tutorial

Bài 2 Xây dựng project mới trên NetFPGA

Mục tiêu:

Qua bài thực hành này bạn sẽ nắm được các vấn đề sau:

Các bước cơ bản để triển khai project trên NetFPGA platform.

Nắm được cấu trúc của project template.

Tạo một project với project template.

I. Quy trình để triển khai một project trên NetFPGA platform

Project mới nên tuân theo cấu trúc thư mục của project trong NetFPGA platform để thuận

tiện cho việc quản lý và tái sử dụng. Theo đó, việc triển khai một project được thực hiện thông

qua các bước sau:

Bước 1: Tạo cấu trúc cây thư mục cho project mới.

o Tạo thư mục chính cho project mới đặt trong ~/NetFPGA/project/

o Tạo các thư muc con cần thiết trong thư mục project mới: src, synth, sw,

include.

Bước 2: Bổ sung các module cần thiết cho dự án.

o Đặt tất cả các tập tin Verilog của thiết kế vào thư mục src.

o Các tập tin xco, coe (nếu có) vào thư mục synth.

Bước 3: Bổ sung các thư viện cần thiết cho dự án, gán chân.

o Quan sát có một tập tin đính kèm là: lib_modules.txt. Tập tin này quy định

các module library được sử dụng. Copy nó vào thư mục include trong project

của ta. Loại bỏ những module không cần thiết khỏi file lib_include.txt và thay

đổi đường dẫn trong file đến các module nếu cần thiết.

Bước 4: Xây dựng các công cụ phát triển.

o Nếu có các công cụ phần mềm viết riêng cho project, đặt chúng vào thư mục

sw.

Bước 5: Thiết lập các file cần thiết tổng hợp.

o Copy makefile từ thư mục tương ứng trong project reference_nic được cung

cấp sẵn của NetFPGA vào.

o Thiết lập các biến môi trường

NF_ROOT đến thư mục gốc (NetFPGA2.1-x.y)

NF_DESIGN_DIR đến thư mục project vừa tạo

NF_WORK_DIR đến thư mục làm việc (chọn nơi nào nhiều dung

lượng nhất trong máy chủ).

Bước 6: Biên dịch và nạp nên board NetFPGA.

Bước 7: Kiểm tra thiết kế.

II. Cấu trúc project template để phát triển ứng dụng trên NetFPGA.

Cac file template bao gồm:

Page 11: NetFPGA Tutorial

o nf2_top.v,

o nf2_core.v,

o nf2_reg_grp.v.

III. Thực hành tạo project với module cổng AND.

Trong bài tutorial này chúng ta sẽ triển khai project đơn giản sử dụng module cổng AND

(AND_GATE).

1. Thêm module vào teamplate.

Bước 1: Xây dựng cấu trúc thư mục

Để đơn giản, ta sẽ tạo project mới sử dụng cấu trúc thư mục có sẵn của project

reference_nic. Thực hiện lệnh sau:

Do trong reference_nic không có thư mục src nên ta cần tạo thêm thư mục src trong tutorial2

Bước 2: Copy các template module vào project.

Copy các file nf2_top.v, nf2_core.v, nf2_reg_grp.v vào thư mục src.

Copy file nf2_top.ucf vào thư mục synch.

Bước 3: Thiết lập biến môi trường

Bước 4: Chỉnh sửa các file cần thiết

File nf2_core.v trong thư viện có chứa những module không cần thiết như MAC rx and tx

queues, CPU Queues, SRAM CONTROLLERS, DDR test, User data path, NetFPGA DMA

controller. Template đã loại bỏ những module này ra khỏi file nf2_core.v, và chỉnh sửa file

nf2_top.ucf cho phù hợp.

Chèn code sau vào file nf2_core.v, bên dưới “ADD YOUR CODE HERE” để thêm module

AND_GATE vào project.

sudo ~/netfpga/lib/scripts/user_account_setup/user_account_setup.pl

mkdir ~/netfpga/projects/tutorial2/src

cp -r ~/netfpga/projects/reference_nic tutorial2

Page 12: NetFPGA Tutorial

Việc gán chân cho các module sẽ được thực hiện trong file nf2_top.ucf. Một số chú ý:

in_1 được gán cho chân T2 (cpci_debug_data[0]),

in_2 được gán cho chân P2(cpci_debug_data[1]),

out được gán cho chân AL5 (debug_led).

Có thể mở file nf2_top.ucf để quan sát thêm, chú ý các dòng:

2. Biên dịch và nạp lên board NetFPGA.

Bước 1: Biên dịch chương trình.

Cài đặt biến môi trường cho quá trình biên dịch

Thực hiện biên dịch thiết kế.

Bước 2: Nạp bit file xuông board NetFPGA.

Bước 3: Kiểm tra thiết kế

cpci_reprogram.pl –all

nf_download –i nf2c0 ~/netfpga/projects/tutorial2/synth/nf2_top_par.bit

cd ~/netfpga/projects/tutorial2/synth

sudo make

sudo source /opt/Xilinx/10.1/ISE/settings32.sh

NET "cpci_debug_data<0>" LOC = "T2" | IOSTANDARD = LVCMOS25 ;

NET "cpci_debug_data<1>" LOC = "P2" | IOSTANDARD = LVCMOS25 ;

NET "debug_led" LOC = "AL5" | IOSTANDARD = LVCMOS25 ;

wire in_1;

wire in_2;

wire out;

AND_GATE and_2_input(

.in_1(in_1),

.in_2(in_2),

.out(out)

);

assign in_1 = cpci_debug_data[0];

assign in_2 = cpci_debug_data[1];

assign out = debug_led;

Page 13: NetFPGA Tutorial

IV. Bài tập

1. Phân tích cấu trúc project, xác định:

Những module nào được tái sử dụng, và những module nào được tạo mới.

Page 14: NetFPGA Tutorial

Bài 3 Giao tiếp dữ liệu với board NetFPGA

Mục tiêu:

Kết thúc bài thực hành này các bạn có thể:

Hiểu được các sử lý vùng nhớ của NetFPGA Platform.

Công dụng và cấu trúc module nf2_reg_grp.

Đọc ghi dữ liệu lên board, vận dụng để kiểm tra thiết kế của người dùng.

I. Giới thiệu Module nf2_reg_grp.

Module nf2_reg_grp được cung cấp sẵn để có thể giao tiếp đọc, ghi dữ liệu xuống vùng nhớ

của board NetFPGA.

Module nf2_grep_grp nằm trong file nf2_reg_grp.v, có thể tìm thấy file này trong thư mục

~\netfpga\lib\verilog\core\nf2\reference_core\src hoặc template đi kèm với bài thực hành này.

Các vùng nhớ được định nghĩa:

Vùng core:

o CORE_TAG_ADDR = 25b'0_00xxxxxx_xxxxxxxx_xxxxxxxx

Vùng SRAM:

o SRAM_TAG_ADDR = 25b'0_01xxxxxx_xxxxxxxx_xxxxxxxx

Vùng User Data Path:

o UDP_TAG_ADDR = 25b'0_1xxxxxxx_xxxxxxxx_xxxxxxxx

Vùng DRAM:

o DRAM_TAG_ADDR = 25b'1_xxxxxxxx_xxxxxxxx_xxxxxxxx

Để đơn giản, trong bài thực hành này chúng ta chỉ xét vùng CORE_TAG_ADDR, các vùng

khác cũng tương tự.

Chú ý: Khi dùng vùng nhớ CORE_TAG_ADDRESS có thể sẽ gây ra warning do trùng với

vùng mô tả các ID của hệ thống. Sau bài học người dùng sẽ thấy những warning đó là gì.

Lệnh giao tiếp từ terminal:

Ghi xuống board:

o regwrite <–i interface> <address> <value>

o Ví dụ:

regwrite –i nf2c0 0x00c00000 0x0000cafe

Ý nghĩa: ghi xuống board, địa chỉ 0x00c00000, giá trị 0x0000cafe

o Ghi chú: mỗi board có 4 interface, nếu 2 board cùng gắn lên máy thì các

interface nf2c0 đến nf2c3 là của board 0; nf2c4 đến nf2c4 là của board 1.

Đọc từ board lên:

o regread <–i interface> <address>

o Ví dụ:

regread –i nf2c0 0x00c00000

Page 15: NetFPGA Tutorial

Ý nghĩa: đọc từ board, giá trị của ô nhớ có địa chỉ 0x00c00000

Nếu ta đã thực hiện Ví dụ 1 thì giá trị trả về hiện lên màn hình của Ví

dụ 2 sẽ là 0x0000cafe

Để sử dụng được những lệnh này, ta phải thực hiện các bước bên dưới.

Sử dụng vùng nhớ CORE:

Ta cần quan tâm những đoạn code sau trong file nf2_reg_grp.v:

Hình 1: Code khai báo biến vùng nhớ CORE

Hình 2: Code phần CORE

Giải thích một số tín hiệu được dùng:

core_reg_req:

o cờ cho biết có request yêu cầu đọc hoặc ghi

core_reg_rd_wr_L:

o cờ cho biết request là đọc(0) hay ghi(1)

core_reg_addr:

o address của cùng nhớ cần truy cập

core_reg_wr_data:

o giá trị cần ghi xuống

core_reg_ack:

o tín hiệu ack khi đọc vùng nhớ từ board lên

core_reg_rd_data:

o giá trị của đọc lên được từ vùng nhớ của board

Ví dụ 1:

Page 16: NetFPGA Tutorial

regwrite –i nf2c0 0x00c00000 0x0000cafe

Khi đó:

core_reg_req = 1’b1

core_reg_rd_wr_L = 1’b1

core_reg_addr: = 0x00c00000

core_reg_wr_data = 0x0000cafe

core_reg_ack: không quan tâm

core_reg_rd_data: không quan tâm

Ví dụ 2:

regread –i nf2c0 0x00c00000

Khi đó:

core_reg_req = 1’b1

core_reg_rd_wr_L = 1’b0

core_reg_addr: = 0x00c00000

core_reg_wr_data không quan tâm

core_reg_ack: cần set lên 1’b1

core_reg_rd_data = giá trị cần trả về

II. Hiện thực module giao tiếp.

1. Viết chương trình module giao tiếp:

Tạo file cpci_core_interface.v với nội dung như sau:

Page 17: NetFPGA Tutorial

Hình 3: Module cpci_core_interface

2. Tạo Project mới

Bước 1: Tạo cấu trúc thư mục. Thực hiện giống như đã học ở bài 2

Copy thư mục reference_nic và đổi thành tên tutorial3.

Trong thư mục tutorial3, sau đó copy vào src các file:

o nf2_top.v đã được cung cấp sẵn (template).

o nf2_core.v đã được cung cấp sẵn (template).

o nf2_reg_grp.v đã được cung cấp sẵn (template).

Page 18: NetFPGA Tutorial

o cpci_core_interface.v như hướng dẫn ở trên.

Trong thư mục tutorial3, copy vào thư mục synth file

o nf2_top.ucf đã được cung cấp sẵn.

Bước 2: Chỉnh sửa file nf2_core.v, thêm code vào bên dưới “ADD YOUR CODE HERE”,

như sau:

Khai báo biến cho module cpci_core_interface:

Hình 4: Khai báo các biến cho module cpci_core_interface

Truyền các biến vào module nf2_reg_grp:

Hình 5: Truyền các biến vào module nf2_reg_grp

Truyền các biến vào module cpci_core_interface:

Hình 6: Truyền các biến vào module cpci_core_interface

Page 19: NetFPGA Tutorial

3. Biên dịch và nạp lên board NetFPGA.

Bước 1: Biên dịch chương trình.

Cài đặt biến môi trường cho quá trình biên dịch

Thực hiện biên dịch thiết kế.

Bước 2: Nạp bit file xuông board NetFPGA.

Bước 3: Kiểm tra thiết kế

Tại cửa sổ terminal: Đọc lên giá trị ở địa chỉ 25’h030_0001 xem có bằng

32’hcafe1111 hay không

Chú ý: địa chỉ 25h030_0001 khi nhập từ của sổ terminal sẽ bị dịch phải 2 bit. Do đó, ta

phải dịch trái 2 bit giá trị 25h030_0001 rồi mới khi nhập, thành 0x00c00004.

Ghi xuống một giá trị cho biến WR_DATA, giả sử 0x00002222

Đọc lên lại giá trị biến WR_DATA xem có phải 0x00002222 không

III. Kết hợp module người dung và module đọc ghi dữ liệu.

1. Chuẩn bị source code:

Bước 1: Chuẩn bị module người dung.

Ở đây ta sử dụng lại module AND_GATE ở bài 2.

Bước 2: Hiện thực Module giao tiếp

Sử dụng module cpci_core_interface.v có chỉnh sửa cho phù hợp.

regread –i nf2c0 0x00c00000

regwrite –i nf2c0 0x00c00000 0x00002222

regread –i nf2c0 0x00c00004

cpci_reprogram.pl –all

nf_download –i nf2c0 ~/netfpga/projects/tutorial2/synth/nf2_top_par.bit

cd ~/netfpga/projects/tutorial2/synth

sudo make

sudo source /opt/Xilinx/10.1/ISE/settings32.sh

Page 20: NetFPGA Tutorial

Do module AND_GATE có 2 input và 1 output nên ta cần sửa file cpci_core_interface.v

như sau:

Page 21: NetFPGA Tutorial

Hình 7: Module cpci_core_interface viết lại

2. Tạo project mới

Bước 1: Tạo cấu trúc thư mục. Thực hiện giống như đã học ở bài 2

Copy thư mục reference_nic và đổi thành tên tutorial4.

Trong thư mục tutorial4, sau đó copy vào src các file:

o nf2_top.v đã được cung cấp sẵn (template).

o nf2_core.v đã được cung cấp sẵn (template).

o nf2_reg_grp.v đã được cung cấp sẵn (template).

o cpci_core_interface.v như hướng dẫn ở trên.

Trong thư mục tutorial4, copy vào thư mục synth file

o nf2_top.ucf đã được cung cấp sẵn.

Bước 2: Chỉnh sửa file nf2_core.v, thêm code vào bên dưới “ADD YOUR CODE HERE”,

như sau:

Khai báo biến cho module cpci_core_interface:

Page 22: NetFPGA Tutorial

Hình 8: Khai báo các biến cho module cpci_core_interface

Truyền các biến vào module nf2_reg_grp:

Hình 9: Truyền các biến vào module nf2_reg_grp

Thêm module AND_GATE, cpci_core_interface và các biến cần thiết:

Page 23: NetFPGA Tutorial

Hình 10: AND_GATE, cpci_core_interface trong nf2_core.v

3. Biên dịch và nạp lên board NetFPGA.

Bước 1: Biên dịch chương trình.

Cài đặt biến môi trường cho quá trình biên dịch

Thực hiện biên dịch thiết kế.

Bước 2: Nạp bit file xuông board NetFPGA.

Bước 3: Kiểm tra thiết kế. Tại cửa sổ terminal:

cpci_reprogram.pl –all

nf_download –i nf2c0 ~/netfpga/projects/tutorial2/synth/nf2_top_par.bit

cd ~/netfpga/projects/tutorial2/synth

sudo make

sudo source /opt/Xilinx/10.1/ISE/settings32.sh

Page 24: NetFPGA Tutorial

Đọc lên giá trị tại địa chỉ 25’h030_0004 xem có phải 0xcafe2222 hay không

Ghi xuống một giá trị cho biến IN_1, giả sử 1

Ghi xuống một giá trị cho biến IN_2, giả sử 1

Đọc lên lại giá trị biến OUT xem có phải 1 không

Chú ý:

Việc đọc ghi các thanh ghi chỉ có tác dụng test module người dùng hiện thực xem có

đúng không. Ở đây ta truyền input xuống module của mình bằng cách ghi xuống thanh ghi các

biến IN_1, IN_2, sau xem output bằng cách đọc giá trị thanh ghi OUT.

IV. Bài tập:

1. Hiện thực bộ chuyển đổi Binary to BCD với yêu cầu như sau:

Interface:

o Input:

12 bit input số binary.

1 bit Tín hiệu enable.

o Output:

16 bit số BCD 4 chữ số.

Function:

o Khi enable cho phép convert số binary 12 bit sang số BCD 4 chữ số.

Sử dụng module đọc ghi thanh ghi và regread, regwrite để kiểm tra chức năng.

2. Hiện thực module truy xuất ram trên NetFPGA với yêu cầu như sau

Sử dụng blockRam:

o Độ rộng: 32 bit.

o Độ sâu: 512.

Function:

o Hỗ trợ cả chức ăng đọc và ghi dữ liệu.

Sử dụng module đọc ghi thanh ghi và regread, regwrite để kiểm tra chức năng.

regread –i nf2c0 0x00c00008

regwrite –i nf2c0 0x00c00004 1

regwrite –i nf2c0 0x00c00000 1

regread –i nf2c0 0x00c0000c

Page 25: NetFPGA Tutorial

Hint: Có thể dung ISE đế sinh ra file đặc tả cấu trúc Ram (.xco).