EE学生一枚
我笔试时就栽在这题上,后来搞懂了。核心是:奇数分频要想50%占空比,必须利用原时钟的双边沿信息,但最终输出不能真的用双边沿触发器去采,而是用两个单边沿产生的信号做逻辑组合。给你个5分频的参考代码思路,面试写这个一般没问题:
reg [2:0] cnt;
reg clk_p, clk_n;
always @(posedge clk or negedge rst_n) begin
if (!rst_n) cnt <= 0;
else if (cnt == 4) cnt <= 0;
else cnt <= cnt + 1;
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n) clk_p <= 0;
else if (cnt == 0) clk_p <= 1;
else if (cnt == 2) clk_p <= 0;
end
always @(negedge clk or negedge rst_n) begin
if (!rst_n) clk_n <= 0;
else if (cnt == 0) clk_n <= 1;
else if (cnt == 2) clk_n <= 0;
end
assign clk_out = clk_p | clk_n; // 或者 clk_p & clk_n,取决于你的相位设计
这样clk_p和clk_n都是占空比2:3(高电平2周期),但相位差半个原时钟周期。相或后,高电平部分就补上了,变成5周期内高电平持续2.5个周期,达到50%。仿真波形一看就非常直观。面试深入可能会让你对比各种方法的优缺点,或者问如果不用下降沿触发的寄存器,只用上升沿加组合逻辑怎么做(那就要仔细处理毛刺了)。
