【国产复旦微FMQL45教程】-小试牛刀之LED

news2024/9/28 23:25:02

本教程采用 FMQL7045 FPGA开发板来完成整个试验,板卡照片如下:

具有丰富的接口资源,系统框图如下:

 

本教程用于完成基于Vivado的FMQL45的LED实验,目标是能够将这款开发板PL端先跑起来。

对于纯 PL 设计,我们的 FMQL45 和 Zynq7045 是管脚全兼容,所以可以直接使用 Vivado  进行逻辑开发,对于简单的逻辑也可以使用 Procise 开发,但是如果要大量使用 IPcore,推荐使用 Vivado 。

这边先介绍 Vivado 流程。

实验 Vivado 工程为“00_led”。本例程主要实现的功能是每秒钟控制扩展板上的8 个 LED 灯翻转一次。

1 LED硬件介绍

PL 端只能直接控制 PL 侧的 LED 灯,无法直接控制 PS 端的外设。8 颗 LED 灯通过三极管连接到 3.3V 电源,当三极管导通 LED 就会亮。结合核心板和扩展板的原理图,我们可以看到 8 个 LED 对应 FMQL45 芯片的管脚情况如下所示:

                LED1 --- AJ24

                LED2 --- AK18

                LED3 --- AB29

                 LED4 --- AC27

                LED5 --- AD23

                LED6 --- AF24

                LED7 --- AE23

                LED8 --- AG25

2 Vivado工程建立

(1)在 Windows 中可以双击 Vivado 快捷方式启动 Vivado。

(2)在 Vivado 开发环境中点击“Create Project”可以创建一个新工程。

 

(3)弹出建立新工程的向导,点击“Next”

 

(4)在弹出的对话框中输入工程名和工程存放路径,我们这里取名叫 00_led。需要注意工程路径“Project location”中不能有中文空格,路径名最好也不要太长。然后点击 Next。 

 

(5)在工程类型中选择“RTL Project”。 

(6)Target language 选择“Verilog”。

 

(7)点击“Next”,不添加任何文件,后续再补充。

 

(8)筛选出 xc7z045ffg900-2 器件并选择,点击“Next”。

 

(9)点击“Finish”即可完成“led”工程的创建。

 

(10)下图为 Vivado 的软件界面。

 

3 创建Verilog HDL文件

(1)点击 Project Manager 下面的 Add Sources 图标,选择添加或者创建设计源文件“Add or create design sources”,然后点击“Next”。

 

(2)选择创建文件“Create File”

 

(3)弹出的窗口里,设置“File name”为“led”后点击“OK”。

 

(4)点击“Finish”就完成了“led.v”文件的添加。

 (5)这个时候在弹出的窗口上可以指定“Module name”,这里我们按照默认的就好了,点击“OK”。

(6)在弹出的对话框里选择“Yes”。

 

(7)双击“led.v”即可编辑该文件。

 

(8)编写一段“led.v”逻辑代码,这里定义了一个 32 位的寄存器 timer,用于循环计数 0~499999999(1 秒),计数到 499999999 的时候,timer 变 0,并翻转 8 个LED 灯。在硬件上表现为 LED 会每秒钟切换一次亮灭状态。编写完代码后记得保存,源代码如下图: 

4 添加管脚约束

Vivado 上我们使用的约束文件为 XDC 格式,里面主要完成管脚的约束、时钟的约束和组的约束。这里需要对 led.v 程序中的输入输出端口分配到 FPGA 的真实管脚上。

(1)点击“Open Elaborated Design”,在弹出的窗口上点击“OK”。

(2)菜单中选择“Window --> I/O Ports”

 

(3)在弹出的 I/O Ports 中可以看到管脚分配情况。 

(4)给 LED 和时钟分频管脚和电平标准,完成后保存。这块的分配请看原理图确定。

 

(5)弹出窗口要求保存约束文件,文件名我们填写“led”,文件类型默认“XDC”,点击“OK”。

(6)打开刚刚生成的“led.xdc”可以看到相关的 TCL 脚本,这些其实我们在熟悉相关语法后都可以自己直接写,不用通过上面的图形化界面生成。相关语法请开发人员自己去熟悉和学习,这里不再赘述。

 

一个 FPGA 设计除了管脚约束外还有时序约束,这里通过向导方式演示如何进行时序约束。

(1)点击“Run Synthesis”开始综合流程。

(2)弹出的对话框点击“OK”。

 

(3)综合完成后点击“Cancel”。

 

(4)点击“Constrain Wizard”

 

(5)在弹出的窗口点击“Next”

 

(6)把“sys_clk”频率设置为 50MHz,然后点击“Skip to Finish”结束时序约束向导。

 

(7)点击“Finish”

 

(8)这个时候 led.xdc 就更新了,点击“Reload”可以重新加载文件。可以看到最后一行加上了时钟约束。

 

6 生成BIT位流

(1)编译过程可以分为综合、布局布线、生成 bit 位流等,这里我们直接点击“Generate Bitstream”就可以直接一键式生成 bit 位流。

 

(2)在弹出的对话框中选择任务数量,这里和 CPU 核心数相关,一般设置数字越大编译越快,但是占用的系统资源越多。这里需要用户自己衡量,这里我们就按照默认的,直接点击“OK”。

 

(3)开始编译,软件右上角有编译状态信息。

 

(4)编译如果没有任何错误,会弹出一个对话框让我们选择后续操作,我们这里选择“Open Hardware Manger”然后点击“OK”去下载调试。

 

7 下载调试

(1)连接好开发板的 Jtag 接口,给开发板上电。在“HARDWARE MANAGER”界面点击“Auto Connect”会自动扫描到设备并连接。

 

(2)可以看到 Jtag 扫描到的 ARM 和 FPGA 内核,还有一个 XADC 可以检测系统电压和温度。

 

(3)选择 xc7z045_1,右键“Program Device...”

 

(4)在弹出的窗口选择好具体的位流路径,然后点击“Program”。

 

(5)等待下载成功后,我们可以看到 8 颗 LED 灯每秒变化一次,纯 PL 的 Vivado流程至此结束。 

8 总结

采用国产复旦微的FMQL45完成了LED灯的点亮,也是开启了国产FPGA使用的第一步。后续会再介绍进一步的教程。

有对这款板卡感兴趣的朋友,可以参考下面的链接,有详细介绍,国产FPGA解决方案,我们是专业的!

国产化复旦微电子 FMQL45T900 FPGA开发板( 替代Xilinx ZYNQ ARM+FPGA 7045开发板)

 

 

 

 

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

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

相关文章

002、体系结构之TiDB Server

TiDB Server 1、TiDB总览1.1、TiDB Server架构1.2、TiDB Server 主要功能: 2、SQL语句处理语句的解析和编译SQL层协议层上下文解析层逻辑优化器物理优化器本地执行器分布式执行器 3、如何将表的数据转成kv形式4、在线DDL相关模块5、GC机制与相关模块6、TiDB Server …

pyecharts案例三——河南省疫情地图绘制

代码实现 代码的业务流程基本和全国疫情地图相同,注意城市名结尾必须有“市”才能识别 import json from pyecharts.charts import Map from pyecharts.options import *f open("./疫情.txt", "r", encoding"UTF-8") data f.read…

暴力破解测试-业务安全测试实操(1)

业务安全测试实践模版理论指导_luozhonghua2000的博客-CSDN博客 测试原理和方法 暴力破解测试是指针对应用系统用户登录账号与密码进行的穷举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。 般分为以下三种情况: 在已知账号的情况下,加载密码字典针对密码进行…

从美颜算法到AI美颜SDK:美丽的背后隐藏着什么?

在年轻人的生活中,通过美颜SDK类型的美颜工具进行拍摄已经成为了一种全新的文化现象。时下,AI美颜、美颜SDK讨论热点极高,那么大家知道美颜算法和AI美颜到底有什么不同吗?它们背后隐藏着什么样的技术和思想? 一、美颜算…

java的StringBuilder、Stringjoiner

一、StringBuilder StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。作用是提高字符串的操作效率。 注意:使用String创建字符串对象时,是不能改变字符串的内容的,例如: String s1 "aaa"; St…

【解决MySQL-jdbc连接问题】com.mysql.jdbc.Driver was not found, trying direct instantiat

启动服务时出现报错 com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassNamecom.mysql.jdbc.Driver was not found, trying direct instantiation.而且接口有时候能访问成功,有时候的超时连接,异常的慢 经查询&#xff0c…

BUUCTF Alice与Bob 1

题目描述: 密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解…

HTMLCSS Day03 CSS字体及文本样式

文章目录 1.文本属性- 颜色属性在CSS中如何通过color属性来修改文字颜色英文单词rgbrgba十六进制 - font-style 用于打开和关闭斜体文本- font-weight 为字体设置粗细程度- font-size 为文字指定大小- font-family 为文字指定特殊的字体,浏览器只会使用浏览器可以访…

动态规划dp —— 23.等差数列划分

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置为结尾的所有子数组中有多少个等差数列 2.状态转移方程 dp[i] 等于什么 以i位置为结尾的等差数列,也就是说i位置必须和i-1,i-2位置构成等差数列&am…

98.实战网页构建定价部分-第一节

通过之前的文章我们实现如下的页面&#xff1a; ● 这节课我们来完成价目的部分 <section class"section-pricing"><div class"container"><span class"subheading">定价</span><h2 class"heading-secondary…

目前音质好的几款音频功放芯片

“音频功率放大器”简称音频功放&#xff0c;是扩声系统不可缺少的音响设备&#xff1b;是指把来自音源或前级放大器输出的弱信号放大并推动一定功率的音箱发出声音的集成电路。 音频功放可分为模拟功放和数字功放&#xff0c;传统模拟功放主要有A、AB、B、G类等&#xff0c;区…

vscode 实时同步代码到远程服务器

&#xff08;1&#xff09;在本地新建一个工程文件夹quant&#xff0c;将要同步的文件或者代码或文件夹放到quant里面&#xff1a; &#xff08;2&#xff09;创建sftp配置 使用 ctrlshiftp 快捷键调出输入框&#xff0c;选择 SFTP:Config 回车 会在 .vscode 目录下创建一个 s…

实验篇(7.2) 11. 创建点对点安全隧道(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接&#xff0c;现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器&#xff0c;用来对集团总部进…

基于Java+Spring+vue+element实现唯美鲜花商城购物系统

基于JavaSpringvueelement实现唯美鲜花商城购物系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

unocss 基础用法

一、什么是unocss unocss是一个即时的原子CSS引擎&#xff0c;它可以让你用简短的类名来控制元素的样式&#xff0c;而不需要写复杂的CSS代码。 当然&#xff0c;原子样式也有很多选择&#xff0c;最著名的就是 Tailwind。 但由于Tailwind 会生成大量样式定义&#xff0c;会导…

C语言函数的函数名和参数

VC6新建单文档工程&#xff1b; 视类添加2个函数&#xff1b; int getmax(int a,int b) {return a>b?a:b; }int two(int a) {return a * 2; } 调用&#xff0c;输出&#xff0c; void CMingView::OnDraw(CDC* pDC) {CMingDoc* pDoc GetDocument();ASSERT_VALID(pDoc);…

Segment-Anything的一些相关论文总结

1、 Segment Anything Model (SAM) Enhanced Pseudo Labels for Weakly Supervised Semantic Segmentation Tianle Chen, Zheda Mai, Ruiwen Li, Wei-lun Chao https://arxiv.org/abs/2305.05803 图像级监督的弱监督语义分割(WSSS)由于其标注成本较像素级标注低而受到越来越…

基于react18.x和router v6创建一个简单的静态页面

基于react18.x和router v6创建一个简单的静态页面 效果示例图README.md学习网站创建项目安装react-router-dom v6依赖安装scss 项目目录路由router/index.jsApp.jsindex.js路由地址错误&#xff0c;打开404页面页面docs/index.jsx页面tutorial/index.jsx 效果示例图 README.md …

fio下发的请求大小不确定

fio下发的请求大小不确定 问题描述调用栈回顾nvme_set_queue_limits函数研究内核调用栈 问题描述 fio --filename/dev/xxx_dev --direct1 --rwwrite --bs1M --ioenginelibaio --iodepth1 --runtime60 --numjobs1 --time_based --group_reporting --name"test xxx" -…

第一课 django后端框架初始和安装

这里写目录标题 django是什么django 发展历史:django主要组件django的应用场景django的官网如下django的安装 django是什么 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 django 发展历史: Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯…