1.同步电路设计
2.全异步电路设计
3.异步信号与同步电路交互的问题及其解决方法
4.SoC设计中的时钟规划策略
同步电路,即电路中的所有受时钟控制的单元,如触发器(Flip Flop)或寄存器(Register),全部由一个统一的全局时钟控制。
同步电路的时序收敛
触发器的建立时间和保持时间
同步电路设计的优点
同步电路设计的缺点
时钟偏斜
全异步设计跟同步设计最大的不同就是它的电路中的数据传输可以在任何时候发生,电路中没有一个全局的或局部的控制时钟。
异步电路设计的基本原理
自定时的流水线数据通路
握手协议
握手协议原理
异步电路设计的优点
亚稳态示意图
亚稳态信号的传播
亚稳态问题的解决及其RTL实现
亚稳态现象的解决方法
module synchronizer (
bclk, //目的时钟,与aclk异步的时钟
reset_b, //全局异步复位信号
adat, //异步输入信号,工作在aclk
bdat, //同步器输出
);
input bclk;
input reset_b;
input adapt;
output bdat;
wire bdat;
reg bdat1;
reg bdat2;
always @ (posedge bclk or negedge reset_b)
if (reset_b)
{bdat2,bdat1} <= 2 ' b0;
else
{bdat2,bdat1} <= {bdat1,adat};
assign bdat = bdat2;
endmodule
3.2快时钟同步慢时钟域下的异步控制信号
快时钟同步慢时钟信号示意图
module synchronizer (
clk_fst,
reset_b,
rd_en,
rd_en_s2f
);
input clk_fst, reset_b, rd_en
output rd_en_s2f;
wire rd_en_s2f;
reg rd_en_s2f1, rd_en_s2f2, rd_en_s2f3
always @ (posedge clk_fst or negedge reset_b)
if (!reset_b)
{rd_en_s2f3,rd_en_s2f2,rd_en_s2f1} <= 3'b111;
else
{rd_en_s2f3,rd_en_s2f2,rd_en_s2f1}<={rd_en_s2f2,rd_en_s2f1,rd_en};
always @ (rd_en_s2f3 or rd_en_s2f2)
case ({rd_en_s2f3,rd_en_s2f2})
2'b01:
rd_en_s2f <= 1'b1;
default:
rd_en_s2f <= 1'b0;
endcase
慢时钟同步快时钟信号示意图
解决办法 : 握手机制实现方法一
module adapt_gen (
aclk, //快时钟
reset_b, //系统复位信号
adat, //原始控制信号
abdat2, //从慢时钟域反馈回来的同步控制信号
adat1 //经过保持后的信号输出
);
input aclk, reset_b, adat, abdat2;
output adat1;
reg adat1;
always @ (posedge aclk or negedge reset_b)
if (!reset_b)
adat1 <= 1'b0;
else if (abdat2)
adat1 <= 1'b0;
else if (adat)
adat1 <= 1'b1;
endmoudule
解决办法 : 握手机制实现方法二
module stall_logic (
rd_en,
rd_en_
ack_s2f,
stall_b
);
inputrd_en;
input rd_en_ack_s2f;
output stall_b;
wire stall_b;
always @ (rd_en or rd_en_ack_s2f)
if (rd_en_ack_s2f)
stall_b <= 1'b1;
else if (rd_en)
stall_b <= 1'b0;
else
stall_b <= 1'b1;
endmodule
握手同步异步数据
FIFO结构图
FIFO空满示意图
同步异步时钟FIFO的电路行为
FIFO设计中的亚稳态问题
通常,通过比较读/写指针是否相等来判断FIFO是否为空。而因为读/写指针属于不同的时钟域,两者显然不能直接连到比较器的两端来产生空信号,否则会造成读FIFO的目的时钟域的电路碰到亚稳态现象.
解决办法
新的异步FIFO的结构框图
首先尽可能使用同步设计:
其次,注意同步电路设计的缺陷
如果必须采用不同的时钟,则要注意
最后,设计规划中应注意以下几点: