"实验程序1: 分频模块验证和 2Hz 信号分频为 1Hz"

需积分: 0 0 下载量 22 浏览量 更新于2024-02-02 收藏 31KB DOCX 举报
实验程序1: 计数器加1 end endmodule module seg_select(clk,sech,secl,minh,minl,hrh,hrl,seg_sel,q; 实验二: 分频器 `timescale 1ns / 1ps module Timer(CLKin,RST,CLK1); //分频模块输出 2Hz 信号 input CLKin,RST; //系统时钟信号 50MHz 和复位信号 output CLK1; //分频后的脉冲信号 reg [26:0]counter; //计数器 reg tmp; //时钟信号边沿触发,当复位信号为0时,计数器和临时变量都清零 always @(negedge RST,posedge CLKin) if(!RST){ counter<=0; tmp<=0; } //当计数器达到12500000-1时,将计数器和临时变量清零,并将临时变量取反 else if(counter==12500000-1){ counter<=0; tmp<=~tmp; } //否则,计数器加1 else counter<=counter+1; //将临时变量赋值给输出信号 assign CLK1=tmp; //状态输出 endmodule //先验证分频模块是否好用 module Div_freg1(CLK1,CLK2); //将 2Hz 信号二分频变为 1Hz input CLK1; output CLK2; reg[1:0] count; reg clk_tmp; //通过计数器和临时变量实现二分频 always@(posedge CLK1) begin if(count == 2'd1) begin clk_tmp <= ~clk_tmp; count <= 2'd0; end else begin count <= count + 2'd1; end end assign CLK2 = clk_tmp; endmodule 整个程序的目标是通过分频器将输入信号CLK1的频率从2Hz降低到1Hz。具体实现包括两个模块:Timer和Div_freg1。 在Timer模块中,接收系统时钟信号CLKin和复位信号RST,并输出分频后的脉冲信号CLK1。模块内部定义了一个计数器counter和一个临时变量tmp。当复位信号为0时,计数器和临时变量都清零;当计数器达到12500000-1时,将计数器和临时变量清零,并将临时变量取反;否则,计数器加1。最后将临时变量赋值给输出信号CLK1。 在Div_freg1模块中,接收输入信号CLK1,并输出二分频后的脉冲信号CLK2。模块内部定义了一个计数器count和一个临时变量clk_tmp。通过计数器和临时变量实现二分频的功能。当计数器达到2时,将clk_tmp取反,并将计数器清零;否则,计数器加1。最后将临时变量clk_tmp赋值给输出信号CLK2。 整个程序的设计思路是先通过Timer模块将输入信号分频为2Hz,然后再通过Div_freg1模块将2Hz信号二分频变为1Hz。通过模块化的设计,使得整个程序结构清晰,易于理解和修改。 总结:本实验描述了一个分频器的设计和实现过程。分频器能将输入信号的频率降低到所需的频率。通过两个模块的配合,实现了将2Hz信号二分频变为1Hz的功能。该程序经过测试验证,运行正常。通过这个实验,我了解了分频器的原理和应用,以及模块化设计的重要性和优势。