返回列表 发帖

[原创] Verilog基本电路设计之二(时钟无缝切换)

请问一下楼主是用什么工具做的?
是工具中包含gating cell?

TOP

真好速度啊

TOP

回复 11# 杰克淡定


解释的无法理解,就算增加在多级数也没有价值。

TOP

回复 32# 杰克淡定


  你的这个电路经过工程验证过?

TOP

回复 38# novel_qin


   回头仔细看了你的回复,发现了原设计中一个笔误,会导致你说的问题。
// part5
clk_gate_xxx clk_gate_a ( .CP(clka), .EN(sel_clka_dly1), .Q(clka_g)  .TE(1'b0) );
clk_gate_xxx clk_gate_b ( .CP(clkb), .EN(sel_clkb_dly1), .Q(clkb_g)  .TE(1'b0) );
//assign clka_g = clka & sel_clka_dly1 ;
//assign clkb_g = clkb & sel_clkb_dly1 ;


这部分要使用*dly1的信号,而不是*dly3,*dly1相比*dly3会将两个时钟切换gap变大避免毛刺,part4用的dly寄存器越多,*dly1就把切换点gap越大。帖子这么久没有其他人提出这个疑问,看起来只有你拿去仿真验证了

TOP

回复 55# 杰克淡定


这样也可以吧。
clk_gate_xxx clk_gate_a ( .CP(clka), .EN(sel_clka_d1), .Q(clka_g)  .TE(1'b0) );
clk_gate_xxx clk_gate_b ( .CP(clkb), .EN(sel_clkb_d1), .Q(clkb_g)  .TE(1'b0) );
海阔天空,漠大无边

TOP

回复 56# haimo


   目前主贴中的错误已经更正过来了,与你这个一致

TOP

回复 57# 杰克淡定

您用的是sel_clka_dly1,我用的是sel_clka_d1,
   

sel_clka_dly1 <= sel_clka_d1;

但我觉得都行

我之前也发现这个问题,采用的方法是加多part2/4的级数的方法,这样gap就大了
海阔天空,漠大无边

TOP

本帖最后由 capcomwf 于 2017-6-26 22:47 编辑

回复 55# 杰克淡定
我这边RTL仿真的结果:
电路第一次工作时会出现第一次的混叠,可能由
sel_clka_dly1 <= 1'b0;
sel_clka_dly2 <= 1'b0;
sel_clka_dly3 <= 1'b0;

sel_clkb_dly1 <= 1'b0;
sel_clkb_dly2 <= 1'b0;
sel_clkb_dly3 <= 1'b0;
初值互斥引起.
混叠2.jpg
2017-6-26 17:37


只要将切换的初始状态赋对(即默认输出clka)
sel_clka_d0 <= 1'b1;
sel_clka_d1 <= 1'b1;
sel_clka_dly1 <= 1'b1;
sel_clka_dly2 <= 1'b1;
sel_clka_dly3 <= 1'b1;
即可.
混叠3.jpg
2017-6-26 17:39


另外,本题的切换的电平持续最短时间是要至少维持较长周期的5倍才可在慢时钟到快时钟切换时正确输出较快的那一个.
至于38楼及55楼楼主提到的频率混叠情况,是否可以给个波形图看看?我这边没有太理解....

TOP

回复 55# 杰克淡定


   楼主您好,看了您的帖子,我把这部分电路推理了一遍,有点不理解的地方想向楼主请教,从楼主的代码中可以看到,楼主的MUX采用“与门+或门”的结构来实现,而后级采用“与门+或门”的时候,用于输出"与门"的门控信号的寄存器一定要下降沿触发       “3、如果part5部分希望使用注释掉的两行“与”逻辑实现时钟gating,此时part1与part3使用正相或者反相时钟都可以,但是必须把part2和part4部分改为注释掉的反相时钟实现,目的是初步从RTL设计上避免“与”逻辑的毛刺”         您在第三点中也说明了,这一点,那么为啥在代码中采用“clk_gate_xxx clk_gate_a ( .CP(clka), .EN(sel_clka_dly1), .Q(clka_g)  .TE(1'b0) );
clk_gate_xxx clk_gate_b ( .CP(clkb), .EN(sel_clkb_dly1), .Q(clkb_g)  .TE(1'b0) );”的时候可以采用上升沿触发?按道理来讲,clk_gate不就是一个与门吗?如果想要采用全上升沿触发,那么就应该是原始时钟上升沿触发‘控制原始时钟的触发器’,关断原始时钟,锁定输出到高电平,目的时钟上升沿后触发‘目的时钟的触发器
’,开启目的时钟,从而在高电平完成时钟切换,要达到这个目的,后级的MUX的实现方法,应该是采用“或门+与门”的结构,而不是楼主代码里的"与门+或门"的结构吧?还请楼主不吝赐教,谢谢!

TOP

返回列表

站长推荐 关闭


音频系统、USB TYPE-C、智能手机、移动电源、SSD 参考设计汇总(免信元)

太多参考设计,原理图了,都是精品!(免信元下载)


查看