基于verilog的数字时钟设计 - 图文(2)

2019-09-02 19:06

begin

if(m_H==8'h00) m_H<=8'd23; else

m_H<=m_H-1'b1; end end

else if(FLAG==2'b10) begin if(UP)

if(m_M==8'd59) m_M<=8'd0; else

m_M<=m_M+1'b1; else if(DN) if(m_M==8'h00) m_M<=8'd59; else

m_M<=m_M-1'b1; end

else if(FLAG==2'b11) begin if(UP)

if(m_S==8'd59) m_S<=8'b0; else

m_S<=m_S+1'b1; else if(DN) if(m_S==8'h00)

//调分状态 //调秒状态6

m_S<=8'd59; else

m_S<=m_S<=m_S-1'b1; end else

begin //正常计时状态 if(m_MS==8'd99) begin

m_MS<=8'd0; if(m_S==8'd59) begin m_S<=8'd0; if(m_M==8'd59) begin m_M<=8'd0; if(m_H==8'd23) m_H<=0; else

m_H<=m_H+1'b1; end else

m_M<=m_M+8'd1; end else

m_S<=m_S+1'b1; end else

m_MS<=m_MS+1'b1; end

7

endmodule

4.2整数分频模块

由于数字系统提供的基准时钟信号频率往往较高,因此需要分频模块产生所需频率的失踪信号,例如上面时钟校正及计时模块所需的100Hz的时钟信号。整数分频模块int_div可以实现对输入时钟clock进行F_DIV分频后输出clk_out。F_DIV分频系数范围为1~2^n(n=F_DIV_WIDTH),若要改变分频系数,改变参数F_DIV或F_DIV_WIDTH到相应范围即可。若分频系数为偶数,则输出时钟占空比为50%;若分频系数为奇数,则输出的时钟占空比取决于输入的时钟占空比和分频系数(当输入为50%时,输出也是50%)。

代码:

module int_div(clock,clk_out);

parameter F_DIV=48000000; //分频系数 parameter F_DIV_WIDTH=32; //分频计数器宽度

input clock; //输入时钟 output clk_out; //输出时钟

reg clk_p_r; reg clk_n_r;

reg[F_DIV_WIDTH-1:0] count_p; reg[F_DIV_WIDTH-1:0] count_n;

wire full_div_p; //上升沿计数满标志 wire half_div_p; //上升沿计数半满标志 wire full_div_n; //下降沿计数满标志 wire half_div_n; //下降沿计数半满标志

8

//判断计数标志位置位与否 assign full_div_p=(count_p>1)-1); assign full_div_n=(count_n>1)-1);

//时钟输出

assign clk_out=(F_DIV==1)?clock:(F_DIV[0]?(clk_p_r&clk_n_r):clk_p_r);

always @(posedge clock) //上升沿脉冲计数 begin if(full_div_p) begin

count_p<=count_p+1'b1; if(half_div_p) clk_p_r<=1'b0; else

clk_p_r<=1'b1; end else begin count_p<=0; clk_p_r<=1'b0; end end

always @(negedge clock) //下降沿脉冲计数 begin

9

if(full_div_n) begin

count_n<=count_n+1'b1; if(half_div_n) clk_n_r<=1'b0; else

clk_n_r=1'b1; end else begin count_n<=0; clk_n_r<=1'b0; end end endmodule

4.3时钟信号选择模块

时钟信号选择模块clkgen实际上时一个二选一电路,用于提供时钟调校及计时时模块所需的时钟脉冲。当电子表工作在正常计时状态时选择100Hz时钟信号;当电子表工作在调时、调分、调秒是那种设置模式时,如果采用100Hz时钟信号,那么手动一次按键可能引起设置数据的一串跳变,因此为了方便按键时动作对时间的设置,这里采用2Hz的时钟信号。其端口说明如下: flag——时钟选择输入信号;

clk_100Hz———输入100Hz的时钟信号; clk_2Hz——输入2Hz的时钟信号; Clkout——输出时钟信号。

代码:

module clkgen(flag,clk_100hz,clk_2hz,clkout);

10


基于verilog的数字时钟设计 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《化学反应原理》综合练习7

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: