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

news2025/3/4 17:22:31

文章目录

  • 前言
  • 软件安装
    • 开发软件
    • 仿真软件
  • 点灯测试
    • 代码编写与编译
    • 引脚分配
    • 固件下载
  • 仿真测试
    • 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;          // 停止执行
	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来仿真稍稍会麻烦些,但也不算特别麻烦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2309588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅克隆与深克隆区别

package d12_api_object;public class Test2 {public static void main(String[] args) throws CloneNotSupportedException {//目标&#xff1a;掌握Object类提供的对象克隆方法//1、protected Object clone():对象克隆User u1 new User(1,"min","1120",…

如何实现小数据的大智能?

大数据可以通过从态到势、从感到知的态势感知过程计算出可能性&#xff0c;如各种大模型&#xff0c;而要通过小数据、小样本获得好的预测结果&#xff0c;可以通过从势到态、从知到感的势态知感过程算计出可能性。 一般情况下&#xff0c;大家常常会提到了大数据和小数据在态势…

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Docker引擎停止三、解决方法 1、检查服务是否…

基于单片机和蓝牙通讯的简易钢琴控制装置设计

摘要&#xff1a;本文设计了一个基于单片机和蓝牙通讯的简易钢琴演奏控制装置&#xff0c;在 Proteus 中设计绘制了系统电路原理图&#xff0c;在 Keil 中编写了单片机控制程序并导入 Proteus电路原理图中进行了软、硬件交互仿真&#xff0c;设置了手机蓝牙串口调试的键盘设置及…

React Native从入门到进阶详解

React Native知识框架从入门到进阶的问题。首先需要结合我搜索到的资料来整理出结构化的内容。证据中有多本书籍和文章&#xff0c;可能会涉及不同的章节和重点&#xff0c;需要仔细梳理。 首先&#xff0c;根据邱鹏源的《React Native精解与实战》将知识分为入门和进阶两大部分…

STL——list的介绍和模拟实现

前言 本篇博客我们将要开始介绍list这个容器&#xff0c;list是带头双向循环链表&#xff0c;STL标准模板库中实现了list这样方便我们去使用&#xff0c;那么本篇博客我们将脱下list的神秘外衣&#xff0c;介绍它的使用以及模拟实现。 list的介绍 list的底层是带头双向循环链…

go前后端开源项目go-admin,本地启动

https://github.com/go-admin-team/go-admin 教程 1.拉取项目 git clone https://github.com/go-admin-team/go-admin.git 2.更新整理依赖 go mod tidy会整理依赖&#xff0c;下载缺少的包&#xff0c;移除不用的&#xff0c;并更新go.sum。 # 更新整理依赖 go mod tidy 3.编…

go 分布式redis锁的实现方式

go 语言以高并发著称。那么在实际的项目中 经常会用到锁的情况。比如说秒杀抢购等等场景。下面主要介绍 redis 布式锁实现的两种高并发抢购场景。其实 高并发 和 分布式锁 是一个互斥的两个状态&#xff1a; 方式一 setNX&#xff1a; 使用 redis自带的API setNX 来实现。能解决…

深入理解递归:从原理到C++实践

什么是递归&#xff1f; 递归&#xff08;Recursion&#xff09;是编程中一种强大的技术&#xff0c;其核心思想是&#xff1a;函数直接或间接地调用自身。如同俄罗斯套娃一般&#xff0c;每个函数调用都会解开问题的一个层级&#xff0c;直到达到基础条件。 递归三要素&…

MyBatis-Plus 入门详解:从零搭建高效持久层

一、MyBatis-Plus 简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是 MyBatis 的增强工具&#xff0c;在保留 MyBatis 原生功能的基础上&#xff0c;提供了全自动化的 CRUD 操作、强大的分页插件、代码生成器等功能&#xff0c;显著减少开发工作量。与原生 MyBatis 相比&…

阿里云物联网获取设备属性api接口:QueryDevicePropertyData

阿里云物联网接口&#xff1a;QueryDevicePropertyData 说明&#xff1a;调用该接口查询指定设备或数字孪生节点&#xff0c;在指定时间段内&#xff0c;单个属性的数据 比如提取上传到物联网的温度数据 api文档&#xff1a;QueryDevicePropertyData_物联网平台_API文档-阿里…

歌曲分类和流行度预测

1. 项目介绍 本项目从kaggle平台上下载了数据集&#xff0c;该数据集包含了3万多首来自Spotify API 的歌曲&#xff0c;共有23个特征。首先对数据集进行预处理&#xff0c;如重复行、缺失值、标准化处理等。再对预处理后的数据进行探索性分析&#xff0c;观察各变量的分布情况&…

不重启mysql情况下排查慢SQL

查状态 mysql> show variables like %slow_query_log%; 开启慢日志 mysql> set global slow_query_logON; 设置1s超时 mysql> set global long_query_time1; 如果想更小&#xff0c;可以设置0.5 查看慢SQL的日志 cat /var/lib/mysql/localhost-slow.log &…

27、Java 反射机制

15-1 Java 反射机制概述 Reflection&#xff08;反射&#xff09;是被视为动态语言的关键 动态语言&#xff1a;在运行时代码可以根据某些条件改变自身结构。如 C#\JavaScript\PHP 静态语言&#xff1a;运行时结构不可变的语言。如 Java\C\C 问题&#xff1a;通过直接new的方…

Android 端侧运行 LLM 框架 MNN 及其应用

MNN Chat Android App - 基于 MNN 引擎的智能聊天应用 一、MNN 框架简介与工作原理1.1 什么是 MNN&#xff1f;1.2 MNN 的工作原理 二、MNN Chat Android App2.1 MNN Chat 的功能2.2 MNN Chat 的优势2.3 MNN Chat Android App 的使用 三、总结 随着移动端人工智能需求的日益增长…

FPGA学习(一) —— 四位全加器

FPGA学习&#xff08;一&#xff09; —— 四位全加器 文章目录 FPGA学习&#xff08;一&#xff09; —— 四位全加器一、半加器1、半加器的真值表2、Verilog代码实现3、RTL原理图4、波形仿真 二、一位全加器1、一位全加器真值表2、Verilog代码实现3、RTL原理图4、波形仿真 三…

PHP:IDEA开发工具配置XDebug,断点调试

文章目录 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…

LINUX网络基础 - 网络编程套接字,UDP与TCP

目录 前言 一. 端口号的认识 1.1 端口号的作用 二. 初识TCP协议和UDP协议 2.1 TCP协议 TCP的特点 使用场景 2.2 UDP协议 UDP的特点 使用场景 2.3 TCP与UDP的对比 2.4 思考 2.5 总结 三. 网络字节序 3.1 网络字节序的介绍 3.2 网络字节序思考 四. socket接口 …

QT实现单个控制点在曲线上的贝塞尔曲线

最终效果: 一共三个文件 main.cpp #include <QApplication> #include "SplineBoard.h" int main(int argc,char** argv) {QApplication a(argc, argv);SplineBoard b;b.setWindowTitle("标准的贝塞尔曲线");b.show();SplineBoard b2(0.0001);b2.sh…

Linux基础开发工具(vim编译器,yum与apt软件安装)

Linux 下载安装软件的方案 源代码安装-》》》非常麻烦与复杂一步错步步错 rmp包安装 -》》》只是安装没有对应的库与依赖相当于只是一个外壳 包管理器进行安装-》》 yum / apt(本篇重点讲解) 1.什么是软件包和软件包管理器 就好⽐ "App" 和 "应⽤商店"…