时序电路参考代码:
功能描述:
完成一个 4 位计数器(计数值 0-F),显示在一个七段管上。按键 key0 作为复位信号,实现
复位(清零)功能。运行效果如录像所示。
程序代码:
主程序:
module timer(key0,clk50,ledr0,hex0);
input key0,clk50;//复位信号输入、时钟源
output ledr0;//led 灯,直接用分频后的 clk1 驱动,主要观测时钟是否正常工作。(1 秒闪一
次,表示功能正常)。
output[6:0] hex0;//输出计数值
reg[3:0] counter;//中间变量,计数
divclk d0(key0,clk50,clk1);//分频模块,50MHz 分频为 1hz
show s0(counter,hex0);//七段管显示
assign ledr0=clk1;//1hz 时钟驱动 led 灯闪。
always@(posedge clk1,negedge key0)//计数逻辑。key0 使用按下瞬间(下降沿)起作用。
begin
if(!key0) counter<=0;
else counter<=counter+1;
end
endmodule
//分频模块,50MHz 输入,1Hz 输出。
module divclk(rst,clkin,clkout);
input rst,clkin;//复位信号,输入时钟
output reg clkout;
integer i;//分频计数值
always@(posedge clkin,negedge rst)
begin
if(!rst) i<=0;//rst 低电平有效
else if(i==24999999) //说明 1
begin i<=0;clkout=~clkout;end
else i<=i+1;
end
endmodule
//说明 1:clkout 低电平和高电平维持时间为 0-24999999,都为 2500 万个 clkin 周期。这样
完整周期(1 段低电平和 1 段高电平)。共包含 2*2500 万=5000 万个 clkin 周期。因此,clkout
的周期为 clkin 周期的 5000 万倍。频率 fclkout=clkin/5000 万=50M/50000000=1hz.注意此处 M
K 倍数为 1000.
若产生其他频率,如 10Hz、100Hz,只要修改 i 值(删掉 1 个 9,删掉 2 个 9)就可以了、
评论1