课程设计论文-数字频率计的设计内容摘要:

数字频率计 12 门控模块 gate_control 门控模块实现检测外界量程的选择,并且根据量程输出控制 6 位 BCD 码十进制计算器的计数时钟。 生成的模块如下: 实现的源程序如下: module gate_control(SW0,SW1,SW2,f1hz,f10hz,f100hz,Latch_EN,Counter_EN,dp_s1hz,dp_s10hz,dp_s100hz)。 output Latch_EN。 output Counter_EN。 output dp_s1hz,dp_s10hz,dp_s100hz。 input SW0,SW1,SW2。 input f1hz,f10hz,f100hz。 reg dp_s1hz,dp_s10hz,dp_s100hz。 reg fref。 reg wire_1。 reg wire_2。 initial begin fref = 139。 b0。 wire_1 = 139。 b0。 wire_2 = 139。 b0; end always @(SW0 or SW1 or SW2 or f1hz or f10hz or f100hz) begin if(SW2 == 139。 b1) begin fref = f100hz。 {dp_s1hz,dp_s10hz,dp_s100hz} = 339。 b001。 end else if(SW1 == 139。 b1) begin fref = f10hz。 {dp_s1hz,dp_s10hz,dp_s100hz} = 339。 b010。 end else if(SW0 == 139。 b1) begin fref = f1hz。 {dp_s1hz,dp_s10hz,dp_s100hz} = 339。 b100。 end end always @(posedge fref) begin wire_1 = ! wire_1; end always @(negedge fref) begin wire_2 = wire_1。 end assign Counter_EN = wire_1。 assign Latch_EN = (! Counter_EN) amp。 wire_2。 endmodule 该模块定义输入端口如下: 数字频率计 13 ● SW0、 SW SW2:量程选择开关 ● flhz: 1Hz 的标准时钟输入 ● fl0hz: 10Hz的标准时钟输入 ● fl00hz: 100Hz 的标准时钟输入 该模块定义输入端口如下: ● Latch_EN:用来是能寄存器所存数据 ● Counter_EN:用于使能计数器开始计数 ● dp_s1hz:选择 999999Hz 量程时,用于控制显示中的小数点位置 ● dp_s10hz:选择 量程时,用于控制显示中的小数点位置 ● dp_s100hz:选择 量程时,用于控制显示中的小数点位置 经过 ModelSim SE 仿真图像如下: 分频模块 fdiv 分频模块在系统全局时钟的驱动下,经过分频得到系统中所需要的多种频率成分的时钟信号。 分频模块的结构框图如图 所示。 数字频率计 14 图 分频模块结构框图 实现分频功能的源代码如下: module fdiv(clk,f1hz,f10hz,f100hz,f1khz)。 output f1hz,f10hz,f100hz,f1khz。 input clk。 reg f1hz,f10hz,f100hz,f1khz。 integer t1=0,t2=0,t3=0,t4=0。 always @(posedge clk) begin if(t147999) begin f1khz = 139。 b0。 t1 = t1 + 1。 end else begin f1khz = 139。 b1。 t1 = 0。 end end always @(posedge f1khz) begin if(t2 9) begin f100hz = 139。 b0。 t2 = t2 + 1。 end else begin f100hz = 139。 b1。 t2 = 0。 end end always @(posedge f100hz) begin if(t39) 数字频率计 15 begin f10hz = 139。 b0。 t3 = t3 + 1。 end else begin f10hz = 139。 b1。 t3 = 0。 end end always @(posedge f10hz) begin if(t49) begin f1hz = 139。 b0。 t4 = t4 + 1。 end else begin f1hz = 139。 b1。 t4 = 0。 end end endmodule 该模块定义输入端口如下: ● clk:全局系统时钟信号 该模块定义输出端口如下: ● f1hz:输出 1Hz 的时钟信号 ● f10hz:输出 1Hz 的时钟信号 ● f1khz:输出 1Hz 的时钟信号 经过 ModelSim SE 仿真图像如下: 寄存器模块 flip_latch 寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。 并且将储存的溢出信号输出。 该模块的结构图如下图所示: 数字频率计 16 实现该模块的源代码如下: module flip_latch(clk,A0,A1,A2,A3,A4,A5,A6,Q0,Q1,Q2,Q3,Q4,Q5,Q6)。 output [3:0] Q0,Q1,Q2,Q3,Q4,Q5。 output Q6。 input clk。 input [3:0] A0,A1,A2,A3,A4,A5。 input A6。 reg [3:0] Q0,Q1,Q2,Q3,Q4,Q5。 reg Q6。 always @(posedge clk) begin Q0 = A0。 Q1 = A1。 Q2 = A2。 Q3 = A3。 Q4 = A4。 Q5 = A5。 Q6 =~ A6。 end endmodule 该模块定义输入端口如下 ● clk:所存数据信号输入,当 clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。 ● A0,A1,A2,A3,A4,A5, A6:寄存器的数据输入端 该模块定义输出端口如下: ● Q0,Q1,Q2,Q3,Q4,Q5, Q6:寄存器的数据输出端。 经过 ModelSim SE 仿真图像如下: 数字频率计 17 多路选择模块 data_mux 多路选择模块实现测量频率值的分时显示,即动态显示。 经过多路选择器模块来分时地传输数据。 多路选择模块的结构如图 所示。 图 多路选择模块结构框图 根据模块实现的功能设计 Verilog HDL 源代码如下: module data_mux(disp_select,A0,A1,A2,A3,A4,A5,Q)。 数字频率计 18 output [3:0] Q。 input [3: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) 439。 b0000: Q = A0。 439。 b0001: Q = A1。 439。 b0010: Q = A2。 439。 b0011: Q = A3。 439。 b0100: Q = A4。 439。 b0101: Q = A5。 default: Q = 439。 b0。 endcase end endmodule 该模块定义输入端口如下: ● disp_select:选择信。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。