各种时间概念
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器。
保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打出触发器。
传输延时(transmission delay)数据相对于时钟上升沿tc-q后从触发器输出至Q端,则tc-q称为寄存器的传输延时
恢复时间(recovery time)原本有效的复位信号释放后,与紧跟其后的第一个时钟上升沿之间的最小时间。
清除时间(removal time)时钟信号的上升沿,与紧跟其后异步复位信号从有效到无效的最小时间。
亚稳态的产生
在FPGA系统中,如果数据传输中不满足触发器的 Tsu 和 Th 不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。
如何防止亚稳态?
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
解决方法:
1 降低系统时钟频率
2 用反应更快的FF
3 引入同步机制,防止亚稳态传播(加两级D触发器)。
4 改善时钟质量,用边沿变化快速的时钟信号
多时域设计中,如何处理信号跨时域?
不同的时钟域之间信号通信时需要进行同步处理,这样可以防止新时钟域中第一级触发器的亚稳态信号对下级逻辑造成影响。
解决方法:
1 信号跨时钟域同步:当单个信号跨时钟域时,可以采用两级触发器来同步;
2 数据或地址总线跨时钟域: 可以采用异步 FIFO 来实现时钟同步;
3 第三种方法就是采用握手信号。
什么是竞争与冒险现象?怎样判断?如何消除?
在组合电路中, 门电路两个输入信号同时向相反的逻辑电平跳变称为竞争;由于竞争而在电路的输出端可能产生尖峰脉冲的现象称为竞争冒险。 (也就是由于竞争产生的毛
刺叫做冒险)。
判断方法:
•代数法: 如果布尔式中有相反的信号则可能产生竞争和冒险现象,即逻辑函数在一定条件
下可以化简成 Y=A+A’或 Y=AA’则可以判断存在竞争冒险现象(只是一个变量变化的情况) ;
•卡诺图:有两个相切的卡诺圈并且相切处没有被其他卡诺圈包围,就有可能出现竞争冒险;
•实验法+观察法:示波器观测;
解决方法:
1:加滤波电容,消除毛刺的影响;
2:加选通信号,避开毛刺;
3:增加冗余项消除逻辑冒险。
锁存器(Latch)和寄存器(Flip-Flop)概念和区别
电平敏感的存储器件称为锁存器。可分为高电平锁存器和低电平锁存器,用于不同时钟之间的信号同步。
有交叉耦合的门构成的双稳态的存储原件称为触发器(寄存器)。分为上升沿触发和下降沿触发。可以认为是两个不同电平敏感的锁存器串连而成。前一个锁存器决定了触发器的建立时间,后一个锁存器则决定了保持时间。
latch 是电平触发, register 是边沿触发。 register 在同一时钟边沿触发下动作,符合同步电路的设计思想,而 latch 则属于异步电路设计,往往会导致时序分析困难,不适当的应用 latch 则会大量浪费芯片资源。
`timescale
`timescale 1ns / 1ps,含义为:时延单位为1ns,时延精度为1ps
在仿真文件里面需要写,例如
`timescale 10 ns / 1 ns //单位10ns,精度1ns
module test;
reg set;
initial begin
#1 set = 0; //1*10 ns = 10ns
#10 set = 1; //10*10ns = 100ns
end
endmodule
阻塞赋值&非阻塞赋值
阻塞赋值“=”属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕
非阻塞赋值“<=”属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的
在设计电路时,always 时序逻辑块中多用非阻塞赋值,always 组合逻辑块中多用阻塞赋值;在仿真电路时,initial 块中一般多用阻塞赋值
不要在一个过程结构中混合使用阻塞赋值与非阻塞赋值
流水线
流水线设计是verilog设计中基本功之一,是对组合逻辑系统的分割,并在各个部分之间插入寄存器,并暂存中间数据的方法。
流水线操作的目的是把一个大操作分解为若干小操作,因为每一步操作变小了,所以时间更短,频率更快(面积换时间)。流水线在理各个阶段都需要增加寄存器保存中间计算状态,而且多条指令并行执行会导致功耗增加,硬件复杂度增加
函数&任务
函数返回一个值,而任务则不返回值
函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量。
函数只能与主模块共用同一个仿真时间单位,而任务可以定义自己的仿真时间单位。
函数不能启动任务,而任务能够启动其他任务和函数。
不可综合verilog语句
(1)initial:只能在test bench中使用,不能综合。
(2)events:event在同步test bench时更有用,不能综合。
(3)real:不支持real数据类型的综合。
(4)time:不支持time数据类型的综合。
(5)force 和release:不支持force和release的综合。
(6)assign 和deassign:不支持对reg 数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。
(7) fork join:不可综合,可以使用非块语句达到同样的效果。
(8) primitives:支持门级原语的综合,不支持非门级原语的综合。
(9) table:不支持UDP 和table的综合。
(10) 敏感列表里同时带有posedge和negedge
如:always @(posedge clk or negedge clk) begin...end
这个always块不可综合。
(11) 同一个reg变量被多个always块驱动
(12) 延时
以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。
如:a=#10 b;
这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它。也就是说,在综合的时候上式等同于a=b;
(13) 与X、Z的比较
可能会有人喜欢在条件表达式中把数据和X(或Z)进行比较,殊不知这是不可综合的,综合工具同样会忽略。所以要确保信号只有两个状态:0或1。
功耗(Power)等于处理器上的电流值与电压值的乘积,可以反应处理器最大负荷运行、满载工作时电流热效应造成热量释放的大小指标,单位为瓦(W)。总功耗由静态和动态两部分组成
PGA芯片内有两种存储器资源:一种叫block ram,另一种是由LUT配置成的内部存储器(也就是分布式ram)。block ram由一定数量固定大小的存储块构成的,使用block ram,不占用额外的逻辑资源,并且速度快。但是使用的时钟消耗block ram的资源是其大小的整数倍。
FPGA时钟结构:全局时钟、局部时钟和I/O时钟
MMCM、PLL即时钟管理模块,用来消除时钟的延迟、抖动以及产生各种不同频率的时钟。
MMCM相对PLL的优势就是相位可动态调整,但PLL占用的面积更小。
一个属于单片机STM32(顺序处理) ,一个属于可编程阵列FPGA(并行处理)
RAM随机读取存储器,掉电丢失 ROM只读存储器 Flash memory 是“闪存” EEPROM可以一次只擦除一个字节
单端口RAM:只有一组地址线数据线 伪双口RAM,一个端口只读,一个端口只写
同步复位&异步复位
同步复位:只有在时钟沿到来时复位信号才起作用,复位信号持续的时间应该超过一个时钟周期才能保证系统复位
异步复位:复位信号容易受到毛刺的影响。复位结束时刻恰在亚稳态窗口内时
异步复位同步释放最好
当异步复位有效时,复位信号立刻复位
信号释放时,会在时钟上升沿来临时,才可以恢复
一些小计算总结
%0表示用最少位数表示
进行取模运算%时,结果值的符号位采用模运算式里第一个操作数的符号位
对于有符号数来说:
若符号位为1,使用>>>,高位补1;
若符号位为0,使用>>>,高位补0;
对于无符号数来说,无论最高位是什么,使用>>>,高位都补0。
标识符可以是任意一组数字、字母、$符合和下划线的组合,但第一个字符必须是字母或者下划线
评论 (0)