1. 目录
1.0 目录树结构
2.0 设计入门
2.1 使用模块
2.2 添加自定义代码
2.3 覆盖库代码
2.4 Coregen 核生成
3.0 环境设置
4.0 仿真
5.0 实现
6.0 运行硬件
6.1 内核驱动
6.2 下载
7.0 联系方式
| 1.0 目录树结构
目录树结构如下:
netfpga
|
+------ bin (包含用于运行仿真和设置环境的脚本)
|
+------ lib (包含仿真/综合/设计所需的稳定模块和公共部件)
| |
| +---- C (包含参考设计所需的公共软件和代码)
| |
| +---- verilog (包含可重复用于设计的模块和文件)
| | |
| | +---- core (NetFPGA 设计过程中开发的参考设计所使用的模块)
| | |
| | +---- contrib (NetFPGA 用户贡献的模块)
| |
| +---- Makefiles (用于仿真和综合的各种 makefile 文件)
| |
| +---- Perl5 (包含与参考设计交互及辅助仿真的公共库)
|
+------ projects (包含用户项目,包括参考设计)
|
+---- reference_nic (参考 NIC 项目)
| |
| +---- src (包含用于综合和仿真的所有 verilog 代码)
| |
| +---- synth (包含用于生成核的用户 .xco 文件,以及用于实现设计的 Makefile)
| |
| +---- sw (包含项目的所有软件部分)
| |
| +---- include (包含定义宏的文件,以及用于仿真和/或综合的其他包含文件)
|
+---- reference_router (参考 4 端口 IPv4 路由器)
|
+---- reference_switch (参考 4 端口自学习以太网交换机)
|
+---- cpci (Spartan 器件的代码)
|
+---- cpci_reprogrammer (用于重新编程 Spartan 的 Virtex 器件代码)
|
+---- selftest (用于测试所有 NetFPGA 子系统的设计)
|
+---- dram_queue_test (验证 DRAM 队列)
|
+---- dram_router (使用 DRAM 队列的 4 端口 IPv4 路由器)
|
+---- scone (NetFPGA 软件组件)
|
+---- gui_scone (NetFPGA 设计的 Java GUI)
|
+---- wireshark_dissectors (用于 NetFPGA 报文类型的 Wireshark 解析器)
目录树的设计旨在实现库和用户项目之间的模块化和公共代码共享。
用于综合和仿真的脚本应足够灵活,允许用户添加自己的代码,而无需更改或理解脚本的工作原理。但这超出了本 README 的范围。
2. 设计入门
学习如何使用该目录树的最佳方法是参考示例。如果你查看 reference_nic 项目,会注意到以下几点:
1- src 目录为空:这是因为该项目仅使用库模块。
2- sw 目录为空:这是因为该交换机的软件也在库中。
3- include 下有一个文件:lib_modules.txt。该文件指定了要使用的库模块。
开始设计的最佳方法是复制 reference_switch 或 reference_router 目录,并在新目录中添加/修改文件。
* 2.1 使用库模块
lib_modules.txt 文件指定了要从库中使用的模块列表。这些模块的路径是相对于 NetFPGA2.1-x.y/lib/verilog 目录的。只需更改 lib_modules.txt 文件中的模块路径,就可以选择使用不同的模块。
* 2.2 添加自定义代码
要添加自己的代码,请编写 verilog 文件并将其放入 src 目录中。你也可以选择将它们分区到 src 下的不同子目录中。请注意,只支持单层目录结构。
你可以选择使用部分、全部,甚至完全不使用原始库模块。你可以将库代码复制到你的项目目录中进行修改。从 lib_modules.txt 文件中移除你不使用的库模块即可。
* 2.3 覆盖库代码
你可能只需要修改某个库模块中的一个文件。你无需复制所有源文件并从 lib_modules.txt 中移除该库模块。只需将你想要修改的文件复制到项目的 src 目录中,然后在其中进行修改即可。
* 2.4 Coregen 核生成
如果你需要使用 Xilinx 的 Coregen 生成的 IP 核,请将生成的 .xco 文件复制到项目的 synth 目录中。你不需要其他任何文件。脚本会自动处理。
3. 环境设置
需要设置以下环境变量:
NF_ROOT - 设置为目录树的根目录 (NetFPGA2.1-x.y)
NF_DESIGN_DIR - 设置为项目目录 (例如 $NF_ROOT/projects/reference_nic)
NF_WORK_DIR - 设置为工作目录 (需要有足够大空间的位置)
如果你使用的是 BASH shell,则需要执行 source ${NF_ROOT}/lib/bin/nf_profile 命令。
如果你使用的是 CSH shell,则需要执行 source ${NF_ROOT}/lib/bin/nf_cshrc 命令。
注意:请确保这两个文件中的设置与你自己的环境配置相符。**默认设置是无效的!**
4. 仿真
要对你的设计进行仿真,有几个库可以提供帮助。请查看 reference_router/verif/test_router_full 目录,了解如何使用 perl 库函数。要创建你自己的测试平台,请复制某个 test_* 目录,并确保其名称由三部分组成 test_major_minor。然后,你可以根据自己的需要修改 make_pkts 文件。
使用的 Perl 库位于 lib/Perl5 目录。你可以在项目的 verif/src 目录中添加自己的库。
要运行仿真,请使用以下命令:
nf_run_test.pl --major x --minor y
要启动图形界面运行,请添加 --gui 选项。输入 nf_run_test.pl --help 查看完整详情。
注意:coregen 需要 X Window 系统。如果要构建 IP 核(例如,首次仿真或实现设计时),请确保你是在图形控制台中运行。
5. 实现
要实现你的设计,请切换到 synth 目录并输入 make 命令。如果一切顺利,你最终会得到一个 nf2_top_par.bit 文件,可以用来下载到 FPGA。
如果出现问题,请确保 synth 目录中存在用户生成的 IP 核所需的所有 .xco 文件。务必查看 nf2_top_par.twr 文件,确认你的设计已通过时序检查。同时注意遵守上文第 4.0 节中的说明。
6. 运行硬件
要运行硬件,需要两个步骤:
1- 加载内核模块
2- 下载 .bin 文件
* 6.1 内核驱动
1- 切换到 lib/C/kernel 目录,输入 make 命令。
2- 以 root 身份,输入 insmod nf2.ko 命令。
如果一切顺利,执行 ifconfig -a 命令时,你应该会看到 nf2c0、nf2c1、nf2c2 和 nf2c3 接口。如果没有,请检查板卡是否正确插入,并查看 lspci 命令是否能识别该设备。
* 6.2 下载
1- 切换到 lib/C/download 目录,输入 make 命令。
2- 以 root 身份,输入 nf_download /path/to/nf2_top_par.bin 命令。
大功告成!你的硬件设计已加载到设备上,应该可以工作了。可以浏览 lib/C/switch、lib/C/router 和 lib/C/tools 目录下的工具,这些工具可用于与真实硬件进行交互。
7. 联系方式
公共讨论论坛: http://netfpga.org/forums/
电子邮件: info@netfpga.org