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

news2024/12/28 4:14:28

萌新的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.coloradmin.cn/o/1118807.html

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

相关文章

[SQL开发笔记]在windows系统安装Postgres

一、软件简介 PostgreSQL是一种自由软件的对象-关系型数据库管理系统(ORDBMS),它以加州大学计算机系开发的POSTGRES,4.2版本为基础。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发…

5G来临,迎客莱带你探索运营商大数据的应用

随着5G时代的来临,不仅在算力的基础上得到了加强和保障,同时也丰富了计算的方式和模式,如边缘计算、霾计算等。计算方式和模式的改变,对于运营商来说,意味着更丰富的数据维度,更鲜活的数据和更强大的数据处…

1021 个位数统计

#include<bits/stdc.h> using namespace std; map<int,int>mp; int main(){string str;cin>>str;for(auto t:str){int kt-0;mp[k];}for(auto t:mp){cout<<t.first<<":"<<t.second<<endl;} }

find_element_by_id()方法的使用上。这个方法已经被弃用,建议使用find_element()方法替代。

from selenium import webdriver path chromedriver.exe browser webdriver.Chrome(path) url https://www.baidu.com browser.get(url) button browser.find_element_by_id(su) print(button) 修改后代码 from selenium import webdriver path chromedriver.exe browse…

国密https访问

前言 现在的SSL的加密算法实际上主要是国际算法&#xff0c;包括JDK&#xff0c;Go等语言也仅支持国际算法加密&#xff08;毕竟是国外开源项目&#xff09;&#xff0c;hash。随着国密算法的普及&#xff0c;比如openssl就支持国密了&#xff0c;还要新版本的Linux内核也开始…

识别准确率竟如此高,实时语音识别服务

前言 本文将介绍一个准确率非常高的语音识别框架&#xff0c;那就是FunASR&#xff0c;这个框架的模型训练数据超过几万个小时&#xff0c;经过测试&#xff0c;准确率非常高。本文将介绍如何启动WebSocket服务和Android调用这个服务来实时识别&#xff0c;一边说话一边出结果…

2.卷积神经网络(CNN)

一句话引入&#xff1a; 如果我们要做图像识别&#xff0c;用的是一个200x200的图片&#xff0c;那么BP神经网络的输入层就需要40000个神经元&#xff0c;因为是全连接&#xff0c;所以整个BP神经网络的参数量就是160亿个&#xff0c;显然不能这样来训练网络&#xff0c;所以我…

【RNA structures】RNA转录的重构和前沿测序技术

文章目录 RNA转录重建1 先简单介绍一下测序相关技术2 Map to Genome Methods2.1 Step1 Mapping reads to the genome2.2 Step2 Deal with spliced reads2.3 Step 3 Resolve individual transcripts and their expression levels 3 Align-de-novo approaches3.1 Step 1: Generat…

MySQL——八、MySQL索引视图

MySQL 一、视图1、什么是视图2、为什么需要视图3、视图的作用和优点4、创建视图5、视图使用规则6、修改视图7、删除视图 二、索引1、什么是索引2、索引优缺点3、索引分类4、索引的设计原则5、创建索引5.1 创建表是创建索引5.2 create index5.3 ALTER TABLE 6、删除索引7、MySQL…

英语——歌诀篇——歌诀记忆法

介词用法速记歌 年月季前要用in&#xff0c; 日子前面却不行。 遇到几号要用on&#xff0c; 上午下午又用in。 要说某时上下午&#xff0c; 用on换in才可行。 午夜黄昏和黎明&#xff0c; 要用at不用in。 差儿分到几点&#xff0c; 写个“to”在中间。 若是几点过几分&#xf…

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

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

《windows核心编程》第2章 UNICODE字符

一、基础内容 1.1 UNICODE和UTF-8 下面是我个人的理解 UNICODE用2个字节来代表一个字符 UTF-8用1-4个字节来表示一个字符。可变长度的实现原理是ASCII字符只有7位&#xff0c;首位如果是1表示不是ASCII&#xff0c;说明这个字符和后面的字符联合起来形成新字符。 1.2 字符的…

【经历】跨境电商公司目前已在职近2年->丰富且珍贵

我入职了跨境电商公司 *背景 上篇说我在2021-11月离职了&#xff0c;交接期间已经拿到了新公司的offer&#xff0c;然后因上家公司项目交接时间比较长(原因在上篇)&#xff0c;导致新公司这边延迟了两次入职的时间&#xff0c;最后结果是直接无缝衔接了新公司&#xff08;周五…

#电子电器架构 —— 车载网关初入门

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数7000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他…

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]…

类的属性和方法(java)

类和对象的使用 创建类&#xff0c;设计类的成员创建类的对象通过“对象.属性”或“对象.方法”调用对象的结构 代码 public class Per {public static void main(String[] args) {// TODO Auto-generated method stub//创建Person类的对象Person p1 new Person();//Scanne…

清除浮动会对性能有什么影响吗?

清除浮动本身不会对性能产生显著的影响。它只是一种修复布局问题的技术&#xff0c;主要影响的是布局的正确性和可靠性&#xff0c;而不是性能。 然而&#xff0c;使用不当的清除浮动方法可能会对性能产生一些间接的影响。以下是一些与清除浮动相关的潜在性能问题&#xff1a;…

城市正视图(Urban Elevations, ACM/ICPC World Finals 1992, UVa221)rust解法

如图5-4所示&#xff0c;有n&#xff08;n≤100&#xff09;个建筑物。左侧是俯视图&#xff08;左上角为建筑物编号&#xff0c;右下角为高度&#xff09;&#xff0c;右侧是从南向北看的正视图。 输入每个建筑物左下角坐标&#xff08;即x、y坐标的最小值&#xff09;、宽度…

华山论剑:2nm芯片工艺谁更强?

在当今高速发展的科技时代&#xff0c;芯片工艺的重要性不言而喻。芯片制造技术不断突破&#xff0c;使得电子产品性能更高、功能更强大&#xff0c;同时也推动了整个科技行业的快速发展。本文探讨下三星、台积电和英特尔三大芯片制造巨头的工艺技术。 英特尔未来几年的主要目标…

Github Actions实现Spring Boot自动化部署(第二弹)

Github Actions实现Spring Boot自动化部署&#xff08;第二弹&#xff09; 前言 ​ 今天就来讲述一下如何使用GitHub结合Actions实现Spring Boot程序从提交代码到打包、容器化、部署全过程自动化。首先咱们得现有一个能够在本地运行的Spring Boot程序&#xff0c;并且在Githu…