校招基础——同步和异步
1、 组合电路、时序电路
(1) 组合逻辑电路:数字电路满足任意时刻的输出仅仅取决于该时刻的输入;
(2) 时序逻辑电路:数字电路任意时刻的输出不仅取决于当前时刻的输入,而且还取决于数字电路原来的状态;
2、 同步电路、异步电路
(1) 同步电路:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。所有触发器的状态的变化都与所加的时钟脉冲信号同步。同步电路的时钟之间有固定的因果关系;
(2) 异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步,由外部输入的变化直接引起。各时钟之间没有固定的因果关系;
3、 同步复位
判定:
always @(posedge clk)
优点:
- 1).有利于仿真器的仿真;
- 2).有利于静态时序分析工具的分析;
- 3).由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺。
缺点:
- 1).由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加 FPGA 内部的逻辑资源,另一方面也增加了相应的组合逻辑门时延。
- 2).复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑诸如时钟偏移、组合逻辑路径延时、复位延时等因素(所以复位信号有时需要脉冲展宽,用以保证时钟有效期间有足够的复位宽度)
- 3).同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。
4、异步复位
判定:
always @(posedge clk or negedge rst_n)
优点:
- 1). ASIC库或FPGA器件的DFF都提供异步复位端口,无需多加的逻辑资源产生;
- 2).设计相对简单
- 3).复位信号不依赖于时钟,产生和响应都很方便。
缺点:
- 1) .属于异步逻辑,复位释放接近时钟有效沿时容易使得触发器的输出进入亚稳态;
- 2) 可能因为噪声或者毛刺造成虚假复位信号;
- 3) 静态时序分析困难,静态时序分析一般是针对同步设计,基于时钟周期分析时序;
- 4) 对于 DFT设计,如果复位信号不是直接来自于 I/O 引脚,在 DFT 扫描和测试时,复位信号必须被禁止,因此需要额外的同步电路。
5、异步复位同步释放
异步复位同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。
6、恢复时间:Recovery time
撤销复位时,恢复到非复位状态的电平必须在时钟有效沿来临之前的一段时间到来,才能保证有效的恢复到非复位状态,此段时间为Recovery time。类似于同步时钟的setup time。
如图所示,rst_n为0表示复位,clk上升沿触发,rst_n从0到1上升沿与时钟上升沿之间的时间差必须不小于Recovery time才能保证寄存器恢复到正常状态。
7、去除时间:Removal time
复位时,在时钟沿来临之后复位信号还需要保持的时间是去除时间,类似于同步时钟的 hold time。
如图所示,rst_n为0表示复位,clk上升沿触发,rst_n保持为0经过clk上升沿后仍需要保持一段时间,才能保证寄存器有效复位。
8、时序检查中对异步复位电路的时序分析叫做
恢复时间检查和去除时间检查。
9、什么是亚稳态
触发器无法在某一个规定时间段内产生一个确定的状态。
原因:由于触发器的建立时间和保持时间不满足,当触发器进入亚稳态,使得无法预测该单元的输出,这种不稳定是会沿着信号通道的各个触发器级联传播。
消除:两级或多级寄存器同步。理论上亚稳态不能完全消除,只能降低,一般采用两级触发器同步就可以大大降低亚稳态发生的概率,再加多级触发器改善不大。
10、如何消除亚稳态?
- (1)双D触发器打拍;
- (2)用反应更快的D触发器;
- (3)引入同步机制;
- (4)改善时钟质量,用边沿变化快速的时钟信号消除;
- (5)降低时钟频率
11、为什么两级触发器可以防止亚稳态传播?
假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。
12、如何处理跨时钟域信号?
单bit:
- (1)双D触发器打拍同步;(只能慢到快)
- (2)脉冲展宽处理(握手法);
多bit:
- (1)格雷码+双D触发器打拍;(不推荐)
- (2)DMUX数据使能选通设计;(FIFO设计)
- (3)异步握手协议;(效率较低)
13、解释一下多bit处理方法?
(1)格雷码+双D触发器
多bit信号转换为格雷码,再用双D触发器打拍。为什么不直接打两拍,而先转换格雷码:不同信号路径延时不同,信号打两拍之后可能出现不同状态。
例如当指针从地址3(3'b011)跳变至地址4(3'b100)时,3个bit位都会同时发生跳变。当同步时钟在此时采样时,亚稳态的存在导致将会采到错误的中间值,由于3个bit位同时跳变,出错概率极大增加!这个中间值可能是任意值(3'b000、3'b101、3'b110等),导致出现错误的空满信号,这种情况在FIFO设计过程中是应当避免的!
而采用格雷码,这种编码每次从一个值变化到相邻的一个值时,有且仅有一位发生变化;由于格雷码的这种特性,我们就可以将多bit指针同步问题转化为单bit指针同步问题,通过简单的双触发器进行同步操作,可以极大减少传输出现错误编码的概率,而不用担心由于发生亚稳态而出现数据错误中间值的情形。3 到 4 的变换在格雷码中是 3'b010 到 3'b110,bit[0] 和 bit[1] 不变,就算 bit[2] 的变换由于亚稳态导致没变过去,也只是会让 3'b010 多维持一拍,而不会出错。那么后续再打两拍时,这个值肯定稳定下来了,已经是正确的 3'b110 了。注意:格雷码作同步时必须是2^N个状态。
注意:这个一般就用于FIFO的指针,因为是其按自然顺序12345转换的格雷码,互相之间是只有1bit不同。如果是任意数据,那么任意数据之间就算是格雷码,那也大部分是多bit不同,所以这个方法不推荐多bit数据跨时钟域时直接用。
(2)DMUX数据使能选通设计
即单bit数据指示信号用双D触发器打两拍,稳定后再采样多bit数据信号。而多bit数据则保持不变,不变就不会出现多位同时变化的错误。
(3)异步握手协议
两次请求的间隔约为:4clk_a + 3clk_b
- ① req_clk_a发出,在b时钟域打两拍同步;
- ② 将数据data_clk_a采样到data_clk_b,即DMUX方法,同时拉高ack_clk_b信号;
- ③ ack_clk_b在a时钟域打两拍同步;
- ④ req_clk_a信号拉低;
传输非同步数据到接收时钟域时配上一个同步的控制信号,数据和控制信号被同时发送到接收时钟域,同时控制信号在接收时钟域使用两级寄存器同步到接收时钟域,使用此同步后的控制信号来加载数据,这样数据就可以在目的寄存器被安全加载。
(4)异步FIFO或RAM
FIFO 设计其实就是前面的(1)格雷码+双D触发器 和 (2)DMUX数据使能选通设计 结合起来,指针用格雷码打拍,然后作为选通信号将数据接过来,再设计下空满信号即可。
关于跨时钟域的代码,可以参见 2020校招:Verilog(16)系列文章。
这里还推荐博客:跨时钟域传输总结
14、如何发现异步电路的问题?
(1)代码检视:专家来检视;
(2)CDC异步检查:CDC工具检查,对CDC报告进行仔细分析;
(3)EDA仿真:通过大市政频率配比进行EDA仿真;
(4)FPGA验证:验证可能会随机发生一些错误,有可能是异步问题,花费时间多;
15、如何理解使用握手协议的方式处理跨时钟域传输问题?
所谓握手,即通信双方使用了专用控制信号进行状态指示。双方的握手信号分别使用脉冲检测方法进行同步,发送域先把数据放入总线,随后发送req信号给接收域;接收域在检测到req信号后锁存数据总线,然后送一个ack信号表示读取完成应答;发送域在检测到ack信号后撤销当前req信号,接收域在检测到req信号撤销后也相应撤销ack信号,此时完成一次正常握手信号。此后发送域可以继续开始下一次握手通信,如此循环。该方式能够接收到的数据稳定可靠,有效的避免了亚稳态的出现,但是控制信号握手协议检测会消耗通信双方较多的时间。
16、单bit信号慢时钟域到快时钟域同步方法?
打两拍同步。
16、对于从快时钟域到慢时钟域的同步方法(和上面差不多)
(1)采用异步fifo,但是要注意读写端的时钟频率的差异避免一端溢出的情况。
(2)采用双口ram。
(3)采用握手信号,任何一端向另一端传输的时候都要保证请求信号和应答信号有足够长的时间让对方采到并能够完成同步处理,再根据这个信号去对数据线赋值或者从数据线上采数据。
(4)信号的展宽,如果我们知道这两个时钟之间的具体频率差别,那么用一个计数器去将高频信号做适当的展宽,使其宽度大于低频时钟的一个周期,就可以使用打两拍的方式进行跨时钟域了。
17、FPGA 设计中如何实现时序电路的延时?
异步电路的延时的一般方法是插入一个 buffer、两级非门等。
同步时序电路的延时一般是通过时序控制完成的。对于比较大和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数器的计数控制延时;对于比较小的延时,这种做法不但可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。
另外 HDL 语言中的延时控制语法是行为级代码描述,用于仿真测试激励,但是在电路综合时会被忽略。
18、异步复位信号因为和时钟是异步的,因此不需要加时钟约束?
错。
19、时序检查中对异步复位电路的时序分析叫做?
恢复时间检查和去除时间检查。
20、类似于 setup 和 hold。异步信号有 remove 和 recovery time check ?
错,异步复位电路才有。
21、同步电路系统中可以有一个时钟及其三分频时钟进行驱动?
对。
22、EDA仿真不容易发现异步问题的可能的原因是 (ABE)存疑
A、EDA仿真难以模拟两个真实时钟的相位抖
B、EDA仿真无法模拟真实时钟的变化规律
C、EDA仿真不能模拟两个时钟的周期
D、EDA仿真时间不够长
E、EDA无法识别亚稳态