文章目录
开发环境搭建好了和快捷命令都知道,那接下来就要掌握OpenFPGA的设计流程,这里从官方提供的Demo入手,学习如何使用OpenFPGA。
一、生成 Fabric 网表
目的:根据 FPGA 架构描述文件和基准电路生成 对应 Fabric 的 Verilog 网表。
1.1 准备 Task 配置文件
OpenFPGA 通过task进行设计流程运行,而每个task都通过 task.conf 配置文件进行配置,现在打算运行的Demo 是 generate_fabric
,所在目录为 OpenFPGA/openfpga_flow/tasks/basic_tests/generate_fabric
在config目录下有该 task 的配置文件,
- 第20行指定所要执行的openfpga shell 脚本
- 第21行指定 Fabric 的架构描述文件
这里都已经指定好,不用修改,直接用就行。
1.2 运行 Task
在完成配置文件的编辑后,在OpenFPGA根目录下调用 python 脚本来运行任务,输入参数是 task 所在路径(相对路径,相对于 TASK_DIRECTORY):
python3 openfpga_flow/scripts/run_fpga_task.py basic_tests/generate_fabric
在 task 所在路径下会生成两个文件夹,latest是链接符号,链接到最后一次运行所生成的输出文件夹,此次运行结果保存在 run001。
Verilog网表保存在下述路径中:
${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/generate_fabric/latest/k6_frac_N10_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH/SRC
此Veirlog 网表可以作为其他工具的输入,如布局工具。
1.3 运行 icarus iVerilog 编译
进行对应的目录:
cd ${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/generate_fabric/latest/k6_frac_N10_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH
使用iVerilog 命令编译:
iverilog SRC/fabric_netlists.v
生成 a.out 文件(暂时还不知道有什么用,之后知道了进行更新)
二、从Verilog到 验证(Verification)
目的:
- 先根据输入的FPGA架构文件和基准电路,生成对应的 Fabric Verilog 网表文件
- 再生成对应的 Verilog testbench 进行行为仿真,验证所实现的 Fabric 的正确性
2.1 自动编译仿真
这里测试的demo,FPGA架构是基于LUT-4的,然后基准电路为 2输入与门。
python3 openfpga_flow/scripts/run_fpga_task.py basic_tests/full_testbench/configuration_chain
输出的 Verilog 网表文件和 Testbench 都在下述路径中:
${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/full_testbench/configuration_chain/latest/k4_N4_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH/SRC/
然后进行 icarus iVerilog 仿真
刚刚所运行的 task 实际上已经完成了iVerilog 仿真,仿真结果放在:
${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/full_testbench/configuration_chain/latest/k4_N4_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH/vvp_sim_output.txt
出现 Simulation Succeed
就表示验证通过。
所有的波形都保存在 and2_formal.vcd
文件中。可以通过 GTKWave 查看波形。
GTKWave 安装:
sudo apt-get install GTKWave
然后输入:
gtkwave ${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/full_testbench/configuration_chain/latest/k4_N4_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH/and2_formal.vcd &
2.2 手动仿真
手动进行仿真步骤如下:
cd ${OPENFPGA_PATH}/openfpga_flow/tasks/basic_tests/full_testbench/configuration_chain/latest/k4_N4_tileable_40nm/and2/MIN_ROUTE_CHAN_WIDTH
source iverilog_output.txt
vvp compiled_and2
三、从 Verilog 到 GDSII
生成的Verilog 网表可以通过半定制流程生成 GDSII,在这里由于使用的半定制工具是商业工具,所以脚本没有开源出来。但开发流程还是一致的:
输入Verilog 网表,即.v文件,进行布局,然后进行时钟树综合,再布线,最后进行Signoff。
开发者 Dr.Xifan Tang 在文档给了使用 Cadence Innovus工具所生成的最后版图图片:
四、总结
通过运行 task demo,发现可以通过编写脚本,实现输入FPGA架构描述文件,基准电路等配置参数,很快的生成对应的 Fabric Verilog网表和Testbench,并进行自动仿真验证。生成的Verilog网表也可以作为半定制流程工具的输入,最终得到signoff的版图。