FPGA入门介绍
第一部分:FPGA是什么
1. FPGA概念,名词解释。
FPGA中文名称“现场可编程门阵列”,是一种可重复变成的器件,是在PAL(可编程逻辑阵列)、GAL(通用阵列逻辑)、CPLD(复杂可贬称逻辑器件)等传统逻辑电路和门阵列的基础上发展起来的一种半定制电路,主要应用在ASIC(专用集成电路)领域,即解决了半定制电路的不足,又克服了原有可编程器件门电路有限的缺点,其重要的特点是“可重复编程、低功耗、低时延、算力强”。
2. FPGA结构,工作原理
FPGA包括CLB(可配置逻辑模块)、IOB(输入输出模块)、内部连线三大部分,具有和传统的可编程器件所不同的结构。FPGA通过向内部静态存储单元加载编程数据来实现逻辑功能,存储在存储单元中的值来决定逻辑单元的逻辑功能以及各逻辑单元模块之间或模块与I/O之间的连接方式,并最终决定了FPGA所实现的功能。FPGA利用小型查找表来实现组合逻辑,每个查找表连接到一个D触发器的输入端,D触发器用来驱动其他逻辑电路或I/O,由此构成一个既可以试下组合逻辑功能又可以实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属线互相连接或连接到I/O模块
3. FPGA的特点,独有优势
- 很多定制化芯片采用FPGA设计,用户不需要投片生产就可以得到合用的芯片
- 采用FPGA设计ASIC电路,周期短、费用低、风险小、质量稳定
- FPGA采用好书CHMOS工艺,功耗低
- FPGA体系结构、逻辑单元灵活、集成度高、适用范围广
- FPGA兼容了PLD和通用们阵列的优点,可实现大规模的电路
- 可现场重复编程,后期维护成本低
- FPGA是并行计算,可同时满足多功能需求
第二部分 FPGA工程师需要掌握什么技能
1. FPGA工程师必备技能
1、Verilog语言及其于硬件电路之间的关系;
2、器件结构;
3、开发工具(熟练掌握Synplify、vivodo、ISE、Modelsim);
4、数字电路(组合电路,触发器,特别是D触发器构成分频器,奇数倍分频占空比为50%,时序电路,并且能用Verilog语言描叙);
5、熟悉FPGA设计流程(仿真,综合,布局布线,时序分析);
6、熟练掌握资源估算(特别是slice、lut、ram等资源的估算);
7、同步设计原理;
8、熟练掌握基本概念(如建立时间,保持时间,流量(即所做FPGA设计的波特率)计算,延迟时间计算(所做FPGA设计),竞争冒险,消除毛刺的方法等等);
9、具备具体设计经验(对应届生而言如毕业设计);
10、良好的设计思路(流水线设计即熟称打拍子,在速率资源功耗之间的折中考虑)。
11、 在硬实力中,还需要深度学习数字电路、模拟电路、verilog、c和c++语言、计算机硬件知识、arm嵌入式知识、网络相关知识、图像相关知识、数字信号处理相关知识、linux系统,fpga开发,范围从小到bit、时钟、波形图,大到linux操作系统涵盖范围及其广泛
2. FPGA工程师薪资情况
近三年的就业数据看(应届):2020年就业入职学员平均薪资10384.33元,2021年就业入职学员平均薪资11600元,2022年就业入职学员平均就业薪资12626元。比同期应届毕业生薪资高出52%。如果一位有经验3-5年工作经验的工程师,年平均薪资在30-50万。
第三部分 FPGA学习路线
学习路线:
VHDL和Verilog都可以作为入门学习,如果你有C语言基础的话,那么更建议从Verilog开始。
推荐一个刷题的网站:HDLbits。
RTL设计主要有组合电路和时序电路两种,还有状态机。
关于RTL的验证,学习者主要掌握如何写一个简单的测试平台以及如何写一些简单的测试用例。
RTL学习容易犯的错误是用软件编程的思想去学习硬件语言,软件编程大多数是顺序执行的,硬件编程大多数是并行执行的。
对于Verilog掌握比较熟练的朋友可以转向system Verilog语言的学习,现在业界的大公司多选用system Verilog作为开发语言,可以将system Verilog看作是c++,Verilog看作是C语言。
仿真工具:常用的mentor的modelsim以及Synposys的VCS
还有一部分是了解FPGA的开发流程:RTL设计 仿真验证 逻辑综合等
我们需要知道为什么需要这些步骤,以及这些步骤完成什么样的功能。
FPGA主流的开发工具:AMD的vivado还要英特尔的Quartus。
熟悉FPGA的开发流程,怎么创建工程,怎么添加源文件。
熟悉常用的IP的配置和使用:PLL FIFO 存储器等,这些IP可以提高我们的效率,避免重复造轮子,怎么配置和调用这些常用的IP。还有一些复杂的IP,比如NIOS,以太网控制器等,这些复杂的IP初级阶段可能用不到,可以进阶的时候再学习。
熟悉一些硬件调试和时序分析的方法。
关于开发工具的使用,强烈建议配合开发板来学习,比较经典的实验有数码管、流水灯、按键、红绿灯。
总结一下:主要是有四点:编程语言、基础知识、开发工具、动手实验
第一章,看懂原理图
第二章,点亮LED
第三章,简单组合逻辑—多路选择器
1. 相关知识
1.1 组合逻辑
组合逻辑是verilogHDL设计中一个重要的组成部分,从电路的本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没有反馈电路。也就是电路的输出电平变化只跟当前输入信号的电平变化有关,不涉及信号跳变沿的处理。
1.2 多路选择器
多路选择器是数据选择器的别称,在多数数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也成多路选择器或者多路开关
第四章,简单组合逻辑—译码器
1. 相关知识
1.1 译码器
译码是编码的逆过程,在编码时,每一种二进制代码都被赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义翻译出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示原来含义的电路
译码器(decoder)是一类多输入多输出的组合逻辑电路器件,可以分为变量译码和显示译码两类
常见的变量译码器:n-2^n,例如3-8译码器
第五章,简单组合逻辑—半加器
1. 相关知识
1.1 半加器和全加器
加法器时数字电路中经常用到的一种基本器件,主要用于两个数或多个数的加和,加法器分为半加器和全加器。
其中半加器电路是指两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。是实现两个一位二进制的加法运算电路
而全加器是在半加器的基础上的升级版本,除了加数和被加数加和外还要加上上一级传进来的进位信号
第六章,层次化设计
1. 相关知识
1.1 层次化设计
数字电路中根据模块层次不同有两种基本很结构设计方法,自底向上的设计方法和自顶向下的设计方法
自底向上:的设计是一种传统的设计方法,对设计进行逐次划分的过程是从存在的基本单元触发的,由基本单元构建高层单元,依次向上,直至构建系统
自上而下:从系统级开始,把系统分为基本单元,然后再把每个单元划分为下一层次的基本单元,一直这样做下去,知道直接可以用eda元件库中的原件实现为止
第七章,避免Latch的产生
1. 相关知识
1.1 Latch的简介
Latch其实就是锁存器,是一种在异步电路系统中,对输入信号电平敏感的单元,用来存储信息。
锁存器在数据未锁存是,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号用效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入时透明的
1.2 异步电路和同步电路
异步电路:异步电路主要是组合逻辑电路,用于产生FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才会发生变化
同步电路:同步电路时由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的
1.3 Latch的危害
对毛刺敏感,不能异步复位,复杂的静态时序分析,占用更多的逻辑资源,额外的延时
1.3 几种产生Latch的情况
- 组合逻辑中if-else条件分支语句缺少else语句
- 组合逻辑中case条件分支语句条件未完全列举,且缺少default语句
- 组合逻辑中输出变量赋值给自己
第八章,时序逻辑的开始—寄存器(梦的开始)
1. 相关知识
1.1 寄存器的简介
在组合逻辑电路中 ,存在一个巨大的缺点就是存在竞争冒险,竞争冒险的知识可以参考数字电路相关的书籍,这里不再作过多赘述,竞争冒险这个问题在电路中是非常危险的它会是我们电路处于一个不稳定的状态(考研复试常见考题,必背内容!),那么我们使用时序逻辑,就可以很大的避免这个问题,提高系统的稳定性。
时序逻辑最基本的单元就是寄存器,它具有存储功能,一般是由于触发器和锁存器构成,由时钟脉冲控制。通常来说,将只能存储一位数据的电路叫做存储单元,将用于存储一组数据的存储电路叫做寄存器,例如每个D触发器(D Flip Flop,DFF)能够存储一位二进制码,由N个D触发器可以构成N位寄存器。在实际芯片中寄存器一般按照字节位数设计,所以一般有8位寄存器,16 位寄存器等等。
D触发器的工作原理:在一个脉冲信号(一般为晶振产生的时钟脉冲)上升沿或者下降沿的作用下,将信号从输入端D送到输出端Q,如果时钟脉冲信号的边沿信号未出现,即使输入信号改变,输出信号仍然保持原值,且寄存器应用复位清零功能,其复位又分为同步复位和异步复位
第九章,阻塞赋值与非阻塞赋值
1. 相关知识
1.1 阻塞赋值
阻塞赋值的赋值号用“=”表示,对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他Verilog语句的干扰,直到现行的赋值完成,才允许下一条赋值语句的执行。
a = 1,b = 2,c = 3,
begin
a = b+1;
b = a+1;
c = a+1;
end
// 结果:a=3,b=4,c=4
1.2 非阻塞赋值
非阻塞赋值的赋值号用“≤”表示,对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值,它的操作可以看作为两个步骤的过程:在赋值开始时刻,计算赋值号右边的语句,在赋值结束时刻,更新赋值号左边的语句。
在计算非阻塞赋值语句赋值号右边的语句和更新赋值号左边的语句期间,允许其他的verilog语句同时进行操作
非阻塞操作只能用于对寄存器类型变量进行赋值,因此只能用于“initial”“always”块中,不允许用于连续赋值变量“assign”。
简单理解就是说阻塞语句是顺序执行的,非阻塞语句是并行同时执行。
第十章,使用寄存器实现具有计数器功能的电路
1. 相关知识
学会了计数器的使用,我们可以做很多的事情,可以毫不夸张的讲,在FPGA的设计当中,一切与时间有关的设计,都会用到计数器(在相关的大学专业课程中,也是期末考试必考题目),这里,我们对计数器的相关知识做一个系统的讲解,在实战部分,我们会通过项目工程来实现一个具有计数器功能的电路
1.1 计数器
计数是一种最简单最基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,比如说时钟脉冲,以达到实现测量、计数和控制的功能,同时兼有分频功能。
计数器在数字系统中应用广泛,如电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等
由计数器进行计数的是由外部的晶振产生的时钟,所以我们可以精确的控制具体需要计数的时间
计数器清零有两种情况:计数器记满了自动清零、计数器计数到我们需要的值后进行清零
第十一章、,verilog变量类型的选择方法
当使用initial进行赋值是,变量需要reg型
reg(寄存器)类型:
- 用于存储可变的值,如状态机的状态、计数器的计数值等。
- 通常在
always
块内部声明,用于描述时序逻辑。 - 也可以在模块的端口声明中使用,表示该端口是一个输出端口,其值由
always
块控制。 - 当使用
initial
语句进行初始化时,必须声明为reg
类型,因为initial
用于初始化时序逻辑。
reg led_out; initial led_out = 1'b0;// 正确的初始化reg类型变量
wire(线网)类型:
- 用于表示纯粹的信号传输,不能存储值,只是连接不同模块或逻辑之间的中介。
- 不能在
always
块中赋值,只能由连续赋值语句(如assign
)或模块端口驱动。 - 适用于表示组合逻辑的输出,如多个逻辑门的连接。
wire net1; assign net1 = a & b;// 使用assign语句连续赋值给线网类型变量
integer(整数)类型:
- 用于存储整数值,适用于计数器、循环语句中的计数变量等。
- 可以在
initial
或always
块中声明和初始化。 - 通常用于描述非位宽可变的值,如地址计数器。
integer i; initial i = 0;// 正确的初始化integer类型变量
real(实数)类型:
- 用于表示实数,适用于模拟模型或需要实数计算的场景。
- 可以在
initial
或always
块中声明和初始化。 - 在数字逻辑设计中使用较少,更多用于模拟或混合信号设计。
parameter(参数)类型:
- 用于存储常量值,适用于定义固定参数、数组大小等。
- 只能在模块的声明部分使用,不能在
always
块中声明。 - 一旦赋值,其值在仿真过程中不可更改。
parameter DELAY = 10;// 定义一个常量参数
localparam(局部参数)类型:
- 类似于
parameter
,用于存储常量值。 - 只能在
initial
或always
块中声明,用于在特定作用域内定义常量。 - 其值在仿真过程中不可更改。
localparam COUNTER_MAX = 100;// 定义一个局部参数
- 类似于
在选择变量类型时,还需要考虑以下因素:
- 时序逻辑:对于需要在时钟边沿更新的变量,通常使用
reg
类型。 - 组合逻辑:对于不需要在时钟边沿更新的变量,通常使用
wire
类型。 - 存储需求:对于需要存储计算结果或状态的变量,使用
reg
或integer
类型。 - 常量定义:对于不需要改变的值,使用
parameter
或localparam
类型。
正确选择变量类型有助于提高代码的可读性和仿真效率,同时也能确保设计的正确实现。
第十二章,分频器—偶分频
1. 相关知识
分频器是数字系统设计中最常见的基本电路之一。所谓“分频”,就是把输入信号的频率变成成倍数的低于输入频率的输出信号。
分频器分为偶数分频器和奇数分频器,和计数器非常类似,有时候甚至可以说是一个东西。
在《Verilog HDL数字系统设计与实践》中是这样说道:偶数倍分频只需要一个简单的计数器就医可以实现,且分频后的始终占空比可以达到50%。奇数倍分频器只使用计数器是无法达到50%的占空比的,需要利用输入时钟的上、下沿进行计数,产生两个非50%的占空比的奇数分频时钟,然后将两个时钟做异或运算,既可以得到占空比为50%的奇数分频器
1.1 为什么要进行分频
一般来说,在我们的开发板上只有一个晶振,这就表示只有一种频率的选择,但是在实际的应用开发时,经常需要对基准时钟进行分频,得到各个模块所需要的频率,如果想要得到比基准时钟更慢的时钟,则需要对基准时钟进行分频,如果想要更快的时钟,则需要进行倍频
第十三章,按键消抖
1. 相关知识
按键是最常见的电子元器件之一,在电子设计中应用广泛;在日常生活中,遥控器、玩具、计算器等等电子产品都使用按键,在FPGA的实验工程中,我们可以使用其作为系统复位信号或者控制信号的外部输入。
按键消抖主要针对的是机械弹性开关,当机械触电断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随一连串的抖动,未来保证系统能正确识别按键的开关,就必须对按键抖动进行处理,这就是按键消抖
接下来就是使用软件消抖的方法来解决这个问题
第十四章,呼吸灯
1. 相关知识
在本节内容当中,我们使用Verilog HDL语言和FPGA开发板实现呼吸灯的一个效果
第十五章,状态机
1. 相关知识
状态机相信大家都有听说过,FPGA是并行执行的,如果说我们想要处理一个前后顺序的事件该怎么办呐,这时候就需要我们的状态机来完成了,这一节很重要。我们从原理、实践应用来给大家总结状态机的原理和方法。
状态机简写FSM,也称为同步有限状态机,我们一般简称为状态机。这里的同步是指在状态机中,所有的状态跳转都是在时钟的周围下进行的。有限表示状态机中状态的个数是有限的。
有限状态机是用老记录电路当前状态的一种电路结构。它包含一组存储器和一系列的外围组合逻辑电路。存储器记录电路的当前状态,而组合逻辑是用来根据当前的状态和当前输入,运算出电路的下一个状态。计算出的下一个状态在书中的下一个边沿被状态机的存储器组读取并存储下来,可以改变电路的状态。因此,对于状态机中的寄存器组,总是存在一条组合逻辑贿赂,将寄存器的输出端口连接到它的输入端口。
同步有限状态机分为两种。第一种被称为Mealy机(谐音:米粒状态机),即状态机的输出不仅决定于状态机的当前状态,还决定于当前时刻的输入。也就是说是基于它的当前状态和输入生成输出的有限状态自动机(更精确的叫有限状态变换器)。这意味着它的状态图将为每个转移边包括输入和输出二者。米利型有限状态机_百度百科 (baidu.com)
另一种同步状态机被称为Moore状态机(谐音:摩尔状态机),与Mealy状态机不同的是Moore机的输出值决定状态机的当前状态,与当前输入没有关系。下面是Moore状态机的结构示意图:
第十六章,SPI、I^2C等通信接口及实验案例
1. 相关知识
第十七章,字模显示
1. 相关知识
第十八章,简易DDS信号发生器的设计与验证
1. 相关知识
DDS是直接数字式频率合成器,是一项关键的数字化技术,几乎在fpga中涉及到信号的项目都会与DDS产生一定的联系,可见它的重要性。因为可以用它来产生方波三角波、锯齿波等不同频率不同相位的信号波形。建议翻阅EDA相关的书籍,里面有详细的公式。
与传统的频率合成器相比,DDS具有成本更低、低功耗、高分辨率和快速转换时间的优点。
DDS的基本结构一般来说可以由四部分或者五部分来组成,分别是相位累加器、相位调制器、波形数据表ROM、D/A(数模)转换器。有的设计当中还会增加一个低通滤波器。低通滤波器的作用是对信号的积分,
第十九章,图像处理,边缘检测
1. 相关知识
第二十章,RS232
1. 相关知识
UART是一种通用异步收发传输器,
UART是一种通用的数据通信协议,也是异步串行通讯口的总称,它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。
包括RS232,RS499,RS422和RS485等接口标准规范和总线标准规范
SPI和I2C是同步串行通信接口
UART,是全双工通信,在数据发送和接收端都有独立的端口。可以同时进行数据的收和发
名称 | 符号 | 数据方向 | 说明 |
---|---|---|---|
发送数据 | RXD | DTE←DEC | Receive Data,数据接收信号,即输入 |
接收数据 | TXD | DTE→DCE | Transmit Data,数据发送信号,即输出。两个设备之间的TXD、RXD应交叉相连 |
名词解释:
码元:在信息传输的通道中,携带信息的信号单元
码元传输速率(波特率Baud):每秒钟通过信道传输的码元,单位是BPS,波特每秒
比特率:每秒钟通信信道传输的信息量我们称为位传输速率,也叫做比特率,单位bps,每秒比特数
在使用至芯FPGA开发板进行验证UART串口通信实验时,通信接口和B型供电口公用,及供电的同时与上位机可以通信。使用到的通信协议是PS232协议,芯片为PL-2303HX。该器件作为USB-RS232双向转换器,一方面从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为USB数据格式传送回主机。这些工作全部由器件自动完成,开发者无需考虑固件设计。
第二十一章,DHT11数字温湿度传感器
1. 相关知识
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感器技术,确保产品具有极高的可靠性与卓越的长期稳定性。具有成本低、抗干扰力强、长期稳定等优点,可用于暖通空调、除湿器、农业、医疗等相关湿度检测控制
相关文档:DHT11-chinese.pdf (adafruit.com)
湿度测量范围:5%-95%RH,误差为正负5%,没有小数位
温度测量范围:-20%-60%摄氏度,误差为正负2@,精度为0.1摄氏度
注意:测量周期为大于2s
名称 | 单总线格式定义 |
---|---|
起始信号 | 微处理器把数据总线(SDA)拉低一段时间至少18ms(最大不得超过30ms),通知传感器准备数据 |
响应信号 | 传感器把数据总线(SDA)拉低83微秒,再拉高87微秒 以响应主机的起始信号 |
数据格式 | 收到主机起始信号后,传感器一次性从数据总线(SDA)串出40位数据,高位先出 |
湿度 | 湿度高位为湿度证书部分数据,湿度低位为湿度小数部分数据 |
温度 | 温度高位为温度证书部分数据,温度低位为温度小数部分数据,且温度低位Bit8为1则表示负温度,否则为正温度 |
校验位 | 校验位=湿度高位+湿度地位+温度高位+温度低位 |
2. 数据交互时序
参考博客:[FPGA之DHT11温湿度传感器_dht11采集数据的频率-CSDN博客](https://blog.csdn.net/weixin_46628093/article/details/115055623?ops_request_misc=%7B%22request%5Fid%22%3A%22171340380416800178594575%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=171340380416800178594575&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-115055623-null-null.142^v100^pc_search_result_base4&utm_term=fpga dht11&spm=1018.2226.3001.4187)
一次性完整的数据传输为40bit,高位先出,数据格式如下:
8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和数据传输正确是校验和数据等于“8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数”所得结果的末8位
用户发送开始信号后,DHT11从低功耗模式转换为高速模式,等待主机开始信号拉高结束后,DHT11发送响应信号,送出40bit的数据。如果没有接受到主机发送的开始信号,DHT11不会主动进行温湿度的采集
3. 信号持续时间
总线空闲状态为高电平,主机把总线拉低等到DHT11响应,主机把总线拉低必须大于18毫秒,保证DHT11能够检测到起始信号。
DHT11接收到主机的开始信号后,等待主机开始信号结束,然后发送80us低电平响应信号,主机发送开始信号结束后,延时等待20-40us,读取DHT11的响应信号
第二十二章,ADC模数转换芯片的使用—简易电压表的设计
1. 相关知识
模数转换器即AD转换器,简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件或者电路,将经过与标准量比较处理后的模拟量转换为以二进制数值表示的离散信号。模拟信号向数字信号转换过程一般分为四个步骤:采样、保持、量化、编码
ADC芯片:TLC549
实验书:
2. 并行模块的程序思路
3. 串行模块的程序思路
第二十三章,FIFO原理功能及应用,IP核调用
1. 相关知识
FIFO(First In First Out 即先入先出),时一种数据缓冲器,用来实现数据先入先出的读写方式,FIFO根据读写时钟是否相同分为同步FIFO(SCFIFO)、异步FIFO(DCFIFO)
FIFO存储器主要是作为缓存,引用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用;比如:多比特数据做跨时钟域处理(面试容易问)、前后宽带不同步等都用到了FIFO
与RAM或ROM相比,它们的读写方式是按照地址进行读取。FIFO与它们不同,它遵循的是先入先出的读写方式,先被写入的数据,先被读出。FIFO没有地址线, 只有两个端口分别是写入端口和读出端口,使用十分方便
写操作:在进行写操作的时候,需要三路有效信号分别是:写时钟信号、写请求信号、写入数据
读操作: 需要两路有效信号,读时钟信号和有效的读请求信号,输出读取信号
针对多比特跨时钟域处理的处理方式如下:
在A时钟下写入FIFO,在B时钟下读取
针对前后带宽不同步的处理方式如下:
在FIFO设置中,将输入端口设置4位宽,输出端口设置8位宽
第二十四章,RAM原理功能及应用,IP核调用
1. 相关知识
第二十五章,VGA显示器驱动设计
1. 相关知识
VGA翻译为视频图形阵列,是一种使用模拟信号进行视频传输的标准协议,由IBM公司在1987年推出,因其分辨率高、显示速度快、颜色丰富等优点,被广泛应用于彩色显示器领域
VGA引脚定义
在接口中,123,13,14这5个引脚最为重要
VGA显示原理
VGA显示器采用图像扫描的方式进行图像显示,将构成图像的像素点,在行同步信号和场同步信号的同步下,按照从上到下、从左到右的顺序扫描到显示屏上进行图像的显示
VGA时序标准
VESA为例,VGA的时序有两部分构成,行同步时序和 场同步时序,
行同步信号是一个周期性的信号,只有在同步时保持高电平,其他位置保持低电平,基本单位是一个像素点
在行同步时序图中分为6个阶段,但只有在“有效图像”阶段是显示图像,其他阶段都是无效的,起到图像的同步和消隐的作用
与行同步信号不同的是场同步信号的基本单位并不是一个像素点,而是一行,也就是一个完整的行扫描周期。
所以一帧完整的图像信息需要在两个完整的扫描周期下正常显示:行扫描周期和场扫描周期
注意,开发板型号改变Xilinx Artix-7系列,重点在高速接口的设计
第二十六章,RS485串口协议
1. 相关知识
第二十七章,HDMI显示器驱动设计
1. 相关知识
第二十八章,摄像头 DDR3
1. 相关知识
第二十九章,高速接口的实现
1. 相关知识
第三十章,时序约束的介绍
1. 相关知识
第三十一章,高速光通信项目
1. 相关知识
第三十二章,以太网通信
1. 相关知识
开发芯片更换,Xilinx ZYNQ系列,重点在Linux、PYNQ开发、
开发芯片更换,KV260系列,重点在工业视觉开发、
第三十三章,QT上位机串口通信
项目一、12路UART输入,1路UART输出的多路数据采集中集器
项目二、多路图像采集处理卡
做一个多路图像采集“处理卡,采集hdmi,以太网,光纤,mipi等输入的多路视频流然后可以分别对任意视频流进行预处理“算法(例如滤波),然后拼接,再用以太网,光纤pocie等上传到pc上位机“进行复杂算法处理。
【2023全国大学生FPGA创新设计大赛-国一】紫光同创-视频处理魔盒_哔哩哔哩_bilibili
第三十四章,Linux操作系统
第三十五章,FPGA面试问题
- 不理解同步电路和异步电路
- 不理解寄存器复制延时一个时钟周期
- 对状态机以及状态机输出的波形不清楚
- 跨时钟域问题
- FIFO写爆或读满问题
- 模块间数据交互问题
- BRAM和FIFO控制问题
- 时序问题(逻辑级数、流水线、扇出)