文章
  • 文章
搜索
首页 >> 技术文档 >>转帖专区 >> AGM的FPGA芯片开发流程总结
详细内容

AGM的FPGA芯片开发流程总结

时间:2023-02-06     作者:Xiao Dong【转载】   来自:知乎

AGM的FPGA和CPLD开发涉及两个工具:Quartus和Supra,前者大家很熟悉了,用来完成综合,后者为AGM的私有工具,用来完成布局布线,核心是一个叫做af.exe的命令行软件。

Quartus和Supra的桥梁:simulation\modelsim目录

仔细观察可以发现,AGM的工程目录中有个特殊的目录:simulation\modelsim,里面有一些.vo文件,关于.vo文件的定义可以看这里。.vo文件是个文本文件,可以打开,打开以后发现就是一些Verilog代码,可以理解成网表。Quartus编译是为了输出这些.vo文件,而Supra需要这些.vo文件作为输入。

知道这一点,开发过程就会清晰很多:

  1. 如果verilog源代码修改了,那么需要在Quartus中重新编译更新.vo文件,然后在Supra中重新编译

  2. 如果只是修改管脚分配这样的操作,不需要重新在Quartus中编译,直接修改.asf文件中的管脚分配,在Supra中重新编译即可

Quartus中需要设置什么器件

对于替换型号,Altera和AGM有对应的芯片,在Quartus中选择对应芯片即可,比如AG10KL144可以选择EP4CE10,然而对于AG1280Q48这样的芯片,Altera并没有对应的型号,应该选择什么芯片呢?实际上可以随便选择,选择一个容量接近或者更大的型号即可,因为Quartus只是用来综合,生成simulation\modelsim目录下的.vo文件,并不涉及布局布线,像器件选择,还有管脚分配这样的操作都没有意义。

af_quartus.tcl脚本的作用

AGM的教程包括Supra软件都会提到这个脚本,需要在Quartus中运行,目前该脚本的作用主要由两个,

  1. 设置Quartus的.qsf文件,比如要输出simulation\modelsim里的.vo文件就要在.qsf文件中设置

  2. 编译Quartus工程,生成.vo文件

实际上编译过程用户在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,也可以直接设置全局的环境变量。



关于我们

品牌中心

产品中心

新闻动态

咨询热线:13661545024(全国技术销售热线)

上海天晨芯科技有限公司

销售邮箱:sales@chipmorn.com

技术邮箱:jun.yao@chipmorn.com

公司地址:上海浦东新区东方路1365号5号楼

seo seo