安路FPGA开发入门:软件安装与点灯与仿真(TangDynasty & ModelSim)_tangdynasty软件
文章目录
- 前言
- 软件安装
-
- 开发软件
- 仿真软件
- 点灯测试
-
- 代码编写与编译
- 引脚分配
- 固件下载
- 仿真测试
-
- ModelSim添加仿真库
- TangDynasty仿真设置
- 进行仿真
- 后记
前言

最近因为工作需要用安路的FPGA,这里对安路FPGA开发相关流程做个记录。作为测试只需要一个核心板(我这里用的 EF2L45LG144B )和下载器( AL-LINK ,我这里是核心板上板载的)。
安路的所有软件和资料都可以在官网上下载到,不过因为权限问题,有些内容可能需要发邮箱给安路申请提升权限:
https://www.anlogic.com/
软件安装
开发软件
安路FPGA开发软件是 TangDynasty ,这里使用下面版本,另外还需要下载 license :

之前碰到过笔记本离电性能平衡模式下怎么样装都装不成功,插电高性能下安装就一点都没问题,不知道是不是安装程序哪里有超时机制处理不当的BUG什么的。
软件安装后需要手动把下载的 license 放到安装目录对应位置下(这个许可是过段时间就过期,需要重新下载替换,可以用文本方式查看到有效期限):

软件安装后安装目录对应位置下有下载器的驱动,下载器连接电脑后可能需要手动更新驱动才会正常:

软件安装后可以打开软件找到软件手册:

这个手册基本上用到的东西都有介绍了,熟悉FPGA开发的人直接看这个就能用起来了。
仿真软件
ModelSim-英特尔® FPGAs 标准版软件版本:
https://www.intel.cn/content/www/cn/zh/software-kit/750666/modelsim-intel-fpgas-standard-edition-software-version-20-1-1.html

点灯测试
这里直接就点灯进行测试了。
代码编写与编译
首先新建文件:

编写代码如下:
module blink(clk, led);input clk;output reg led = 0;reg [31:0] counter = 0;always@(posedge clk)if (counter == 5_000_000)counter <= 0; else counter <= counter + 1; always@(posedge clk) if (counter == 5_000_000) led <= !led;endmodule
我的板子上有个 10MHz 的时钟输入到芯片,我拿它设置了个500ms的计数器,每次计数溢出时翻转一次外接LED的端口电平,实现LED闪烁效果。
运行编译:

引脚分配
没有报错的话分配下IO口:

另外未用到的IO口状态可以在下面地方统一设置(默认通常是上拉输入的):

固件下载
设置IO口后重新运行编译,成功后可以下载比特流( .bit )文件到芯片中看到LED闪烁效果:

下载时选择 JTAG ,掉电后就会失效;选择 PROGRAM FLASH 掉电后也不会失效。
这里有点问题,官方说 PROGRAM FLASH 是下载到外部Flash, PROGRAM INTERNAL FLASH 是下载到芯片内置的Flash中,我的芯片按理说是选用后者才对,但我这里后面的选项不可选,并且选择前面的也可以正常使用。
仿真测试
TangDynasty 使用 ModelSim 仿真可以参考软件手册或者也可以参考下面文章:
https://chipdebug.com/forum-post/55252.html
下面步骤中在 ModelSim添加仿真库 后其实就直接可以在 ModelSim 中进行仿真了,这个可以参考上面资料。这里介绍的是通过 TangDynasty 生成仿真脚本来进行仿真。
ModelSim添加仿真库
ModelSim添加仿真库理论上对于源码和库目录大概是没有硬性要求的,这里参考上面资料的方式进行介绍。
首先在ModelSim目录中新建存放安路器件源码和模块库的目录,并从TangDynasty安装目录中拷贝源码到这里:

需要注意的是如果在上面目录中新建和拷贝需要权限的话,下面打开ModelSim需要以管理员方式打开,否则建立文件等会失败。
启动 ModelSim ,选择 File > Change Directory 将路径转到 anlogic 文件夹下。然后选择 File > New > Library 下新建库:

选择 Compile → Compile 进行编译:

编译完成后可以看到模块和相关文件:

TangDynasty仿真设置
TangDynasty可以生成ModelSim用的放在脚本,但是需要进行一些设置。
Process > Properties >




进行仿真
首先根据实际需求在 Process > Properties 设置模块库目录以及仿真时间和精度:

然后准备测试脚本,比如这里用 blink_tb.v ,测试脚本内容如下:
`timescale 1ns/1ns // 仿真时间尺度和精度module blink_tb();reg sig_clk;wire sig_led;blink blink_inst(.clk(sig_clk),.led(sig_led));initial sig_clk = 0; // 设置初值always #50 sig_clk = ~sig_clk; // 每 50*1ns 翻转一次sig_clk(即10MHz信号)initial begin // 开始执行#2_000_000_000; // 延时 2_000_000_000 纳秒(即 2000ms 或 2秒钟)$stop; // 停止执行endendmodule
TangDynasty中运行到不同的步骤可以执行不同发仿真:
当 HDL2Bit Flow 运行至 Read Design 这一步时,可执行 Behavioral Simulation;
当 HDL2Bit Flow 运行至 Optimize RTL 这一步时,可执行 Post-RTL Simulation;
当 HDL2Bit Flow 运行至 Optimize Gate 这一步时,可执行 Post-Gate Simulation;
当 HDL2Bit Flow 运行至 Optimize Routing 这一步时,可执行 Post-Route Simulation。
例如下面:

接着选择 Tool > Simlation 添加测试脚本:

添加后会生成仿真脚本,注意检查相关内容,如果不对可以在这里直接修改,需要注意的是 -voptargs=+acc 这行:

之后就可以在ModelSim中进行仿真了,首先切换目录:

然后输入命令开始执行仿真:

仿真结果如下:

后记
TangDynasty 整体使用还是比较简单的,只有使用ModelSim来仿真稍稍会麻烦些,但也不算特别麻烦。


