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

本教程采用 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.hqwc.cn/news/2781.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络—局域网

文章目录 ARP协议以太网以太网帧结构交换机交换机的端口划分 PPP协议 MAC地址 封装在链路帧中的地址,作为每一个接口的地址。(一般是48bit大小) MAC地址是刻画到我们物理接口上的,我们的网卡一旦出厂之后就会携带一个唯一的物理地…

SAP 后台配置之FM基金管理篇

SAP FM基金管理后台配置及应用 1 二话不说先上后台配置,能跑通为先1.1 基础设置1.1.1 维护财务管理区1.1.2 分配财务管理区1.1.3 激活全局基金管理功能1.1.4 定义全局参数1.1.5 定义编号区间编号并分配1.1.6 创建更改层次变式1.1.3 激活科目分配元素1.1.4 设置允许空…

微信小程序 rich-text富文本框 怎么设置里面节点的样式

1、在JS中我们获取数据&#xff0c;在没有类名的情况下 使用正则匹配你想要添加演示的节点 res[1].data[0].f_content为rich-text里面的节点 如图 代码&#xff1a;让获取的节点中的图片的最大宽度为100%,高度为auto this.content res[1].data[0].f_content.replace(/\<…

Java泛型详解:为什么使用泛型?如何使用泛型?

Java泛型详解&#xff1a;为什么使用泛型&#xff1f;如何使用泛型&#xff1f; &#x1f498;一、为什么使用泛型&#xff1f;&#x1f498;二、如何使用泛型&#xff1f;&#x1f496;1. 泛型类的使用&#xff1a;&#x1f496;2. 泛型方法的使用&#xff1a;&#x1f496;3.…

Python高级教程:简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 FastAPI是一个高性能、易于使用、快速编写API的…

java实现布隆过滤器(手写和Guava库提供的)

目录 前言 布隆过滤器的原理 插入​编辑 查询 删除 布隆过滤器优缺点 优点&#xff1a; 缺点&#xff1a; 代码实现 方式一&#xff1a; Google Guava 提供的 BloomFilter 类来实现布隆过滤器 到底经过几次哈希计算 解决缓存穿透 方式二&#xff1a;手写 前言 在学…

Springboot 核心注解和基本配置解读

目录 1. Springboot 入门与原理 1.1 Springboot 简介 1.1.1 什么是Springboot 1.1.2 Springboot 主要优点 1.2 Springboot 相关注解 1.2.1 元注解 1.2.1.1 Target 1.2.1.2 Retention 1.2.2 Configuration 1.2.3 Import 1.2.3.1 直接注入 1.2.3.2 实现 ImportSelector…

基于Java+Vue前后端分离开放式教学评价管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

关于u(x,t)=f(x)*g(t)形式证明的思考

突然想起来&#xff0c;二维高斯函数是可以拆分成两个一维高斯函数相乘的&#xff1a; 原来在学概率论的时候&#xff0c;证明过&#xff0c;这只能说高斯函数可以&#xff0c;这是一个思路。 一维波动函数应该也是这个套路。 那么还有没有其他函数可以如此&#xff0c;有如此…

burpsuite踩坑(一)

今天在使用burpsuite的时候&#xff0c;能抓到https或者http的包。 但是repeater模块无法使用&#xff0c;而且放行包之后&#xff0c;会出现提示。 搞了半天&#xff0c;以为是证书的问题&#xff0c;或者是burp汉化版的原因&#xff0c;还把汉化版的burp给删除了。 发现都…

HOT30-两两交换链表中的节点

leetcode原题链接&#xff1a;两两交换链表中的节点 题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&a…

嵌入式系统的不同方向及优化策略

当涉及到嵌入式系统开发时&#xff0c;可以根据具体的应用需求选择不同的方向进行优化。以下是一些常见的嵌入式系统方向及其特点&#xff1a; 单片机方向&#xff1a;这个方向主要针对使用单片机作为核心的嵌入式系统开发。单片机资源有限&#xff0c;适用于简单的控制任务&am…