文档介绍:秒脉冲产生电路模块设计
电路模块的作用
该模块的作用是将 10kHz 时钟信号经过 10000 分频得到 1Hz 的秒脉冲时钟信号,做为
秒计数电路模块的输入时钟信号。因此,该模块有 2 个端口,输入端口为 clk_10kHz,输出
端口为 clk_1Hz。
设计思路
输入的时钟信号频率为 10kHz,周期为 ;输出的时钟信号频率为 1Hz,周期为
1s;由此可看出,输出信号的频率比输入信号的频率降低了 10000 倍,因此周期提高了 10000
倍;因此在编写程序代码时,设计一个中间计数器 jsq,目的是对输入信号进行计数;当计
数器 jsq 从 0 计数到 4999 时,计数了 5000 次,输出信号持续为高电平;而当计数器 jsq 从
5000 计数到 9999 时,同样也计数了 5000 次,然后输出信号持续为低电平;由此可以得知
输出的信号周期为输入信号的 10000 倍,从而实现了 10000 分频的目的,并使得输出信号的
占空比为 50%。
程序代码及代码解析
1. 模块声明
module FDIV(clk_1Hz,clk_10kHz); /*模块声明*/
。。。。。。
endmodule
模块名:FDIV; 两个端口:clk_1Hz 和 clk_10kHz
2. 端口定义:注意输入信号和输出信号的位宽
input clk_10kHz; /*输入端口定义*/
output clk_1Hz; /*输出端口定义*/
3. 数据类型说明
reg clk_1Hz; /* clk_1Hz 为寄存器型变量*/
reg[13:0] jsq; /*jsq 为中间计数器变量*/
由于电路中需要一个计数器来计数,因此定义了一个中间变量 jsq,且数据类型为寄存
器型(reg 型),该计数器能从 0 计数到 9999(10000 次),故位宽为 14 位。
4. 逻辑功能描述
(1)代码一:
always @(posedge clk_10kHz)
begin
if(jsq<4999)
begin jsq<=jsq+1;clk_1Hz<=1; end
else if(jsq==9999)
begin jsq<=0; clk_1Hz<= 0; end