一、常用

1.解释竞争与冒险的概念:

在组合电路中,某一输入变量经过不同途径传输(信号改变或进行一些逻辑运算),到达电路中某一汇合点的时间有先有后,这种现象称竞争(Race)。竞争的结果将很可能导致冒险(Hazard)发生(例如产生毛刺),即输出信号没有能完全同步改变,从而引发短暂时间内的错误信号脉冲输出。(即由于竞争产生毛刺叫做冒险)。
竞争不一定产生冒险,但有冒险一定有竞争。

补充:
1.信号在器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在冒险

2.在对组合逻辑电路进行分析及设计时,通常没有考虑器件的延时问题,而实际器件是存在延时的,竞争冒险现象就是由于器件的延时造成的。

3.毛刺不一定会造成危害。避免冒险的最简单的方法是同一时刻只允许单个输入变量发生变化(选通信号),或者使用寄存器采样(打拍——获取确定的电平)的办法。

寄存器:由具有存储功能的触发器组合起来构成的。按功能可将寄存器分为基本寄存器和移位寄存器。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器则比较灵活。在计算机领域,寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的
存储器Block,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能。根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射

触发器:当CLK到来时电路中的存储单元才被“触发”而动作,并根据输入信号改变输出状态。把这种在时钟信号触发时才能动作的存储单元电路称为触发器,以区别没有时钟信号控制的锁存器。
存储器本身没有地址,给存储器分配地址的过程叫存储器映射

如何消除竞争与冒险:

1、加滤波电路,消除毛刺的影响;
2、加选通信号,避开毛刺;
3、增加冗余项消除逻辑冒险。

具体层面应当如何做:

1.可以在输入端并联一个电容器,这主要靠电容的平波作用,来滤去其尖脉冲,使其落在能进行正常逻辑判断的电平值之内,从而消除输出端逻辑出错的可能。
2.在电路上加上一个选通信号,当输入信号变化时,输出端与电路断开,当输入稳定后,选通信号工作,使信号传输到输出端。
3.利用冗余项消除毛刺函数式和真值表所描述的是静态逻辑,而竞争则是从一种稳态到另一种稳态的过程。因此竞争是动态过程,它发生在输入变量变化时。此时,修改卡诺图,增加多余项,在卡诺图的两圆相切处增加一个圆,可以消除逻辑冒险。但该法对于计数器型产生的毛刺是无法消除的。
4.在设计中对所有模块的输入时钟、输入信号、输出信号都用D触发器或寄存器进行同步处理,即输出信号直接来自触发器或寄存器的输出端。这样可以消除尖峰和毛刺信号。

2.时序逻辑电路与组合逻辑电路的区别是什么:

1、输入输出关系
组合逻辑电路是任意时刻的输出仅仅取决于该时刻的输入与电路原来的状态无关
时序逻辑电路是不仅仅取决于当前的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。
2、有无存储(记忆)单元
组合逻辑电路没有存储记忆,时序逻辑电路却包含了存储记忆。
3、结构特点
组合逻辑电路只是包含了电路。但是时序逻辑电路包含了组合逻辑电路+存储电路,输出状态必须反馈到组合电路的输入端,与输入信号共同决定组合逻辑的输出

被综合成电路之后的器件是什么:

时序逻辑:寄存器——D触发器
组合逻辑:线(电线)

在代码中时两种电路如何表现:

时序电路:always @(posedge clk or negedge rst_n) begin … end
组合电路:always @(*) begin … end || assign X=Y

什么是同步时序电路和异步时序逻辑电路

同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系

同步时序逻辑电路:各触发器的时钟端全部连接在一起,并接在系统 时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下 一个时钟脉冲的到来,此时无论外部输入 x 有无变化,状态表中的每个状态都是稳定的。

异步时序逻辑电路:电路中除可以使用带时钟的触发器外,还可以使用不带 时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟电路状态的改变由外部输入的变化直接引起

3:米利状态机和摩尔状态机的区别是什么:

摩尔型(Moore):输出仅仅依赖于当前状态,与输入条件无关;
米勒型(Mealy):输出不仅依赖当前状态而且依赖该状态接下来的的输入条件;

输出时序上Moore状态机同步输出,Mealy状态机异步输出
输出变化上Mealy状态机比Moore状态机领先一个时钟周期

两种状态机均为组合逻辑输出(加上寄存器——D触发器变成时序逻辑输出):组合起来用,会具有更好的时序性能。

Moore类型的更安全,输出总在时钟边沿变化,但会造成延时,需要更多逻辑来对输出进行解码;
Mealy类型的更快,在同一个周期内反应,但会造成异步反馈,且一些时序电路只能Moore类型的来实现

补充:
1.寄存器输出型结构适用于组成时序电路。这种输出结构是在或门之后增加了一个由时钟上升沿触发的D触发器和一个三态门,并且D触发器的输出还反馈到可编程的与阵列中进行时序控制。
2.组合型输出结构适用于组合电路。常见的有或门输出、或非门输出、与或门输出、与或非门输出以及带互补输出端的或门等。
3.与非门是数字电路的一种基本逻辑电路。

4.什么是建立时间和保持时间:(西安)

在这里插入图片描述

建立时间(Tsu):触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间
保持时间(Th):触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间

Tco:数据从被时钟打入到触发器至到达触发器输出端的延时时间

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

补充:
1.对于触发器而言,只有在时钟clk上升沿到来的那一刻才会改变触发器的输出值;
2.在仿真器上,时钟的上升沿或者下降沿是没有延时的(表现为直上或者直下),但是在实际工程中,时钟上升沿或者下降沿是倾斜的,即时钟的上升或者下降是需要一定时间的

3.对于建立时间而言,需要考虑的重点在于:数据经过第一个触发器和组合逻辑logic之后,要比下一个时钟上升沿更快地到达第二个触发器
换言之,当输入数据D在时钟上升沿来之前没有到达传输门,那么当时钟上升沿来之后,采样的数据将会是不确定的。

4.对于保持时间而言,需要考虑的重点在于:数据经过第一个触发器和组合逻辑logic之后,要在时钟上升沿到来之后还能保持一定的时间
否则可能会造成前一寄存器的输出太快导致后一级寄存器来不及采样正确的数据

如果不满足将导致什么?

触发器内部数据的传输也需要一定的时间,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不确定。这时需要经过一个决断时间,其输出才能稳定为0或1,但稳定后的值却并不一定是你的输入值,因为稳定后是0还是1是随机的

亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态

在决断时间里信号是不确定的,振荡毛刺等,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

只要系统中有异步元件,亚稳态就无法避免,同步系统则不会出现。

亚稳态发生的原因
(1)在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求
(2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求。

如何解决:

1.降低系统时钟频率——给予充足的决断时间,让数据稳定下来

2.用反应更快的FIFO——防止保持时间的不足,而导致数据丢失

3.用同步机制
二级触发器——不稳的信号不会进入第二级触发器
同步打拍 ——绕过不稳定的信号

4.改善时钟质量,用边沿变化快速的时钟信号——亚稳态的根源之一就是时钟高低电平不能立即转变

不同比特的数据传输,又如何消除亚稳态:

单 bit 信号:直接多级寄存器同步法,一般采用 2-3 级寄存器进行同步处理,这个 2-3 级寄存器也称作同步器。

多 bit 信号:异步 FIFO 或者使用多次握手同步方法。 在握手协议中,异步的 REQ/ACK 也需要使用单 bit 同步技术进行同步处理,异步 FIFO 也是如此。

5.信号同步—打拍的作用是什么:

在这里插入图片描述

同步操作表现在电路当中是相当于加了一级寄存器,主要用于时序逻辑的设计,也方便进行时序约束。

打拍的时序效果,可以理解为把某个信号延迟了一个或多个时钟周期

将信号打一拍的方法是将信号通过一次寄存器,而且必须在IOB里面的寄存器中打一拍。因为,从FPGA的PAD到IOB里面的寄存器是有专用布线资源的,而到内部其他寄存器没有专用的布线资源。

单比特信号从快速时钟域同步到慢速时钟域仅仅使用打两拍的方式则会漏采数据。

6.什么是图像边缘检测:

边缘检测的目的是标识数字图像中亮度变化明显的点

图像边缘检测大幅度地减少了数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。

1.滤波:输入端输入图像的各元素值的数据元素集,计算所述数据元素的至少一阶和/或二阶导数。
2.增强:增强算法将领域中灰度有显著变化的点突出显示。一般通过计算梯度幅值完成。
3.检测:但在有些图像中梯度幅值较大的并不是边缘点。校正因数α对于由对象的曲率和/或所述数据的模糊造成的边缘错位进行校正。
4.定位:精确确定边缘的位置。

7.UART协议的内容是什么:(北京—代码)

是一种全双工、异步、串行通信方式的通用异步收发传输器:
发送数据时将并行数据转换成串行数据来传输,
接收数据时将接收到的串行数据转换成并行数据

在这里插入图片描述

速率大小是多少:

在这里插入图片描述

什么是起始位?

开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为空闲位一直是高电平所以,可以开始第一次通讯时先发送一个明显区别于空闲状态的信号(即低电平)代表起始位,开始传输数据。

校验位是什么:

一般为奇偶校验位:
数据位传送完成后,要进行奇偶校验,
奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。让‘1’保持为奇数。
偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。让‘1’保持为偶数。

补充:
停止位(高电平)不仅仅是表示传输结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

8.什么是IIC协议?(北京—描述)中间采样时是什么状态:

集成电路总线,是一种两线式串行总线。
由数据线 SDA 和时钟线 SCL 构成通信线路,既可用于发送数据,也可接收数据,是一种同步半双工通信协议。

只有在SCL为高电平的,SDA为稳定信号时,才会对数据采样。即在SCL为低电平的时候,SDA就要准备好。

在这里插入图片描述

补充:
每发送一个字节(8bit),就必须在第 9 个 SCL脉冲期间释放 SDA,由接收端反馈一个应答信号
谁接收数据就由谁发应答信号

应答信号为低电平(为 0)时,称为有效应答位(ACK)
应答信号为高电平(为 1)时,称为非应答位(NACK),表示接收端接收该字节(8bit)失败。

数据接收失败或者数据传输结束都要发送 NACK
起始信号、停止信号是由主机主动建立的

9.阻塞赋值和非阻塞赋值的区别是什么:

1.阻塞和非阻塞赋值的区别在阻塞是顺序执行而非阻塞是并行执行
2.阻塞赋值操作符用等号(即=)表示,而非阻塞赋值用小于等于号(即<=)表示
3.阻塞赋值在顺序安排不好时会出现竞争。非阻塞赋值允许其他的Verilog语句同时操作。

4.
非阻塞赋值:在时钟上升沿到来时,阻塞赋值的执行可以认为是有两个步骤的操作。赋值开始,先执行赋值语句右边的值然后将begin-end之间的所有赋值语句同时赋值到赋值语句的左边,赋值结束,更新左边的值
阻塞赋值和时钟沿无关,阻塞赋值的执行可以认为是只有一个步骤的操作。在赋值时先计算等号右手部分的值,这时赋值语句不允许任何别的Verilog语句的干扰,直到现行的赋值完成时刻,才允许别的赋值语句的执行

补充:
注意:是begin—end之间的所有语句,一起执行,且一个时钟只执行一次。即非阻塞赋值允许其他的Verilog语句同时进行操作——并行执行
非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能用在"initial”块和“always@"块等过程块中,而且非阻塞赋值不允许用于连续赋值

如果在一个过程块中阻塞赋值的RHS变量正好是另一个过程块中阻塞赋值的LHS变量,这两个过程块又用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即如果阻塞赋值的顺序安排不好,就会出现竞争。若这两个阻塞赋值操作用同一个时钟沿触发,则执行的顺序是无法确定的。

在同一个always语句块中不允许两种赋值都用;
不允许同一个变量在不同的always语句块中被赋值。
为了不出错,不要在时序逻辑中用阻塞赋值。

10.FPGA 和ASIC开发的区别

利用 EDA 技术进行电子系统设计的最后目标是完成专用集成电路 ASIC 的设计和实现;即ASIC设计是用CPLD(复杂可编程逻辑器件)和 FPGA(现场可编程逻辑门阵列)来进行的

ASIC是一种在设计时就考虑了设计用途的IC。FPGA也是一种IC。
ASIC基本都是基于标准单元开始设计。ASIC在离开生产线后再也无法改变。ASIC设计流程非常昂贵,周期长
FPGA基于预制的门和触发器。如果有错误,可以在几秒钟内重新编程,周期短,是一种半定制电路

ASIC在设计中浪费的材料非常少。对于FPGA,总是有很多的硬件资源被浪费。这意味着FPGA的重复成本通常高于同类ASIC的重复成本
尽管ASIC的重复成本非常低,但其非重复成本相对较高且通常达到数百万。由于它是非重复性的,因此每个IC(集成电路)的成本随着量的增加而减少。
所以,在ASIC量产到一定量之后,使用ASIC可以比使用FPGA更便宜。与FPGA相比,ASIC在功耗,性能,尺寸和成本方面具有很大优势。

FPGA就是输出一个配置文件,告诉 FPGA芯片该怎么样去配置其电路,使其实现预期功能。
ASIC就是输出一个版图文件,告诉代工厂该怎么去腐蚀硅片,该怎么连金属

ASIC设计对时钟和复位更加重视。
FPGA多用现成IP,需要考虑资源的均衡

ASIC考虑的永远是性能和功耗,在逻辑选择上除了SRAM,CLK和复位相关,都是手写的,逻辑基本没有浪费,也更加紧凑。
ASIC的逻辑通常远远大于FPGA的,门数上有数量级的差别,运行时钟也远远高于FPGA。

FPGA连线资源有限,所以需要不断地调整,在保证时序要求的情况下,把你的电路映射到其固定的资源分布图中间
ASIC一般是根据周边电路需求,时序要求,把你的电路放到芯片的某个位置。在摆好之后还得考虑连线是否能通,各级延时是否能满足电路的建立和保持时间要求等等

补充:
FPGA(Field Programmable Gate Array-----现场可编程逻辑门阵列)
是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。

11.时钟分频操作(北京—2分频)

偶数分频器的设计较为简单,用一个简单的计数器就可以实现。比如要实现一个N分频(N为偶数)的分频器,可以先写一个计数器,当计数到(N/2-1)时,让输出状态翻转,并将计数器清零,这样输出的信号就是输入时钟的N分频了。

else     //复位信号无效;
	begin
		if(cnt == 4)   //每一次时钟上升沿到来时,都检查一次计数值是否达到4;
		begin
			clk_div10 <= ~clk_div10;
			cnt <= 0; //计数器计数到4后,重新清零;计数值为4意味着已经计了5个周期,这时10分频时钟翻转一次;
		end
		else          //如果计数器未计数到4,则来一个上升沿加1,同时分频时钟继续保持原值不变。
		begin
			cnt <= cnt + 1;           
			clk_div10 <= clk_div10;  //否则继续保持;
		end
	end

奇数分频器的设计比偶数分频器复杂一些,特别是占空比为50%的奇数分频器。如果对占空比没有明确的要求,则可以直接对上升沿计数,计数到(N-1)/2 时让输出翻转,计数到(N-1)时让输出状态再次翻转,并将计数器清零,这样就可以得到一个占空比为2:3的N分频(N为奇数)的分频器。而如果要实现50%的占空比,可以通过“错位相或”的方法实现。具体方法是用刚才的方法先通过对上升沿计数产生一个占空比为不是50%的N分频器,再用同样的方法对下降沿计数产生一个占空比也不是50%的N分频器,最后将两个分频器的输出进行“或”运算,就可以得到占空比为50%的奇数N分频器,


	reg [2:0] div_cnt; //5分频
	
	always@(posedge clk or negedge rst_n) begin
		if(~rst_n) begin
			div_cnt <= 0;
		end
		else if(div_cnt <4) begin
			div_cnt <= div_cnt + 1;
		end
		else 
			div_cnt <= 0;
	
	end
	
	reg clk_div_r, clk_div_rr;
	
	always@(posedge clk or negedge rst_n) begin
		if(~rst_n) begin
			clk_div_r <= 1;
		end
		else if(div_cnt == 1) begin
			clk_div_r <= ~clk_div_r;
		end
		else if(div_cnt == 4) begin
			clk_div_r <= ~clk_div_r;
		end
		else	clk_div_r <= clk_div_r;
	end
	
	always@(negedge clk or negedge rst_n) begin
		if(~rst_n) begin
			clk_div_rr <= 1;
		end
		else clk_div_rr <= clk_div_r;
	end
	
	assign clk_div5 = clk_div_r | clk_div_rr;

总结:

吐词不清,基础不熟,知其然不知其所以然。

二、其他

易失性与非易失性存储器

易失性存储器 :电源关闭时不能保留数据。主要指RAM系列,SRAM和DRAM。
非易失性存储器:电源关闭时能保留数据。主要是指ROM系列(不可随时改写)和FLASH闪存。ROM、PROM、EPROM、OTPRAM、EEPRAM。

补充:
ROM:一旦存储数据就无法再将之改变或删除,且内容不会因为电源关闭而消失。
PROM:可编程。内部有行列式的镕丝。写入所需的数据及程序,镕丝一经烧断便无法再恢复,亦即数据无法再更改。
EPROM:可抹除,可编程。利用紫外线抹除,数据始可被清空,再供重复使用。
OTPROM:一次编程。编程后不能抹除改写。
EEPROM(24LC04B,2Block,4Kbit):电可擦,可复写。
FLASH(M25P16,16Mbit,32扇区):电可擦,可复写,快速,动态抗震性,抗水压,耐温,但有记忆损耗,(扇)区块抹除,读取干扰。

RAM:除刷新时,可随时读写,速度快,对静电敏感,需要通电和刷新,需要刷新正好解释了随机存取存储器的易失性。刷新是指定期读取电容器的状态,然后按照原来的状态重新为电容器充电,弥补流失了的电荷。电容器或多或少有漏电的情形,不断电数据也会随时间流失。
SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM每隔一段时间,要刷新充电一次。
SDRAM:通常DRAM是有一个异步接口的,这样它可以随时响应控制输入的变化。而SDRAM还有一个同步接口,在响应控制输入前会等待一个时钟信号,这样就能和计算机的系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。等待的过程可以发出其它附加指令。这种延迟被称为等待时间
DDR:双倍速率同步动态随机存储器(Double data Rate SDRAM,DDR SDRAM,简称DDR),采用2.5V工作电压,内存数据位宽64位,一个时钟脉冲传输两次数据,分别在时钟脉冲的上升沿和下降沿各传输一次数据,因此称为双倍速率的SDRAM。

事件、进程、敏感信号

事件:当线网型或寄存器型信号的值发生变化时,对电路来说就是产生了一个事件,就需要进行相应的计算
在仿真当中,事件指模型中数值的变化,功能仿真是一种事件驱动的仿真,整个仿真过程都是围绕事件来组织的。
更新事件:在被仿真的电路中,线网或寄存器的值在任何进程中的任何改变都被认为是一个更新事件。
计算事件:由于更新事件产生的,进程的计算,计算事件。
计算事件和更新事件之间循环往复的互相触发,推动仿真时间的前进。

进程是Verilog中的独立执行单元,包括:原语(Primitives), 模块(Moules), initial过程块, always过程块, 连续赋值语句(assign), 异步任务(task)
仿真时,所有的进程都是仿真器按Verilog的语义来顺序执行的,效果是各个进程并行执行的效果在未执行完当前所有的进程时,仿真时间不会向前推进
事件在代码中以@(时间列表/敏感列表)形式出现,事件列表可以有多个,用or分开,也可以用“,”分开,他们之间是“或”的关系。也就是说只要有一个事件产生,就会执行进程语句。事件分为电平信号和边沿信号两种。(posedge:上升沿事件,negedge:下降沿事件。)
进程:行为模型的本质是进程。一个进程可以被看做是一个独立的运行单元,它可能很简单,也可能很复杂,我们可以将数字系统的行为看作很多有机结合的进程的集合。
在Verilog HDL中,描述进程的基本语句是always和initial。Always过程反复执行其中的块语句,而initial过程中的语句块只执行一次。除了always和initial过程块外,一个assign赋值语句、一个实例元件的调用都可以看作是一个进程。
进程的特点:
1-进程只有两种状态,即执行态和等待状态。进程是否进入执行态,取决于是否满足特定的条件,如敏感变量是否发生变化。一旦满足条件,进程即进入执行状态。当该进程执行完毕或遇到停止语句后,即停止执行,自动返回到起始语句,进入等待状态。
2-进程一般由敏感信号的变化来启动
3-各个进程之间通过信号线进行通信。多个进程之所以能同步并发运行,一个很重要的原因就是有进程之间的信号线的通信和协议。
4-一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。
5-进程之间是并发执行的。两个或更多个“always”过程块、“assign”持续赋值语句、实例元件调用等操作都是同时执行的。】

Verilog代码执行的七个步骤

综合:将用行为和功能层表达的电子系统转换成低层次的便于具体实现的模块组合装备的过程。
综合过程将把软件设计的HDL描述与硬件结构挂钩,是将软件转化为硬件电路的关键步骤,是文字描述与硬件相结合的一座桥梁。综合就是将电路的高级语言(如行为描述)转化为低级的,可以FPGA/CPLD的基本结构相映射的网表文件或程序。
当输入的hdl文件在eda工具中检测无误后,首选面临的就是逻辑综合,因此要求hdl源文件中的语句都是可综合的。】

连续赋值、过程性赋值、过程性连续赋值、重新赋值

过程性连续赋值是过程性赋值的一类,即它不能够在 a l w a y s语句或 i n i t i a l语句中出现。这
种赋值语句能够替换其它所有对线网或寄存器的赋值。它允许赋值中的表达式被连续驱动到
寄存器或线网当中。注意,这不是一个连续赋值,连续赋值发生在 i n i t i a l或a l w a y s语句之外。
过程性连续赋值语句有两种类型:
赋值和重新赋值过程语句:它们对寄存器进行赋值。
强制和释放过程性赋值语句:虽然它们也可以用于对寄存器赋值,但主要用于对线网
赋值。
赋值和强制语句在如下意义上是“连续”的:即当赋值或强制发生效用时,右端表达式
中操作数的任何变化都会引起赋值语句重新执行。
过程性连续赋值的目标不能是寄存器部分选择或位选择。
赋值—重新赋值
一个赋值过程语句包含所有对寄存器的过程性赋值,重新赋值过程语句中止对寄存器的
连续赋值。寄存器中的值被保留到其被重新赋值为止。

乒乓缓存

输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口 RAM(DPRAM)、单口RAM(SPRAM)、FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”;在第2个缓冲周期,通过“输入数据选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输出数据选择单元”的选择,送到 “数据流运算处理模块”进行运算处理;在第3个缓冲周期通过“输入数据选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,同时将“数据缓冲模块2”缓存的第2个周期的数据通过“输出数据选择单元”切换,送到“数据流运算处理模块”进行运算处理。如此循环。
可以节约缓冲区空间。
可以达到用低速模块处理高速数据流的效果。

参考:

1.建立时间和保持时间
2.消除亚稳态——异步FIFO
3.异步信号的同步处理
4.打拍与亚稳态
5.状态机
6.UART协议
7.FPGA分频电路实现(奇数,偶数,小数半分频,任意分频)
8. 易失性存储器 // 非易失性存储器
9. Verilog HDL模块代码结构说明
10.过程性连续赋值

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐