|
AGM的FPGA芯片开发流程总结时间:2023-02-06 AGM的FPGA和CPLD开发涉及两个工具:Quartus和Supra,前者大家很熟悉了,用来完成综合,后者为AGM的私有工具,用来完成布局布线,核心是一个叫做af.exe的命令行软件。 Quartus和Supra的桥梁:simulation\modelsim目录 仔细观察可以发现,AGM的工程目录中有个特殊的目录:simulation\modelsim,里面有一些.vo文件,关于.vo文件的定义可以看这里。.vo文件是个文本文件,可以打开,打开以后发现就是一些Verilog代码,可以理解成网表。Quartus编译是为了输出这些.vo文件,而Supra需要这些.vo文件作为输入。 知道这一点,开发过程就会清晰很多:
Quartus中需要设置什么器件 对于替换型号,Altera和AGM有对应的芯片,在Quartus中选择对应芯片即可,比如AG10KL144可以选择EP4CE10,然而对于AG1280Q48这样的芯片,Altera并没有对应的型号,应该选择什么芯片呢?实际上可以随便选择,选择一个容量接近或者更大的型号即可,因为Quartus只是用来综合,生成simulation\modelsim目录下的.vo文件,并不涉及布局布线,像器件选择,还有管脚分配这样的操作都没有意义。 af_quartus.tcl脚本的作用 AGM的教程包括Supra软件都会提到这个脚本,需要在Quartus中运行,目前该脚本的作用主要由两个,
实际上编译过程用户在Quartus中按Ctrl+L进行即可,没有必要放到这个脚本中。Quartus中也没有必要进行布局布线,不过我试了下按Ctrl+K分析和综合不会生成.vo文件,所以还是要按Ctrl+L进行一次完成的编译。 还有需要注意的一点是这个脚本会重写.qsf文件,重新运行这个脚本的时候,用户在Quartus中的一些设置会被冲掉,比如添加了某个verilog源文件,重新运行这个脚本就被冲掉了,编译会报错找不到对应的verilog模块。解决方法就是再次在Quartus中添加对应的verilog文件。af_quartus.tcl这个脚本只需要在新建工程后运行一次即可,不需要每次都运行,如果你使用版本控制,.qsf文件也建议加入版本控制。 编译和下载脚本化 开发过程中,要多次编译、下载,这些都是在Supra中进行的,实际上Supra也是调用了af.exe执行了一些命令,用户完全可以不用Supra,直接调用af.exe,如果你熟悉Linux,并且在Windows上使用MSYS2这样的命令行,可以编写两个脚本将以上过程脚本化 构建脚本build.sh: #!/bin/sh echo "setup envirenment variable..." #export PATH="/d/EE/FPGA/AGM/Supra-2022.06.b0-454528eb-win64-all/bin:$PATH" . supra_vars.sh af.exe -B --batch --mode QUARTUS -X "set QUARTUS_SDC true" -X "set FITTING timing_more" -X "set FITTER hybrid" -X "set EFFORT highest" -X "set HOLDX default" -X "set SKEW basic" 下载脚本download.sh: #!/bin/sh echo "setup envirenment variable..." . supra_vars.sh if [ $# -eq 1 ]; then case $1 in sram) echo "Program SRAM of AG1280Q48" af.exe -B -X "set blaster_id 0" -X "source -progress 1000 Blink_AG1280_sram.prg" ;; flash) echo "Program FLASH of AG1280Q48" af.exe -B -X "set blaster_id 0" -X "source -progress 1000 Blink_AG1280_hybrid.prg" ;; erase) echo "Erase FLASH of AG1280Q48" af.exe -B -X "set blaster_id 0" -X "set bitgen_usb_speed 3000" -X "exit [catch {erase_flash}]" ;; esac else echo "Usage $0 [sram|flash|erase]" fi 注意代码中的supra_vars.sh用来设置环境变量,让shell可以找到af.exe,也可以直接设置全局的环境变量。 |