verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波

上传人:桔**** 文档编号:413096358 上传时间:2022-09-16 格式:DOC 页数:19 大小:19.07KB
返回 下载 相关 举报
verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波_第1页
第1页 / 共19页
verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波_第2页
第2页 / 共19页
verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波_第3页
第3页 / 共19页
verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波_第4页
第4页 / 共19页
verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波》由会员分享,可在线阅读,更多相关《verilog基本电路设计包括:时钟域同步无缝切换异步fifo去抖滤波(19页珍藏版)》请在金锄头文库上搜索。

1、Verilog基本电路设计(包括:时钟域同步、无缝切换、 异步FIFO、去抖滤波) Verilog基本电路设计共包括四部分:单bit跨时钟域同步时钟无缝切换异步FIFO去抖滤波 Verilog基本电路设计之一: 单bit跨时钟域同步(帖子链接: (posedge clkb or negedge rst_n)begin if (!rst_n) begin levl_b_d1 levl_b_d2 levl_b_d3 end else begin levl_b_d1 levl_b_d2 levl_b_d3 endendassign puls_b_pos = levl_b_d2 & (levl_b_d

2、3);assign puls_b_neg = levl_b_d3 & (levl_b_d2);assign levl_b_out = levl_b_d2;上面三个输出分别是经过同步之后,clkb下可以使用的0变1脉冲信号,1变0脉冲信号以及电平信号。再次强调:levl_a_in必须是clka的DFF信号!下面是更常见的,clka下的脉冲信号,同步到clkb时钟域下,它对于clka与clkb的时钟频率关系没有任何限制,快到慢,慢到快都没问题。其主要原理就是先把脉冲信号在clka下展宽,变成电平信号,再向clkb传递,当确认clkb已经“看见”信号同步过去之后,再清掉clka下的电平信号。脉冲信号

3、同步处理电路,有两个地方使用了上面的电平信号同步处理原则,请仔细揣摩原因。详细见下面的RTL,其中省略了信号定义声明:module sync_pulse ( / input rst_n, / system reset clka, / clockA clkb, / clockB puls_a_in, / pulse input from clka / output puls_b_out, / pulse output in clkb levl_b_out / level output in clkb );parameter DLY = 1; /always (posedge clka or ne

4、gedge rst_n)begin if (rst_n = 1b0) signal_a else if (puls_a_in) signal_a else if (signal_b1_a2) signal_a else ;endalways (posedge clkb or negedge rst_n)begin if (rst_n = 1b0) signal_b else signal_b endalways (posedge clkb or negedge rst_n)begin if (rst_n = 1b0) begin signal_b_b1 signal_b_b2 end else

5、 begin signal_b_b1 signal_b_b2 endendalways (posedge clka or negedge rst_n)begin if (rst_n = 1b0) begin signal_b1_a1 signal_b1_a2 end else begin signal_b1_a1 signal_b1_a2 endendassign puls_b_out = signal_b_b1 & (signal_b_b2) ;assign levl_b_out = signal_b_b1 ;endmodule下一篇讲时钟切换电路。留下一个思考题:clka下的同一个寄存器信

6、号signal_a,电平宽度对clkb而言足够长,如果同时调用两个相同的电平同步模块向clkb时钟传递,分别得到levl_b1和levl_b2,那么在clkb时钟域下看到的lev_b1和levl_b2信号是否一样?这个问题是实际设计中一不小心就会犯错的,如果能够想明白正确回答这个问题,异步信号的理解就可以过关了。 Verilog基本电路设计之二: 时钟无缝切换(帖子链接:http:/ assign clk_o = sel_clkb ? clkb : clka ,当sel_clkb为1时选择clkb,否则选择clka。不过在实际设计中,建议直接调用库里的MUX单元set_dont_touch,不

7、要采用这里的assign写法,因为这种写法最后综合得到的可能不是MUX而是复杂组合逻辑,给前后端流程的时钟约束和分析带来不便。无缝切换,就是切换时无毛刺时钟平稳过渡。在时钟切换中,只要出现比clka或者clkb频率更高的窄脉冲,不论是窄的高电平还是窄的低电平,都叫时钟毛刺。工作在切换后时钟clk_o下的电路模块,综合约束是在maxclka,clkb频率下的,也就是说设计最后signoff的时候,只保证电路可以稳定工作的最高频率是maxclka,clkb,如果切换中出现更高频的时钟毛刺,电路可能出现无法预知的结果而出错。无缝切换,一般用在处于工作状态的模块需要调频或者切换时钟源,比如内部系统总线

8、,CPU等。你刚用手机打完游戏后马上关屏听音乐,这两种场景中,CPU在满足性能前提下为了控制功耗,其工作频率会动态地从很高调至较低,此时就可能是在CPU一直处于工作状态下,通过无缝切换时钟源头实现的。在无缝切换电路中,切换信号sel_clkb可以是任意时钟域下的信号,包括但不限于clka或者clkb域,但是sel_clkb必须是一个DFF输出信号;clka与clkb的频率大小相位关系可以任意。无缝切换需要解决两个问题,一是异步切换信号的跨时钟域同步问题,这里需要使用Verilog基本电路设计之一里的同步电路原理消除亚稳态;二是同步好了的切换信号与时钟信号如何做逻辑,才能实现无毛刺。下面写出无缝

9、切换电路的主体部分,忽略了内部信号的定义声明等。module clk_switch ( rst_n, clka, clkb, sel_clkb, clk_o );always (posedge clka or negedge rst_n)begin if (!rst_n) begin sel_clka_d0 sel_clka_d1 end else begin sel_clka_d0 sel_clka_d1 endend/ part2/always (posedge clka_n or negedge rst_n)always (posedge clka or negedge rst_n)begin if (!rst_n) begin sel_clka_dly1 sel_clka_dly2 sel_clka_dly3 end else begin sel_clka_dly1 sel_clka_dly2 sel_clka_dly3 endend/ part3/always (posedge clkb_n or negedge rst_n)always (posedge clkb or negedge rst_n)begin if (!rst_n)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号