2 sysu smie sysu_smie 于 2014.12.12 16:41 提问

verilog写的分频器代码的含义

module clk_div(clk,clr,a,b,z,mclk);
input clk,clr,a,b;
output reg z;
output reg mclk;

reg [31:0] count;

always@(posedge clk)
begin
if(clr)
begin
count <= 0;
mclk <= 0;
end
else if(count == 4)
begin
count <= 0;
mclk <= ~mclk;
end
else
count <= count+1;

end

always@(posedge mclk or posedge clr)
begin
if(clr) // 如果用同步时序电路,这里的clr改为clr0,与分频always块语句里的clr区分开来
z <= 0;
else
z <= a&b;
end

endmodule
为什么count定义为count[31:0],寄存器一定要用分频器么,分频器什么作用
并求解释一下每行代码的含义,并且这段代码的作用,

1个回答

santiycy
santiycy   2015.04.20 19:09

这里的count最大只计数到了4,所以定义三位宽应该就够
第一个always模块实现了十分频,即输出信号mclk是输入时钟信号clk的十分频;
第二个always模块是在十分频后的信号mclk的触发下进行z <= a&b的逻辑运算

Csdn user default icon
上传中...
上传图片
插入图片