【【萌新的FPGA学习之快速回顾 水 水 】】

萌新的FPGA学习之快速回顾 水 水

上一条FPGA的更新在9 25 并且2个礼拜没写 verilog 了 正好 刷新一下记忆

FPGA CPU DSP 的对比
在数字电路发展多年以来,出现了 CPU、DSP 和 FPGA 三种经典器件,每个都是具有划时代意义的器件。CPU、DSP 和 FPGA 都有各自的擅长领域,很多新人对这三个器件到底有啥区别,到底应该学习哪个有点懵。为此,我们梳理了三个器件的概念和区别。由于我们前面已经介绍过 FPGA,此处我们只介绍 CPU和 DSP。
我们先来了解下 CPU:
CPU 一般都是基于指令流水线的架构,从存储器中进行指令的读取,指令的解析,指令的执行这样的流程。因此,在了解 CPU 之前,我们需要去了解 CPU 的指令集,再去了解指令的具体执行方式,然后针对具体的芯片了解其外围电路。
指令集是 CPU 用来计算和控制计算机系统的一套指令的集合。目前常用的指令集主要分为两种,一个是复杂指令集(CISC),另一个是精简指令集(RISC)。其中复杂指令集是早期 intel 使用的指令集,即使到现在,大部分的 PC 中使用的依然是复杂指令集。与其相对的是精简指令集,业界普遍认为精简指令集具有较高的执行效率。
CPU 一般包括几种:
1、单片机(也叫微处理器),比如早期的 intel 8051 单片机,近几年比较火的 ST 的 STM32 单片机。
2、通用 CPU,比如 intel 和 AMD 的台式机 CPU。
3、高性能 ARM CPU,比如 ARM Coretex A53/57 内核,一般用在手机或者手持设备中。
4、RISC-V 处理器,近期 RISC-V 比较火,优势是开源且高性能,吸引了国内外很多家公司在研究。
ARM 目前还是占了很大的市场份额,甚至很多人常常使用 ARM 代替 CPU,下面单独说下 ARM:ARM 设计了大量的高性能、廉价、功耗低的 RISC 处理器,相关的技术以及软件。ARM 架构是面向低预算市场设计的第一款 RISC 微处理器,它能够提供一系列的内核、体系扩展、微处理器和系统芯片方案,这四个功能模块可供生产商根据不同的用户要求来配置生产。ARM 是 32 位单片机,其内部的硬件资源性能较高,可以加载操作系统是其主要特点,加载操作系统之后,可以向 PC 一样进行多任务的实时处理,不会相互影响。
我们再来了解下 DSP:DSP 通常负责数字信号(视频、音频和其他的传感器获得的数字信号)处理,在日常生活中,常见的数字电视机机顶盒、MP3、MP4 和光模块等都广泛使用了 DSP。由于设计的专一化,DSP 可以在较低的成本下,执行比较复杂的编解码信号处理工作。DSP 其实是一种独特的 CPU,只是拥有自己的完整指令系统,是可以处理大量数字信号的器件。最大的特点就是 DSP 内部有专门的硬件乘法器和哈佛总线结构,对大量的数字信号处理速度比较快。DSP 处理器包括有控制单元、运算单元、各种存储器、以及一定数量的存储单元,并能够与一定数量的外部设备互相通信。DSP 采用的是哈佛设计,数据总线与地址总线分开,这样程序和数据能够分别存储在两块独立的空间中,允许取指令与执行指令完全重叠,就是说在 CPU 在执行上一条指令的同时也取出了下一条指令,并完成了译码工作,提高微处理器的执行速率。此外还允许在程序空间和数据空间进行数据传输,增加器件的灵活性,具体的工作原理是将接收到的模拟信号转换成 01 的数字信号,再对数据信号进行修改、删除、强化等工作,最终在其他芯片中把数字信号解读回实际环境需要的格式,运行速度可以达到每秒千万调复杂的指令,其主要特点如下:
⚫ 在一个指令周期内可以完成一次乘法和加法运算
⚫ 程序和数据分开,同时访问指令和数据
⚫ 片内具有快速 RAM,通常能够通过独立的数据总线在两块中同时访问
⚫ 具有低开销或无开销循环以及跳转指令的硬件支持
⚫ 快速的中断处理以及硬件 IO 支持
⚫ 能够在单周期内操作多个硬件地址产生器
⚫ 可以并行执行多个操作
⚫ 支持 pipeline 操作,取值译码和执行操作可以同时执行在了解了 CPU、DSP 和 FPGA 基本概念后,我们再来看下 CPU、DSP 和 FPGA 的区别:CPU 具有比较强的事务管理功能,可以用来跑 UI 以及应用程序,CPU 优点主要在于擅长控制。DSP 主要是来做计算,例如加解密算法,调制解调等,其优势是强大的数据处理能力和较高的运行速度。FPGA 主要使用 Verilog 进行编程,灵活性强,并行处理度高,可编程,可以做到很高的带宽处理。
在这里插入图片描述

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

AXI 突发传输的意思 : 本篇文章我们将讨论有关 AXI 总线的突发传输机制( burst ),在 AXI 总线中的突发传输是指,在地址总线上进行一次地址传输后,进行多次数据传输( transfer,这个有点搞,突发传输 and 传输?)。第一次地址传输中的地址作为起始地址,根据突发传输类型的不同,后续数据的存储地址在起始地址的基础上递增(INCR 模式);或者首先递增,到达上限地址后回到起始地址,继续递增(WRAP 模式);又或者后续数据都将不断写入起始地址,刷新起始地址上的数据。(FIXED 模式)
在这里插入图片描述

FPGA 开发流程 基本步骤

1)需求分析:做一个项目之前,我们首先需要对项目需求进行详细分析,提取项目需求需要实现什么功能;
2)系统设计:根据项目需求我们就可以进行系统架构设计,架构设计主要是将系统分为哪些模块,数据流怎么走,控制流怎么走,以及计算系统运行的带宽和评估系统的工作频率;
3)硬件选型:根据系统架构分析结果,我们就可以来选择合适规模和性能的 FPGA 芯片,这个工作称为 FPGA 器件选型,然后根据 FPGA 型号选择合适的 FPGA 板卡。FPGA 器件选型是一个综合性的工作,和项目成本、FPGA 容量和性能、FPGA 器件熟悉程度等都有关系,等大家成为大牛后可能才会有一些切身体验;
4)绘制系统框图:确定系统内各个子模块的结构层次,梳理系统对外的输入输出信号和子模块之间的交互信号;
5)绘制波形图:根据该模块的功能并且结合芯片的数据手册或者接口协议,确定模块接口信号的时序关系,然后使用绘图软件绘制各个模块的时序波形图;
6)编写 RTL 代码:使用代码编辑软件严格按照上面的波形图编写各模块的代码;
7)软件仿真:首先按照 RTL 代码的输入激励需求,编写对应的仿真代码,然后使用仿真工具对编写的RTL 代码进行仿真。仿真过程中如果 RTL 代码有语法错误,仿真工具下面的提示框会显示语法报错详细信息,可以对照该信息修改 RTL 代码,直至 RTL 代码语法错误修改完毕,才能出现仿真波形。然后观察仿真的波形图是否与我们绘制的时序波形一致,如果两者一致,接下来就可以新建工程,如果不一致,则需要通过修改代码使仿真波形与我们绘制的时序波形一致。
8)新建工程:使用 FPGA 开发平台新建工程并添加我们前面编写的 RTL 代码;
9)分析与综合:对工程进行综合编译,通过观察综合编译生成的报告可以帮助避免最常见的设计错误,以便对设计进行分析和改进;
10)约束输入:在 FPGA 开发平台对工程引脚进行约束,引脚约束完成后就可以进行布局布线与生成下载文件;
11)设计实现:就是工程布局和布线的过程。它的作用是将综合生成的逻辑网表配置到具体的 FPGA 芯片上。布局布线完成后,就可以生成下载文件了,下载文件生成成功就可以进行下一步的上板验证。
12)上板验证及调试:连接好开发板与下载器,将生成的下载文件通过下载器下载到开发板,然后观察开发板的实物运行是否正常,如果上板实验现象正常,则说明前期设计与代码编写都正常;如果上板实验现象不正常,可以通过迭代前面设计的每一步来查找问题,如果发现前面的步骤都没有问题,那么这时候可以通过在线调试来查找问题,直到解决问题,上板验证现象正常。

我的testbench的写法能力比较差 现在学习一下 tb的编写
`timescale 1ns / 1ns //仿真单位/仿真精度
这个 仿真单位是 我们在波形图上能够看到的单位
仿真精度是我们所能预见的最小精度
在这里插入图片描述

对于XDC 管脚约束文件的编写 我们可以在系统中配置完 让它自动生成xdc文件

Name:工程中顶层端口的名称。
Direction:说明管脚是输入还是输出。
Neg Diff Pair:负差分对,差分信号在 I/O Ports 窗口中只显示在一行里中(只会显示 P 端信号,N 端信号显示在 Neg Diff Pair 属性栏中)。
Package Pin:配置管脚封装。
Fixed:每一个端口都有 Fixed 属性,表明该逻辑端口是由用户赋值的。端口必须保持锁定状态,才能避免生成比特流时不会发生错误。
(Bank,I/O Std,Vcco,Slew Type,Drive Strength:显示 I/O 端口的参数值。)
Bank:显示管脚所在的 Bank。I/O
Std:配置管脚的电平标准,常用电平标准有 LVTTL 和 LVCMOS、SSTL、LVDS 与 HSTL 等
Vcco:选择的管脚的电压值。
Vref:在我们的设计中,硬件上 VREF 引脚悬空。
Drive Strength:驱动强度,默认 12mA。
Slew Type:指上升下降沿的快慢,设置快功耗会高一点,默认设置慢(slow)。
Pull Type:管脚上下拉设置,有上拉、下拉、保持与不设置。
Off-Chip Termination:终端阻抗,默认 50Ω。
IN-TERM:是用于 input 的串联电阻。

verilog 的逻辑值 的设计
Verilog 的逻辑值我们先看下逻辑电路中有四种值,即四种状态:
逻辑 0:表示低电平,也就是对应我们电路的 GND;
逻辑 1:表示高电平,也就是对应我们电路的 VCC;
逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。

再次重申晶振 与系统时钟 之间的 关系 我们 发现晶振是 50MHz 那么 这样 算下来 时钟周期 就是 1/50M = 0.02us
0.02 微秒 就是 20ns
1秒等于10亿纳秒 我们 会发现
计算 0.5s 就是用 0.5/20ns = 25000000 个时钟周期

添加时钟约束的方法
约束的方法是在 XDC 文件中添加如下语句:create_clock -period 20.000 -name sys_clk [get_ports sys_clk]
“create_clock”是该命令的名称,它会创建一个时钟
;其后的“-name sys_clk”、“-period 20”、“[get_ports sys_clk ]”都是该命令的各个参数
,分别表示所创建时钟的名称是“sys_clk”、时钟周期是20ns
、时钟源是 sys_clk 端口,一般只对输入的时钟做周期约束。
在这里插入图片描述

点击“Edit Timing Constraints”按钮后,Vivado 就会打开“Timing Constraints”界面,我们点击该界面下的“+”号按键就可以添加时钟约束了,如下所示:
在这里插入图片描述

点击“+”号后,弹出的“Create Clock”界面如下所示:
在这里插入图片描述

“Create Clock”界面中各参数定义如下:
1、Clock name:时钟名称,用于为所创建的时钟约束命名。为了可以一眼看出该时钟约束的约束源,
通常情况下其命名与被约束的时钟信号名相同,因为我们要对系统时钟(sys_clk)进行约束,所以这里我们
将其命名为 sys_clk。
2、Source objects:源对象,用于指定被约束的时钟对象,具体操作我们稍后进行讲解。
3、Waveform:波形,用于设置时钟的周期(Period),上升沿(Rise at)、下降沿(Fall at)以及勾选
Add this clock to the existing clock(是否将该时钟添加到现有时钟中)。因为我们的系统时钟为 50MHz(即
一个时钟周期为 20ns),占空比为 50%,所以 Period 设置为 20,Rise at 设置为 0,Fall at 设置为 10。因为
Add this clock to the existing clock 选项是在同一个约束源时钟存在多个时钟频率且每个时钟频率都需要进行
约束的情况下才需要勾选的,而我们的系统时钟只有一个频率,所以无需勾选。
4、Command:命令,即通过我们上述的配置后,vivado 自动生成的约束命令,该命令是可以直接复制
粘贴到 XDC 文件中使用的。
下面我们就来介绍下如何指定被约束的时钟对象,这里需要点击“Source objects”框后的“…”指定时
钟源对象,如下图所示:

点击“…”后弹出的“Specify Clock Source Objects”界面如下所示:

“Specify Clock Source Objects”界面中“Find”之上的各个选项主要用于设置筛选条件,因为系统时钟
来自于 IO 口,所以“Find names of type(寻找名称类型)”选择“I/O Port”,其余选项保持默认,我们直
接点击“Find”按钮,如下所示:

在找到的信号中,我们选择需要约束的系统时钟信号(sys_clk)然后点击“→”按钮将其添加到右侧窗
口,如下图所示

之后我们点击“Set”即可将该信号定义为源对象,此时的“Create Clock”界面如下所示:

至此,时钟约束配置完成,我们点击“OK”即可添加约束并关闭“Create Clock”界面。此时的“Timing
Constraints”界面如下所示:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SQL INSERT INTO 语句(在表中插入)

SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新的数据行。 SQL INSERT INTO 语法 INSERT INTO 语句可以用两种形式编写。  第一个表单没有指定要插入数据的列的名称,只提供要插入的值,即可添加一行新的数据: INSERT INTO table_n…

【Bug】8086汇编学习

文章目录 随笔Bug1、masm编译报错:Illegal use of register2、debug中使用段前缀3、[idata]在编译器中的处理4、push立即数报错5、报错:improper operand type6、程序莫名跳转到未知位置 (doing)7、DOSBox失去响应8、程序运行显示乱码9、程序运行导致DOS…

Redis 命令—— 超详细操作演示!!!

内存数据库 Redis7 三、Redis 命令3.1 Redis 基本命令3.2 Key 操作命令3.3 String 型 Value 操作命令3.4 Hash 型 Value 操作命令3.5 List 型 Value 操作命令3.6 Set 型 Value 操作命令3.7 有序Set 型 Value 操作命令3.8 benchmark 测试工具3.9 简单动态字符串SDS3.10 集合的底…

Layui 主窗口调用 iframe 弹出框模块,获取控件的相应值

var iframeWindow window[layui-layer-iframe index]; iframeWindow.layui.tree............(这里就可以操作tree里面的内容了)。var chrild layero.find(iframe).contents(); chrild.layui.tree (这样是调用不到的)。var child layer.getChildFrame(); child.layui.tree(这…

IOS(刘海/留海/流海)屏幕判断

IPhone 8 没刘海屏幕 示例代码: // // ViewController.m // IOS_SAFEAREA_TEST // // Created by Hacker X on 2023/10/14. //#import "ViewController.h"interface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad]…

使用 VS Code 作为 VC6 的编辑器

使用 VS Code 作为 VC 6.0 的编辑器 由于一些众所周知的原因,我们不得不使用经典(过时)的比我们年龄还大的已有 25 年历史的 VC 6.0 来学习 C 语言。而对于现在来说,这个经典的 IDE 过于简陋,并且早已不兼容新的操作系…

【C++进阶之路】IO流

文章目录 一、C语言的IO1.键盘与显示屏2. 文件与内存3.字符串与内存 二、CIO1.iostream1.1基本使用1.2operator bool 2. fstream2.1二进制的文件读写2.2字符串的文件读写 3. sstream3.1序列化与反序列化3.2拼接字符串3.3将数据类型转换为字符串 总结 一、C语言的IO 1.键盘与显…

渗透测试工具(3)Burpsuite

笔记目录 渗透测试工具(1)wireshark渗透测试工具(2)Nmap渗透测试工具(3)Burpsuite 1.简介 是Web应用程序测试,请求的拦截和修改,扫描web应用程序漏洞,以暴力破解登陆表单,执行会话令牌等多种的随机性检查。 (1)模块介绍 ①Intercept:用于显示和修改Ht…

JavaScript从入门到精通系列第二十二篇:JavaScript中的toString方法和JavaScript中的垃圾回收

文章目录 一:toString方法 1:怪异的返回值[object Object] 2:打印对象成为一个JSON 二:垃圾回收(GC) 1:垃圾回收概念 2:JS当中的垃圾回收机制 3:JS中的垃圾回收算…

python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法

python中的yolov5结合PyQt5,使用QT designer设计界面没正确启动的解决方法 一、窗体设计test: 默认你已经设计好了窗体后: 这时你需要的是保存生成的untitle.ui到某个文件夹下,然后在命令行中奖.ui转换为.py(,通过​​…

抖音同城榜:探索城市新潮流

随着科技的飞速发展,短视频已经成为了人们日常生活中不可或缺的一部分。作为短视频领域的佼佼者,抖音一直致力于为用户带来更丰富、更有趣的短视频内容。抖音同城榜应运而生,成为了最新、最热门的话题聚集地,吸引了大量潮流达人和…

微信小程序之授权登录以及授权登录流程讲解

前言: 之前博主给大家介绍了小程序的授权登录案例,今天我使用结合项目,后台的方式来给大家展示 一,微信授权登录流程 步骤流程: 1.小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器 2.开…

Godot 官方2D C#重构(2):弹幕躲避

前言 Godot 官方 教程 Godot 2d 官方案例C#重构 专栏 Godot 2d 重构 github地址 实现效果 技术点说明 异步函数 Godot的事件不能在Task中运行,因为会导致跨线程的问题。 //这样是不行的,因为跨线程了,而且会阻塞UI线程,具体原因…

DELTA TAU ACC-24E2A 如何开始学习机器人技术

DELTA TAU ACC-24E2A 如何开始学习机器人技术 如果你想成为机器人革命的一部分(彻底改变我们的生活和工作方式,而不是真正推翻人类),Simplilearn有你需要的东西。这人工智能和机器学习训练营与IBM和加州理工学院合作,涵盖了与机器人相关的重…

DLP是如何防止数据泄露的?

根据相关调查数据,未来五年全球企业数据泄露防护(DLP)市场预计将以21.03%的复合年增长率高速增长,到2026年市场规模将达到62.65亿美元。 PC访问地址:获取详细资料 https://isite.baidu.com/site/wjz012xr/2eae091d-1b…

【Javascript】构造函数的参数写法

目录 写法一(固定参数): 写法二(对象类型的参数) 写法一(固定参数): 如果参数与参数的值不对应 写法一 要求位置严格对应,明确知道对象的属性 写法二(对象类…

Shader Graph25-UV移动旋转缩放(自定义函数)

我们将UV操作放入函数内,该函数的内容来自我之前的文章 Shader Graph24-摇晃树叶-CSDN博客 一、UE在Material中右键,新建Material Function。 增加输入 二、新建Material,命名为DemoUVRotationUseFunction Offset为偏移值,Rotat…

Vue基础与常用指令,Element基础

1.vue快速入门 vue概述 Vue是一套构建用户界面的渐进式前端框架 只关注视图层,并且非常容易学习,还可以很方便的与其它库或已有项目整合 通过尽可能简单的API来实现响应数据的绑定和组合的视图组件 特点 易用:在有HTMLCSSJavaScript的基…

Python 机器学习入门之K-Means聚类算法

系列文章目录 第一章 Python 机器学习入门之线性回归 K-Means聚类算法 系列文章目录前言一、K-Means简介1、定义2、例子3、K-Means与KNN 二、 K-Means实现1、步骤2、优化2.1 初始化优化之K-Means2.2 距离优化之elkan K-Means 三、优缺点1、优点2、缺点 前言 学完K近邻算法&a…

操作系统【OS】进程的通信

共享存储 各个进程对共享空间的访问应该是互斥的(可以使用P、V操作)低级通信 基于数据结构的共享速度慢、限制多高级通信 基于存储区的共享数据的形式、存放的位置由通信进程控制速度快 消息传递 进程间的数据交换以格式化的消息为单位 消息头&#…