卢思萌 信1411011001频率计设计 第 - 21 - 页 共 46 页
● F1khz:输出1Hz的时钟信号
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.4.2所示。
图4.4.2 分频模块的仿真波形
4.5 寄存器模块flip_latch
寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。 寄存器模块的结构框图如图4.5.1所示。
图4.5.1 寄存器模块
- 21 -
卢思萌 信1411011001频率计设计 第 - 22 - 页 共 46 页
根据模块实现的功能设计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;
Q3 <= A3; Q4 <= A4; Q5 <= A5;
end
Endmodule
该模块定义输入端口如下:
● clk:所存数据信号输入,当clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。
● A0,A1,A2,A3,A4,A5:寄存器的数据输入端 该模块定义输出端口如下:
● Q0,Q1,Q2,Q3,Q4,Q5:寄存器的数据输出端。
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.5.2所示。
- 22 -
卢思萌 信1411011001频率计设计 第 - 23 - 页 共 46 页
图4.5.2 寄存器模块的仿真波形
4.6 多路选择模块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
- 23 -
卢思萌 信1411011001频率计设计 第 - 24 - 页 共 46 页
该模块定义输入端口如下: ● disp_select:选择信号输入
● A0,A1,A2,A3,A4,A5:多路选择模块的数据输入端口 该模块定义输出端口如下: ● 多路选择模块的数据输出端口。
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.6.2所示。
图4.6.2 多路选择模块的仿真波形
4.7 动态位选模块dispselect
动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示
动态位选的结构框图4.7.1所示。
- 24 -
卢思萌 信1411011001频率计设计 第 - 25 - 页 共 46 页
图4.7.1 动态位选模块的结构框图
根据模块实现的功能设计Verilog HDL源代码如下: module dispselect(clk,disp_select,Q); output [5:0] Q; output [2:0] disp_select; input clk; reg [5:0] Q; reg [2:0] disp_select; always @(posedge clk) begin
if(disp_select < 3'b101)
disp_select <= disp_select +
end endmodule
disp_select <= 3'b0;
case(disp_select)
3'b000: Q <= 6'b100000; 3'b001: Q <= 6'b010000; 3'b010: Q <= 6'b001000; 3'b011: Q <= 6'b000100; 3'b100: Q <= 6'b000010; 3'b101: Q <= 6'b000001; default: Q <= 6'b000000; endcase
3'b1;
该模块定义输入端口如下:
else
● clk:动态位选的时钟信号输入,一般取1KHz左右的标准时钟。 该模块定义输出端口如下:
● disp_select:动态位选中间量输出,用于与系统中其他模块之间的同步。 ● Q:动态位选信号输出,可以直接接到数码管的公共端。
在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图4.7.2所示。
- 25 -