【FPGA开发】Modelsim和Vivado的使用
本篇文章包含的内容
- 一、FPGA工程文件结构
- 二、Modelsim的使用
- 三、Vivado的使用
- 3.1 建立工程
- 3.2 分析 RTL ANALYSIS
- 3.2.1 `.xdc`约束(Constraints)文件的产生
- 3.3 综合 SYNTHESIS
- 3.4 执行 IMPLEMENTATION
- 3.5 烧录程序
- 3.6 程序固化
- 3.6.1 SPI约束
- 3.6.2 `.bin`文件的产生
- 3.6.3 `.mcs`文件的产生
- 3.6.4 添加配置的存储器件并配置固化文件
笔者在这里使用的Vivado软件版本是Vivado 2020.2,据说该版本比较稳定。参考的课程是正点原子的课程手把手教你学达芬奇&达芬奇Pro之FPGA开发篇。文章未完成,但是会不定期补充完善,笔者学到新的Vivado使用技巧和操作也会更新到此文章中,如果篇幅过大就单独写一篇文章说明。
一、FPGA工程文件结构
首先说明一下FPGA工程的文件结构,一个科学的文件结构对于工程的管理和维护是十分重要的。笔者使用的文件结构如下:
- Doc:存放说明性文件,例如模块功能框图,芯片的参考手册,波形图,README文件等。
- Sim:存放仿真相关文件,例如TestBench文件,Modelsim工程文件夹使用的仿真模块等。
- TB:存放TestBench文件。
- 存放Modelsim仿真的文件等。
- Rtl:存放工程中所有模块的Verilog源码(RTL代码)。
- Prj:Vivado工程文件夹。
二、Modelsim的使用
较为简单,暂略,之后有时间再补充。
三、Vivado的使用
3.1 建立工程
- 工程的名字一般和顶层模块的名称保持一致,将工程文件的位置确定为
Prj文件夹后取消勾选Create project subdirectory。 - 选择RTL Project。
- 添加RTL源文件(Verilog代码)。
- 添加约束文件(可以在工程内手动添加)。
- 选择FPGA芯片型号(达芬奇为xc7a35tfgg484-2)。
3.2 分析 RTL ANALYSIS
点击Open Elaborated Design对代码进行RTL分析。在右上角的菜单中可以原则不同的分析视图:
- Default Layout:打开默认布局(代码的逻辑原理图)。
- I/O Planning:IO管脚约束,打开之后可以在下面的
IO Ports窗口约束管脚及对应的电平标准。按快捷键Ctrl+s保存后会弹出一个窗口,要求建立管脚约束的.xdc文件。.xdc文件的文件名一般和顶层模块名(工程名)保持一致。.xdc文件也可以自己编写,利用相关资料直接在该文件中写约束管脚的代码实现的效果是一模一样的。 - Floorplanning
分配完IO管脚约束之后就可以点击生成比特流文件了,点击后自动完成综合(Synthesis)和执行(Implementation)操作。
3.2.1 .xdc约束(Constraints)文件的产生
.xdc约束文件可以由上面的方法产生,也可以在Source窗口直接点击鼠标右键产生。
3.3 综合 SYNTHESIS
所谓综合,就是将Verilog的逻辑代码对应到FPGA的底层硬件的操作。在分析(RTL Analysis)中打开的原理图是一个抽象出的原理图,而在综合中打开的原理图是和FPGA的硬件资源直接相关的原理图。
3.4 执行 IMPLEMENTATION
在执行(Implementation)中可以查看实际的硬件电路连接图。
3.5 烧录程序
点击PROGRAM AND DEBUG中Open Hardware Manager中的Open Target进行自动连接,Vivado会自动识别生成的比特流文件.bit。点击下载Program即可下载程序。
3.6 程序固化
通过3.5的在线烧录的方法是无法将程序烧录到板卡上去的,只有将编译好的程序烧录到开发板上的 QSPI Flash 中,程序才能上电后自动执行。QSPI中的Q是指该芯片的数据线有4位,分别是DQ0~DQ3。达芬奇上的Flash除了可以存储程序外,还可以存储一些用户数据。
固化烧录文件主要分为以下两种,它们都可以由比特流文件.bit产生:
.bin文件:一般由Vivado软件编译产生,存储在特定目录下的二进制文件.mcs文件:一般通过Vivado GUI界面操作或TCL命令生成,.mcs文件里包含了.bin文件的内容,除此之外,每行的开始有地址信息,最后一个Byte是CRC校验信息。
3.6.1 SPI约束
对于达芬奇开发板而言,在工程的.xdc文件中添加以下约束以加快上电后的程序读取速度。
# SPI Configuration
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
set_property CONFIG_MODE SPIx4 [current_design]
set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design]
set_property CFGBVS VCCO [current_design]
set_property CONFIG_VOLTAGE 3.3 [current_design]
# 所有未使用的引脚都上拉
# set_property BITSTREAM.CONFIG.UNUSEDPIN PULLUP [current_design]
3.6.2 .bin文件的产生
在Settings中找到Bitstream,勾选-bin_file按钮即可在每次生成比特流文件.bit后生成对应的.bin文件。生成的两个文件可以在以下目录中找到:
../Prj/project_name.runs/impl_1/
3.6.3 .mcs文件的产生
点击菜单栏中的Tools,点击Generate Memory Configuration File…打开以下窗口:

3.6.4 添加配置的存储器件并配置固化文件
打开Open Hardware Manager并连接好器件后,点击菜单栏中的Tools,点击Add Configuration Memory Device并选择器件型号,打开以下窗口:

依次选择制造商,大小,通信种类和位宽,下面的搜索栏中就会出现对应的器件。在这里(达芬奇)出现的两个器件,上面的是3.3V的,下面的是1.8V的,故选择上面的即可。
选择OK后,跟随引导窗口配置固化文件。如果没有跳出窗口,也可以在Hardware窗口右击选择Program Configuration Memory Device…打开配置窗口:

选择任意方式生成的固化文件均可,选择后其他选项保持默认(擦除,下载程序并校验)点击OK就会自动开始下载,重启开发板电源即可看到对应的程序现象。如果只需要擦除就仅选择Erase即可。
持续不定期更新完善中……
原创笔记,码字不易,欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、FPGA方面的学习笔记。
相关文章:
【FPGA开发】Modelsim和Vivado的使用
本篇文章包含的内容 一、FPGA工程文件结构二、Modelsim的使用三、Vivado的使用3.1 建立工程3.2 分析 RTL ANALYSIS3.2.1 .xdc约束(Constraints)文件的产生 3.3 综合 SYNTHESIS3.4 执行 IMPLEMENTATION3.5 烧录程序3.6 程序固化3.6.1 SPI约束3.6.2 .bin文…...
现代浏览器对 es模块 【esm】原生支持
现代浏览器对 ES(ECMAScript)模块的原生支持是指浏览器可以直接解析和执行 JavaScript 文件中的 ES 模块语法,无需额外的工具或转换。 具体来说,当浏览器遇到 import 和 export 关键字时,会将其识别为 ES 模块语法&…...
修改SpringBoot中默认依赖版本
例如SpringBoot2.7.2中ElasticSearch版本是7.17.4 我希望把它变成7.6.1...
网络安全最典型基础靶场-DVWA-本地搭建与初始化
写在前面: 之前也打过这个 DVWA 靶场,但是是在虚拟机环境下的一个小块分区靶场; 本篇博客主要介绍在本地搭建 DVWA 靶场以及靶场的初始化,后续会陆续更新通关教程。 由于我们是在本地搭建,则需要基于你已经装好 phpstu…...
算法-----高精度2(高精度乘法,高精度除法,高精度斐波那锲数列)
高精度乘法 对于高精度乘法来说似乎不像高精度加减法那样简单了,我们似乎得一个一个加了,因为我们都知道 abaaaaa…a(b个a)。如果真要这要的话那1e9*1e9不得超时啊,所以不能这样,我们还是得从乘法竖式入手 这样看似乎看不出来什…...
windows vs 自己编译源码 leveldb 然后使用自己编译的文件
1 准备源码文件 1.1 第一种方法 git下载源码 vs项目中git leveldb源码和git third_party googletest-CSDN博客 1.2 第二种方法 手动下载 然后把第三方的源码下载 复制到 third_party 对应的文件夹中 没有文件夹 third_party -> powershell mkdir third_party 2 编译lev…...
基于GPT一键完成数据分析全流程的AI Agent: Streamline Analyst
大型语言模型(LLM)的兴起不仅为获取知识和解决问题开辟了新的可能性,而且催生了一些新型智能系统,例如旨在辅助用户完成特定任务的AI Copilot以及旨在自动化和自主执行复杂任务的AI Agent,使得编程、创作等任务变得高效…...
C语言-----习题
1.通过这个例题,我们可以知道*p.a是无法打印99的,因为.的优先级比解引用*高; struct S {int a;int b; }; int main() {struct S a, * p &a;//可以分为两部分理解//struct S a;//struct S *p &a;a.a 99;printf("%d\n"…...
Java学习笔记(五)
目录 一、控制结构 1.1 顺序控制 1.2 分支控制 (一)单分支 (二)双分支 (三)多分支 (四)嵌套分支 (五)switch分支 1.3 循环控制 (一&…...
4.【Linux】进程控制(进程终止||进程等待||程序替换)
一.进程创建fork 见上篇文章 二.进程的终止 1.进程退出场景 1.代码运行完毕,结果正确,通过main函数退出码返回一般为0。 2.代码运行完毕,结果不正确,通过不同的退出码标识不同的错误原因。 3.代码异常终止(信号&am…...
微服务设计:Spring Cloud 链路追踪概述
Spring Cloud 链路追踪是指在分布式系统中追踪请求路径的技术。它可以帮助开发者了解请求在各个微服务之间是如何流转的,以及每个微服务处理请求所花费的时间。链路追踪可以用于解决以下问题: 性能分析: 识别性能瓶颈,优化微服务性能。故障排…...
【MySQL/Redis】如何实现缓存一致
目录 不实用的方案 1. 先写 MySQL , 再写 Redis 2. 先写 Redis , 再写MySQL 3. 先删 Redis,再写 MySQL 实用的方案 1. 先删 Redis,再写 MySQL, 再删 Redis 2. 先写 MySQL , 再删 Redis 3. 先写MySQL,通过BinLog࿰…...
Socket.D 开源输传协议 v2.4.0 发布
Socket.D 协议 是基于"事件"和"语义消息""流"的网络应用层传输协议。有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http”。支持 tcp, udp, ws, kcp 传输。协议特点可参考《官网介绍》。 pyton 已开发完…...
单片机学习笔记---AT24C02数据存储
目录 AT24C02数据存储 准备工作 代码讲解 I2C.c 模拟起始位置的时序 模拟发送一个字节的时序 模拟接收应答的时序 模拟接收一个字节的时序 模拟发送应答的时序 模拟结束位置的时序 I2C.h AT24C02.c 字节写:在WORD ADDRESS(字地址ÿ…...
首次安装Mysql数据库
1、在mysql官网下载自己需要的版本 2、选择安装类型 3、 检查一下需求版本 4、 这里可能会弹出如下信息,先不用管这一步,点击Yes继续即可 5、 安装需要的环境,点击执行就可以,此过程会比较慢 如下就是全面安装完成了,点击next即可...
2024 前端面试题(GPT回答 + 示例代码 + 解释)No.1 - No.20
本文题目来源于全网收集,答案来源于 ChatGPT 和 博主(的小部分……) 格式:题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 目录 No.1 - No.20 本文题目来源于全网收集,答案来源于…...
通过`ssh`同步`tmux`剪贴板内容
通过ssh同步tmux剪贴板内容 通过ssh连接远程服务器时,可以通过xclip同步tmux剪贴板内容。这需要在服务器上安装xclip,且需要在ssh远程连接时开启X11。 此处附tmux剪贴板调用xclip的配置: # Copy the current buffer to the system clipboa…...
HTTP 响应状态代码
HTTP 响应状态代码 HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。 响应分为五类: 信息性回复 ( 100 – 199)成功响应 ( 200 – 299)重定向消息 ( 300 – 399)客户端错误响应 ( 400 – 499)服务器错误…...
[OPEN SQL] 新增数据
INSERT语句用于数据的新增操作 本次操作使用的数据库表为SCUSTOM,其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 1.插入单条数据 语法格式 INSERT <dbtab> FROM <wa>. INSERT INTO <dbtab> VALUES <wa>. INSERT &…...
OpenHarmony—UIAbility组件生命周期
概述 当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会经过UIAbility实例的创建和销毁,…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
elementUI点击浏览table所选行数据查看文档
项目场景: table按照要求特定的数据变成按钮可以点击 解决方案: <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...
