ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

无毛刺时钟切换的精妙设计揭秘

无毛刺时钟切换的精妙设计揭秘 DFF 就是D Flip-FlopD 触发器。你可以先把它理解成在时钟到来的某个边沿把输入 D 的值“记住”然后从 Q 输出。时钟切换在 clk0 和 clk1 之间切换时clk_out 不能出现窄脉冲、毛刺或者半个周期。只在时钟低电平阶段切换使能典型的无毛刺时钟切换结构是clk0 ── AND ──┐ ├── OR ── clk_out clk1 ── AND ──┘两个 AND 门前面分别有一个使能en0 en1最终clk_out (clk0 en0) | (clk1 en1);关键是en0/en1只能在对应时钟的下降沿更新。这样使能变化时时钟正处于低电平就不会把一个高脉冲砍成一半。timescale 1ns/1ns module huawei6( input wire clk0 , input wire clk1 , input wire rst , input wire sel , output wire clk_out ); //*************code***********// reg en_0; reg en_1; always(negedge clk0 or negedge rst) begin if(!rst) en_0 d0; else en_0 ~sel ~en_1; end always(negedge clk1 or negedge rst) begin if(!rst) en_1 d0; else en_1 sel ~en_0; end assign clk_out (en_0 clk0) | (en_1 clk1); //*************code***********// endmodule为什么这里要有~en1和~en0这是为了防止两个时钟同时打开。因此切换过程是clk0工作 ↓ sel改变 ↓ 先关闭clk0 ↓ 短暂两个都关闭 ↓ 再打开clk1为什么用下降沿因为always (negedge clk0)执行时clk0刚刚变成0这时候改变en0不会影响当前的高脉冲因为高脉冲已经完整结束了。可以理解成完整高脉冲 clk ────┐ ┌──── │ │ └────┘ ↑ 在低电平期间 改 enable而如果在时钟高电平中途修改 enableclk ────────┐ │ enable ─────┘ ←突然关闭就可能把高电平砍掉一半。无毛刺时钟切换 在低电平时关掉旧时钟确认旧时钟关闭后再在低电平时打开新时钟。
返回列表