【FPGA开发】Modelsim和Vivado的使用

news2024/9/24 3:19:22

本篇文章包含的内容

  • 一、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 建立工程

  1. 工程的名字一般和顶层模块的名称保持一致,将工程文件的位置确定为Prj文件夹后取消勾选Create project subdirectory
  2. 选择RTL Project
  3. 添加RTL源文件(Verilog代码)。
  4. 添加约束文件(可以在工程内手动添加)。
  5. 选择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 DEBUGOpen 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方面的学习笔记。


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

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

相关文章

【GAMES101】Lecture 19 透镜

目录 理想的薄透镜 模糊 利用透镜模型做光线追踪 景深(Depth of Field) 理想的薄透镜 在实际的相机中都是用的一组透镜来作为这个镜头 这个因为真实的棱镜无法将光线真正聚焦到一个点上,它只能聚在一堆上 所以方便研究提出了一种理想化的…

vue的8大生命周期

第072个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 提供vue2的一些基本操作:安装、引用,模板使用,computed&a…

移动端基础-响应式开发:Bootstrap前端开发框架

Bootstrap使用 目前只考虑样式库CSS布局效果 步骤: 1.创建文件 2.创建HTML骨架结构 3.引入相应样式文件 4.书写内容 创建文件 到官网下载好bootstrap.js 创建文件夹: 将样式引入 直接查找css样式: 注意:不同的样式是通过类…

倒计时61天

M-智乃的36倍数(normal version)_2024牛客寒假算法基础集训营3 (nowcoder.com) //非ac代码,超时了,54.17/100#include<bits/stdc.h> using namespace std; const int N1e55; const int inf0x3f3f3f3f; #define int long long int n; string s1[N]; void solve() {cin>…

【VTKExamples::PolyData】第二十三期 InterpolateMeshOnGrid

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例InterpolateMeshOnGrid,并解析接口vtkProbeFilter 、vtkWarpScalar & vtkDealuany2D等多个接口,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!…

Stable Diffusion 模型下载:ToonYou(平涂卡通)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 ToonYou 是一个平涂风格的卡通模型&#xff0c;它的画风独特、光感强烈、画面表现力强、场景结构完整&#xff0c;一张张图犹如动画电影截图&#xff0c;非常值得推…

C#静态数组删除数组元素不改变数组长度 vs 动态数组删除数组元素改变数组长度

目录 一、使用的方法 1.对静态数组删除指定长度并不改变数长度的方法 &#xff08;1&#xff09;静态数组 &#xff08;2&#xff09;对静态数组删除元素不得改变其长度 2.对动态数组删除指定长度并改变数长度的方法 &#xff08;1&#xff09;动态数组 &#xff08;2&a…

ownips的自救指南:一次账号封停事件的心路历程与解决策略

前言 小明以前是全球500强电商类公司的运营工作人员&#xff0c;在事业的上升期日入斗金、年薪百万&#xff0c;后面分钱时被产品、总监、老板瓜分了大头&#xff0c;大气都大敢出。由于小明掌握了核心技术&#xff0c;从联系品牌供应商、电商选品、用户行为调研、用户画像收集…

详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论&#xff1a;所谓选举的过程不是直接选出新的主节点&#xff0c;而是先在哨兵节点中选出 leader &#xff0c;再由 leader 负责后续主节点的指定。 假定当前环境&#xff1a; 三个哨兵(sentenal1, sentenal2, sentenal3)一个主节点(redis-master)两个从节点(red…

Unity类银河恶魔城学习记录5-1.5-2 P62-63 Creating Player Manager and Skill Manager源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerManager.cs using System.Collections; using System.Collections.G…

Bpmn-js自定义Palette元素

Bpmn-js作为一个流程编辑器&#xff0c;常规的我们可以将其划分为几个功能区域&#xff0c;每个区域对应的负责不同的功能实现&#xff0c;bpmn-js的设计给我们留下了大量的留白和可扩展区域&#xff0c;其每一部分都可进行组合拼装&#xff0c;同时也支持我们的各种不同层次需…

DevOps落地笔记-20|软件质量:决定系统成功的关键

上一课时介绍通过提高工程效率来提高价值交付效率&#xff0c;从而提高企业对市场的响应速度。在提高响应速度的同时&#xff0c;也不能降低软件的质量&#xff0c;这就是所谓的“保质保量”。具备高质量软件&#xff0c;高效率的企业走得更快更远。相反&#xff0c;低劣的软件…

【CV论文精读】【MVDet】Multiview Detection with Feature Perspective Transformation

0.论文摘要 合并多个摄像机视图进行检测减轻了拥挤场景中遮挡的影响。在多视图检测系统中&#xff0c;我们需要回答两个重要问题。首先&#xff0c;我们应该如何从多个视图中聚合线索&#xff1f;第二&#xff0c;我们应该如何从空间上相邻的位置聚集信息&#xff1f;为了解决…

自定义搜狗输入法日期时间格式设置

目录 引言具体操作方法1方法2 效果展示 引言 根据搜狗官方指导&#xff1a;https://pinyin.sogou.com/help.php?list3&q11 【插入当前日期时间】的功能可以方便的输入当前的系统日期、时间、星期。并且你还可以用插入函数自己构造动态的时间。例如在回信的模版中使用。此…

Pandas 数据处理-排序与排名的深度探索【第69篇—python:文本数据处理】

文章目录 Pandas 数据处理-排序与排名的深度探索1. sort_index方法2. sort_values方法3. rank方法4. 多列排序5. 排名方法的参数详解6. 处理重复值7. 对索引进行排名8. 多级索引排序与排名9. 更高级的排序自定义10. 性能优化技巧10.1 使用nsmallest和nlargest10.2 使用sort_val…

io三个练习:

练习一&#xff1a; 使用 四种方式拷贝文件&#xff0c;并统计各自用时 1字节流的基本流&#xff1a;一次读写一个字节 2字节流的基本流&#xff1a;一次读写一个字节数组 3字节缓冲流&#xff1a;一次读写一个字节 4字节缓冲流&#xff1a;一次读写一个字节数组 public clas…

TCP的连接和断开详解

目录 1.TCP基础知识 1.1.TCP 头格式 1.2.TCP协议介绍 1.3.UDP协议介绍 1.4.TCP 和 UDP 区别 1.5.TCP 和 UDP 应用场景 1.6.计算机网络相关术语&#xff08;缩写&#xff09; 2.TCP 连接建立&#xff1a;三次握手 2.1.TCP 三次握手过程 2.2.三次握手原理 2.3.异常分析…

JavaScript 入门 完整版

目录 第一个知识点&#xff1a;引入js文件 内部引用: 外部引用: 第二个知识点&#xff1a;javascript的基本语法 定义变量&#xff1a; 条件控制(if - else if - else) 第三个知识点&#xff1a;javascript里的数据类型、运算符&#xff1a; 数字类型 字符串类型 布尔…

【蓝桥杯单片机记录】IO基础与LED控制

目录 一、IO基础 1.1 IAP15F2K61S2芯片原理图 1.2不同工作模式 二、新建工程的一些补充 2.1 keil中没有IAP15F2K61S2的头文件 解决&#xff1a;在isp软件中找到如下​编辑 2.2keil中的芯片选择 2.3推荐字体 三、sbit关键字 四、LED控制 4.1原理图 4.2不能直接通过IO…

【深度学习:掌握监督学习】掌握监督学习综合指南

【深度学习&#xff1a;掌握监督学习】掌握监督学习综合指南 监督学习的定义和简要说明监督学习在人工智能中的重要性和相关性概述什么是监督学习&#xff1f;基本概念主要组件&#xff1a;输入要素和目标标签 训练监督式学习模型监督学习算法的类型分类回归每个类别中的流行算…