如有疏漏请大神不吝赐教!!!(*^__^*) 嘻嘻……
这学期刚学了Verilog语言,觉得挺好玩,有点类似C语言,不过马上就要考试了,再看奇偶分频器时感觉有点不懂,
所以就查找资料加深理解。。。以下是这次的学习过程。。。
代码
3分频
module EVEN(clk, rst_n, clk_3);
input clk, rst_n;
output clk_3;
reg [1:0]state;
reg clk1;
always @ (posedge clk or negedge rst_n)
if(!rst_n)
state <= 2'b00;
else
case(state)
2'b00:state <= 2'b01;
2'b01:state <= 2'b11;
2'b11:state <= 2'b00;
endcase
always @ (negedge clk or negedge rst_n)
if(!rst_n)
clk1 <= 1'b0;
else
clk1 <= state[0];
assign clk_3 = state[0] & clk1;
endmodule
实现2、4、8、16分频
module ODD(clk, rst_n, clk_2, clk_4, clk_8, clk_16);
input clk;
input rst_n;
output clk_2, clk_4, clk_8, clk_16;
reg [3:0] cnt;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
cnt <= 4'b0;
else
cnt <= cnt + 1;
end
assign clk_2 = !cnt[0];
assign clk_4 = !cnt[1];
assign clk_8 = !cnt[2];
assign clk_16 = !cnt[3];
endmodule
对于偶分频(只涉及2^n,其他的还为研究,一步步来)
具体思想:用高速时钟做一个同步计数器,然后在相应的位抽头即可。
对于奇分频(目前还没找到合理的解释,只是看懂了代码,渣子一个~~)