分频"/>
奇分频
奇分频
分频法
奇分频采用分频法要比偶分频复杂一些,首先采用上升沿采样得到中间变量clk_1,采用下降沿采样得到中间变量clk_2,然后二者进行或运算得到分频时钟clk_out,这里选择组合逻辑(assign语句),输出信号不会延迟一个周期,这样就得到下图所示的clk_out信号。
分频法代码如下:
module divider_5
(input sys_clk ,input rst_n ,output clk_out
);reg [2:0] cnt;
reg clk_1;
reg clk_2;parameter N = 5;always@(posedge sys_clk or negedge rst_n)beginif(rst_n == 1'b0)cnt <= 3'd0;else if(cnt == 3'd4)cnt <= 3'd0;elsecnt <= cnt + 3'd1;
endalways@(posedge sys_clk or negedge rst_n)beginif(rst_n == 1'b0)clk_1 <=1'b0;else if(cnt == N/2)clk_1 <= ~clk_1;else if(cnt == N-1)clk_1 <= ~clk_1;elseclk_1 <= clk_1;
endalways@(negedge sys_clk or negedge rst_n)beginif(rst_n == 1'b0)clk_2 <=1'b0;else if(cnt == N/2)clk_2 <= ~clk_2;else if(cnt == N-1)clk_2 <= ~clk_2;elseclk_2 <= clk_2;
endassign clk_out = (clk_1 | clk_2);endmodule
仿真文件和偶分频一致,这里不再赘述,可参考笔者以前写的偶分频部分。
仿真结果如下:
###降频法
奇分频采用降频的原理和偶分频是一致的,皆是计数值达到N-2(这里N为5)时生成一个脉冲标志信号cnt_flag,然后持续一个周期。如图所示。
代码如下:
module divider_5
(input sys_clk ,input rst_n ,// output clk_out output reg cnt_flag
);reg [2:0] cnt;
/* reg clk_1;
reg clk_2; */parameter N = 3'd5;always@(posedge sys_clk or negedge rst_n)beginif(rst_n == 1'b0)cnt <= 3'd0;else if(cnt == N-3'd1)cnt <= 3'd0;elsecnt <= cnt + 3'd1;
endalways@(posedge sys_clk or negedge rst_n)beginif(rst_n == 1'b0)cnt_flag <=1'b0;else if(cnt == N-3'd2)cnt_flag <= 1'b1;elsecnt_flag <= 1'b0;
end
endmodule
仿真文件和偶分频一致,仿真结果如图:
更多推荐
奇分频
发布评论