reg [31:0] count;//32位的计数器
always@ (posedge clk_50M or negedge reset)//异步复位 begin
if(!reset) begin clk1<='d0; count=32'd0; end
else if(count==32'd50_000)// 判断计时器记到了50_000吗 begin
count<=32'd0;//计到50_000计数器清零 clk1<=~clk1;//输出的时钟取反 end//end begin
else count<=count+1'd1;// 没计到50_000计数器加一 end//end always
endmodule // 结束分频模块
该模块定义输入端口如下: ● Clk:全局系统时钟信号 该模块定义输出端口如下: ● clk1为分频信号 ● reset为复位按键
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.4.2所示。
图4.4.2 分频模块的仿真波形
寄存器模块flip_latch
寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。 寄存器模块的结构框图如图4.5.1所示。
图4.5.1 寄存器模块
根据模块实现的功能设计Verilog HDL源代码如下:
module flip_latch(clk,A0,A1,A2,A3,A4,A5,Q0,Q1,Q2,Q3,Q4,Q5); output [3:0] Q0,Q1,Q2,Q3,Q4,Q5; input clk;
input [3:0] A0,A1,A2,A3,A4,A5; reg [3:0] Q0,Q1,Q2,Q3,Q4,Q5; always @(posedge clk) begin
Q0 <= A0; Q1 <= A1; Q2 <= A2;
end
Q3 <= A3; Q4 <= A4; Q5 <= A5;
endmodule
该模块定义输入端口如下:
● clk:所存数据信号输入,当clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。
● A0,A1,A2,A3,A4,A5:寄存器的数据输入端
该模块定义输出端口如下:
● Q0,Q1,Q2,Q3,Q4,Q5:寄存器的数据输出端。
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.5.2所示。
图4.5.2 寄存器模块的仿真波形 多路选择模块data_mux
多路选择模块实现测量频率值的分时显示,即动态显示。经过多路选择器模块来分时地传输数据。
多路选择模块的结构如图4.6.1所示。
图4.6.1 多路选择模块结构框图
根据模块实现的功能设计Verilog HDL源代码如下:
module data_mux(disp_select,A0,A1,A2,A3,A4,A5,Q); output [3:0] Q;
input [2:0]disp_select;
input [3:0] A0,A1,A2,A3,A4,A5; reg [3:0] Q;
always @(disp_select,A5,A4,A3,A2,A1,A0,Q) begin
case(disp_select) 3'b000: Q <= A5; 3'b001: Q <= A4; 3'b010: Q <= A3; 3'b011: Q <= A2; 3'b100: Q <= A1; 3'b101: Q <= A0; default: Q <= 4'b0; endcase end
endmodule
该模块定义输入端口如下: ● disp_select:选择信号输入
● A0,A1,A2,A3,A4,A5:多路选择模块的数据输入端口 该模块定义输出端口如下: ● 多路选择模块的数据输出端口。
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.6.2所示。
图4.6.2 多路选择模块的仿真波形
动态位选模块dispselect
动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示 动态位选的结构框图4.7.1所示。
相关推荐: