【正点原子FPGA学习日记】DAY1:FPGA简介及开发流程

使用正点原子的达芬奇板作为学习使用,文章内容是对正点原子开发指南的整理,仅做回顾学习使用,侵删。

FPGA简介

1,FPGA中文名:现场可编程门阵列

        其中现场指其可重复写入,门阵列指其根据查找表输出,可编程则是FPGA与CPU之间最主要的区别,能够改变逻辑门单元之间的硬件逻辑。

2,FPGA内部结构

        FPGA 由许多“可配置逻辑模块”(Configurable Logic Block,CLB)、输入/输出单元(I/O Block,IOB)和分布式的可编程互联矩阵(Programmable Interconnection Matrix,PIM)组成。

3,CPU、DSP 和 FPGA 的区别

CPU 具有比较强的事务管理功能,可以用来跑 UI 以及应用程序,CPU 优点主要在于擅长控制DSP 主要是来做计算,例如加解密算法,调制解调等,其优势是强大的数据处理能力和较高的运行速度。FPGA主要使用 Verilog 进行编程,灵活性强,并行处理度高,可编程,可以做到很高的带宽处理。


FPGA开发流程

本文将以点亮led灯为例,梳理fpga的开发流程

        标准的FPGA开发流程如下图所示:

0,FPGA工程管理
doc:用来存放辅助文档,如波形图,系统框图等prj:用来新建工程及产生的文件rtl:开发过程中使用notpad++产生的.v格式的rtl文件sim:仿真工程与仿真文件,内部通常还有一个tb文件夹
1,需求分析

        点亮led灯是使用达芬奇板上的按键key0来控制led0灯的亮灭。

        当按键按下,led灯被点亮,按键松开,led灯熄灭。

        通过查询开发板原理图,得到led灯的亮灭逻辑,即led0高电平点亮,反之熄灭。

        按键默认是高电平,按键被按下是低电平:想要实现需求,实际要对led和key做取反~操作

2,系统设计

        由于本实验过于简单,只有一个模块,输入端口为key0,输出端口为led0,因此不需要进行模块划分。

3,硬件选型

        按理应当选用合适规模和性能的fpga芯片进行工作,本文中只能选用达芬奇。

4,绘制系统框图

        根据系统设计的结果使用Viso软件设计系统框图:

        这里绿色框的led,指的是实验名称,key指输入端口,led指输出端口。

5,绘制波形图

        led效果图如下:

        根据效果图绘制波形图(通常输入为绿色,输出为红色):

6,编写rtl代码
        使用notepad++新建一个led.v文件,并存放在rtl文件夹中;

        这里的module指令相当与c中的函数指令,input key和output led相当于函数中的值;

        其中assign led =~key;才是主代码,只是做一个取反操作;
7,软件仿真tb

         使用modelsim软件对rtl代码进行仿真之前,需要编写实验对应的仿真文件(TestBench)。

TestBench 是用于验证功能模块的设计是否符合预期,其内容主要分为以下三个步骤:        1、 向被测功能模块的输入接口添加激励;//给输入接口一个信号        2、 对被测功能模块的顶层接口进行信号例化;        3、 判断被测功能模块的输出是否满足设计预期//判断是否可用

       所谓testbench可以理解成只通过看波形图来判断程序有没有生效使用,与真正的led.v程序使得亮灯不同,后者能通过按键和灯之间的亮灭来判断程序是否可用;

        在sim文件夹中的tb文件夹,新建一个tb_led.v文件,使用notepad++打开,

1)定义仿真单位:第 1 行代码定义的是仿真单位是 1ns,例如 TB 模块中第 16、18、20、22 行代码使用了延迟语句,第 16 行代码“#200”就是延迟 200ns2)定义输入与输出:一般输入信号定义为寄存器类型(reg),一般输出信号定义为线型(wire)。第 6行代码是定义了一位寄存器类型 key 输入,第 9 行代码是定义了一位线型 led 输出3)输入信号初始化:第 13 行代码是一位按键输入的初始化。因为板载按键默认为高电平,所以初始化时我们给按键赋值高电平。4)给输入信号赋值:第 16 行到第 23 行的代码是结合延迟语句给输入按键赋不同的值。第 16 行到第23 行的代码的功能是模拟按键被按下和被释放。5)例化 led 模块:第 27 行到第 30 行代码是例化点亮 LED 模块。通过例化 led 模块,我们 TB 模块编写的激励就可以传递到待测模块进行仿真。

        1,使用modelsim软件在sim文件夹中创建tb_led.prj工程

       2, 通过add files,添加rtl中的led.v和sim—tb中的tb_led.v进入该prj文件中

       3, 然后点击compile选项卡中的compile all编译所有文件,所有文件显示√即完成

        4,点击simulation选项卡中的start simulation

        5,查看波形图是否符合要求

        点击u_led选择add wave选项。

通过将仿真的结果与我们绘制的波形图对比,可以看到两者波形一致,验证我们编写的代码功能是正确的。如果两者波形不一致,则说明我们编写的代码不能正确实现我们设计的功能,此时就需要对代码进行修改,直至仿真的结果与我们绘制的波形图一致。
8,新建工程

        在vivado软件中,新建project文件,取名为led。文件地址为prj文件夹;并选择rtl工程类型;

取消默认勾选了“Create project subdirectory”选项是因为如果勾选了该选项,Vivado 会在所选工程目录下自动创建一个与工程名同名的文件夹

        添加完文件之后,选择开发板芯片型号,这也是不同芯片在该教程中唯一不同的一部分;

9,分析与综合
综合(Synthesis)就是将 RTL 设计转变为由 FPGA 器件中的查 找表(LUT)、触发器(FF)等各种底层电路单元所组成的网表,在这个过程中综合器也会对设计进行优化,例如删除多余的逻辑等等。类似c语言中的编译操作

        如果没有报错,点击原理图界面,之后便可以进行引脚约束

10,约束输入
约束表达了设计者期望满足的时序要求,规范了设计的时行为,并在综合、实现阶段来指导工具进行布局、布线,工具会按照你的约束尽量去努力实现以满足时序要求,并在时序报告中给出结果。常用的约束包括时序约束、引脚约束等等。

        查找手册得知key0和led0的管脚和电平标准,填入表格后,ctlr s保存xdc文件

        xdc文件即引脚约束文件

        最后对代码进行综合;

        通常选择第二个
11,设计实现
12,下载验证及调试
比特流文件即下载验证文件

        首先生成比特流文件,generate bitstream

        连接下载器:

自动查找比特流文件,如果自动找不到,通常在led.runs/imp_1

        点击program,即下载到板子

        注意这里只能单次使用,一旦断电之后就会记忆消失
13,程序固化

第一步:在xdc约束文件中,新增spi设置文件(正点原子的xdc文件中最后一行)

第二部:生成mcs文件(有其他两种文件同样能达到这样的效果)

第三步:添加flash

MCS的文件位置,与bit文件位置相同

Read more

Flutter 三方库 ethereum_addresses 的鸿蒙化适配指南 - 掌控区块链地址资产、精密校验治理实战、鸿蒙级 Web3 专家

Flutter 三方库 ethereum_addresses 的鸿蒙化适配指南 - 掌控区块链地址资产、精密校验治理实战、鸿蒙级 Web3 专家

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 ethereum_addresses 的鸿蒙化适配指南 - 掌控区块链地址资产、精密校验治理实战、鸿蒙级 Web3 专家 在鸿蒙跨平台应用执行高级区块链身份管理与多维以太坊地址资产指控(如构建一个支持全场景秒级交互的鸿蒙大型全量钱包中枢、处理海量 Ethereum Address Payloads 的语义认领或是实现一个具备极致指控能力的资产管理后台地址审计中心)时,如果仅仅依赖官方的基础 Regular Expression 或者是极其繁琐的手动 Checksum 计算,极易在处理“由于大小写敏感导致的资产认领偏移”、“高频地址校验下的认领假死”或“由于多语言环境导致的符号解析冲突死结”时陷入研发代码区块链逻辑崩溃死循环。如果你追求的是一种完全对齐现代 Ethereum 标准、支持全量高度可定制校验(Type-safe Web3)且具备极致指控确定性的方案。今天我们要深度解析的 ethereum_addresses——一个专注于解决“地址

本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

将手机电话通话声音通过udp传输到局域网的Python脚本 --本地AI电话机器人 * 一、前言 上一篇:手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心下一篇:刷抖音/看电子书-如何让手机自动上下翻页和左右翻页 前面我们通过两个篇章《手机SIM卡通话中随时插入录音语音片段(Android方案)》《手机SIM卡通话中随时插入录音语音片段(Windows方案)》,阐述了【手机打电话过程中,随机插播预录语音片段】的功能和根据对方手机按下DTMF按键,播放不同IVR应答语音片段给对方手机的能力。 在AI电话沟通时,由于手机性能和算力的局限性,通常AI交互的模型和算法无法部署到手机上。这样的话就需要将拦截到的手机通话的声音数据,通过网络(局域网或互联网)将语音包传输给AI算力服务器。由其对语音进行ASR识别和语义理解,并生成最终的应答TTS语音,反馈回手机注入到电话通话中。 当前市面上主流的实时语音流的传输方式主要有两种: 1)SIP/WebRTC协议及配套的RTP/RTCP语音数据传输。 2)直接将语音数据以udp广播或组播的方式分发给局域网内多个设备。 前面我们

Pico 4XVR 1.10.13安装包下载与安装教程 ico 4XVR最新版下载、4XVR 1.10.13 APK安装包、Pico VR看电影软件、4XVR完整版安装教程、Pico 4播放器推荐、V

Pico 4XVR 1.10.13安装包下载与安装教程 ico 4XVR最新版下载、4XVR 1.10.13 APK安装包、Pico VR看电影软件、4XVR完整版安装教程、Pico 4播放器推荐、V

Pico 4XVR 1.10.13安装包下载与安装教程 SEO关键词:Pico 4XVR最新版下载、4XVR 1.10.13 APK安装包、Pico VR看电影软件、4XVR完整版安装教程、Pico 4播放器推荐、VR本地播放器APK 最近在折腾 Pico 设备本地观影方案时,测试了不少播放器,最终还是回到 4XVR。作为一个开发工程师,我对播放器的解码能力、格式兼容性、播放流畅度比较敏感。实测下来,4XVR 在高码率视频、蓝光原盘播放方面表现确实稳定。 这篇文章整理一下 Pico 4XVR 最新版 1.10.13 的版本信息、下载方式以及安装流程,方便需要的朋友自行安装测试。 一、版本信息说明 * 软件名称:4XVR * 版本号:1.10.

FPGA教程系列-Vivado IP核DDS核

FPGA教程系列-Vivado IP核DDS核

FPGA教程系列-Vivado IP核DDS核 直接数字合成器(DDS)或数控振荡器(NCO)是许多数字通信系统的重要组成部分。正交合成器用于构建数字下行和上行转换器和解调器。它们还用于实现各种类型的调制方案,包括 PSK(相移键控)、FSK(频移键控)和 MSK(最小移位键控)。数字生成复值或实值正弦波的常用方法是采用查找表方案。查找表存储正弦波的样本。数字积分器用于生成合适的相位参数,该参数由查找表映射到所需的输出波形。简单的用户界面可接受系统级参数,如所需的输出频率和生成波形的杂散抑制。直接数字合成器(DDS)或数控振荡器(NCO)是许多数字通信系统的重要组成部分。正交合成器用于构建数字下行和上行转换器和解调器。它们还用于实现各种类型的调制方案,包括 PSK(相移键控)、FSK(频移键控)和 MSK(最小移位键控)。数字生成复值或实值正弦波的常用方法是采用查找表方案。查找表存储正弦波的样本。数字积分器用于生成合适的相位参数,该参数由查找表映射到所需的输出波形。简单的用户界面可接受系统级参数,如所需的输出频率和生成波形的杂散抑制。 进入IP核设置 模式配置 Phase G