安路FPGA开发入门:软件安装与点灯与仿真(TangDynasty & ModelSim)

发布于:2025-03-04 ⋅ 阅读:(15) ⋅ 点赞:(0)

前言

在这里插入图片描述
最近因为工作需要用安路的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;          // 停止执行
	end

endmodule

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来仿真稍稍会麻烦些,但也不算特别麻烦。


网站公告

今日签到

点亮在社区的每一天
去签到