时钟与复位策略
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时钟策略
1.在设计中尽量减少分频时钟的数量;如必须划分多个时钟域,应尽量减少不同时钟域之间的耦合。
2.大规模高速数字IC电路使用同一时钟沿触发和采样。
3.尽量不要使用门控时钟。
门控时钟产生电路建议采用下面的电路
复位策略
1.Synchronous reset
module sync_resetFFstyle (q, d, clk, rst_n);
output q;
input d, clk, rst_n;
reg q;
always @(posedge clk)
if (!rst_n) q <= 1'b0;
else q <= d;
endmodule
同步复位后加一级触发器
module badFFstyle (q2, d, clk, rst_n);
output q2;
input d, clk, rst_n;
reg q1, q2;
always @(posedge clk)
if (!rst_n) q1 <= 1'b0;
else begin q1 <= d; q2 <= q1; end endmodule
module goodFFstyle (q2, d, clk, rst_n); output q2; input d, clk, rst_n; reg q1, q2;
always @(posedge clk) if (!rst_n) q1 <= 1'b0; else q1 <= d; always @(posedge clk) q2 <= q1; endmodule
1 or 0
Resetn Clk
Resetn_Syn
Q1t1
t2
优点:
A :保证电路100%同步。
B :保证reset 在时钟的有效沿发生,可以滤除reset 上毛刺。
C :在一些设计中,reset 信号是由内部中间逻辑产生的,这时也推荐采用同步reset ,来滤除处于时钟周期之间的毛刺。
缺点:
A :并不是所有的ASIC libraries 都有内建同步reset ,这样reset 复位在触发器的外部被
综合,额外的门和连线会增加延时。
B:同步reset需要保证reset的宽度(来保证在时钟有效沿到来时,reset信号是存在的)。
C: 必须需要时钟来reset,在使用门控时钟进行低功耗设计时,如果时钟在reset有效时已经被disable掉,则无法进行同步复位。
2.Asynchronous reset
module async_resetFFstyle (q, d, clk, rst_n);
output q;
input d, clk, rst_n;
reg q;
always @(posedge clk or negedge rst_n)
if (!rst_n) q <= 1'b0;
else q <= d;
endmodule
优点:
A:数据通道的延时短,不需要增额外的门和线延时。
B:无需时钟就可以完成reset功能。
缺点:
A:异步reset在时钟有效沿处发生,则会导致芯片发生不定态而无法复位。
B:异步reset容易受毛刺影响而导致错误的复位信息。
C:关于reset recovery time,规定在时钟有效沿到来之前,reset de-asserting的最小时间。
3. 推荐的做法
硬复位:通过芯片外部引脚施加的复位激励信号。(通常为异步复位端) 软复位:由电路内部状态或者配置寄存器产生的复位信号。(通常为同步复位)
always @(posedge Clk or negedge Resetn_hw_syn)
if(~Resetn_hw_syn) Q <= 1’b0; else if(Reset_sw) Q <= 1’b0; else
Q <= ….
Clk D1
异步复位信号应先经过同步,利用了同步和异步reset 的优点。
"1"
Clk Resetn_Syn
Resetn
module async_resetFFstyle2 (
output reg rst_n,
input clk, asyncrst_n);
reg rff1;
always @(posedge clk or negedge asyncrst_n)
if (!asyncrst_n) {rst_n,rff1} <= 2'b0;
else {rst_n,rff1} <= {rff1,1'b1};
endmodule
在多时钟设计中,每个时钟域都要使用reset同步化电路。
顺序复位
去毛刺
always @ (posedge clk-i)
{rst-dly3, rst-dly2, rst-dly1} <= {rst-dly2, rst-dly1, rst-n};
always @ (posedge clk-i)
rst-n-noglith <= rst-dly3 | rst-dly2 | rst-dly1;
Clock Tree / Reset Tree
综合时插入缓冲单元
后端布局布线时插入缓冲单元