




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、EDA课程设计系 别电气信息工程系 专 业 电子科学与技术班 级 0941班 组 员基于Verilog HDL数字频率计设计与实现摘要:在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。本文阐述了用Ver
2、ilog HDL语言设计了一个简单的数字频率计的过程关键词:周期;EDA;Verilog HDL;数字频率计;波形仿真目录1 引 言61.1 数字频率计概述71.2 频率测量的思想和方法72 Verilog HDL简介102.1 Verilog HDL的简介10103 数字频率计设计原理以及实现114 总结32参考文献331 引 言在电子测量领域中,频率测量的精确度是最高的,可达1010E-13数量级。因此,在生产过程中许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计来测量,以提高精确度。 国际上数字
3、频率计的分类很多。按功能分类,测量某种单一功能的计数器。如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、予置计数器、差值计数器、倒数计数器等,用于工业和白控技术等方面。数字频率计按频段分类 (1)低速计数器:最高计数频率10MHz; (2)中速计数器:最高计数频率10100MHz; (3)高速计数器:最高计数频率100MHz; (4)微波频率计数器:测频范围180GHz或更高。单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功
4、能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。1.1 数字频率计概述频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒
5、。闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。本文数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。因此,数字频率计是一种应用很广泛的仪器 电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高系统可靠性和速度。 集成电路的类型很多,从大的方面可以分为模拟电路和数字集成
6、电路2大类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。一般说来,数字系统中运行的电信号,其大小往往并不改变,但在实践分布上却有着严格的要求,这是数字电路的一个特点。数字集成电路作为电子技术最重要的基础产品之一,已广泛地深入到各个应用领域。1.2 频率测量的思想和方法1频率测量的基本思想测量被测信号在单位时间内的脉冲个数,其数字表达式f = N / t 其中: F为被测信号的频率 N为脉冲的个数 T为被测信号产生N个脉冲所需的时间频率测量方法 直接测量法:直接测量被测信号的频率,通过计数法来对被测信号在一定时间内的脉冲个数进行计数。直接厕灵法的结构框图如图所示。被测信号 测
7、量结果计 数放大整形标准时钟分 频图 直接测量法的结构框图误差来源技术过程中最大存在着±1个字的量化误差对时间t的准确把握,主要包括准时钟的时间准确性、整形电路、分频电路以及技术时间控制闸门的开关速度等因素。直接法测量的最大相对误差可以表达为( df/f )max=±( |1/N| + |G| )=±( |1/ft| + |G| ) 其中: N为脉冲的个数,G为标准时钟的频率稳定性,f为被测信号频率,t为被测信号产生N个脉冲所需的时间。功能及技术指标 频率测量范围: 10Hz 100MHz 测量分辨率: 1Hz 测量通道灵敏度: 50mVpp 通道输入阻抗:不小于
8、100k 测量误差:±1 测量结果显示:6位数码管显示其中,被测信号可以有三种,分别是方波、三角波和正弦波;测量结果显示采用六个数码管来显示;量程为:0999999Hz、2 Verilog HDL简介 Verilog HDL的简介 Verilog HDL是一种硬件描述语言(hardware description language),为了制作数位电路(数字电路)而用来描述ASICs和FPGAs的设计之用。Verilog 的设计者想要以 C 程序语言(en:C programming language)为基础设计一种语言,可以使工程师比较熟悉跟容易接受。事实上,它产生与 C 程序语言类
9、似的不严谨性质,并且大概与Pascal很相像。 这种语言跟传统的程序设计语言不同,在于它的程序叙述并非严格地线性(循序)执行。Verilog 模式包含不同模组(modules)的阶层关系。模组(modules)是输出(inputs)和输入(outputs)所定义出来的一个集合。在每个模组中,有一串的电线(wires)、暂存器(registers)和子模组(submodules)的定义。并且在每个模组里面,语言叙述大部分都被群组成为各种的执行区块(blocks),用来定义该模组所产生的行为描述。在每个区块(blocks)内,使用 begin 和 end 的关键字来区隔开来,其中的叙述是循序被执行
10、。但是同一个设计,不同的区块间的执行是平行的。 这个语言的叙述之子集合是可合成(synthesizable)。如果在一个电路设计的模组中仅包含可合成的叙述,那麽这个电路设计就可以被适当的软件,转换合成为电脑芯片的电路layout。在设计过程中,小组的组员由于设计思路不同选择了两种不同的设计方案,现将两种设计方案呈述如下:四位数码管显示设计方案六位数码管显示可调量程设计方案经过比对两种方案各有优劣,第一种方案由于简单,可操作性强;第二种方案量程大,实际意义比较大,所以经过商量,我们组决定两种设计方案都做下来。3 数字频率计设计方案及实现方案一 要测量待测信号的频率,需要一个基准信号对其计数。我选
11、择了系统自带的2MHz的时钟信号,通过分频器产生0.5Hz的基准信号,然后利用此信号高电平或低电平时对输入信号的上升沿计数,结果即1s内待测信号的上升沿数,即频率。 关于量程的显示,首先用1s的基准信号对待测信号计数,得到的计数值需要进行判断。判断过程如下:0<cnt<10000,量程10kHz,led1灭,en=0 10000<cnt<100000,量程100kHz,led2灭,en=1 100000<cnt<1000000,量程1MHz,led3灭,en=2 (cnt:计数值;led13:分别对应量程x1,x10,x100;en:选择信号,用于选择基准时
12、钟) 通过en可以从三个分频器产生的1s,0.1s,0.01s三个中选择一个合适的时钟,通过计数模块得到计数值送到显示模块,最后的测量值为数码管显示值乘以量程代表值。 系统流程图如下:分频1s计数选择时钟计数判断显示量程显示待测信号系统采用自底向上的设计方法,最底层采用VerilogHDL硬件描述语言实现,尔后生成模块,连接,调试。三. 方案实现由流程图可以看到共分成8个模块。clock13:三个分频器,分别产生1s,0.1s,0.01s的时钟信号,以clock1为例,clk_in为系统时钟,clk为分频产生信号。源代码如下:moduleclock1(clk_in,clk);input clk
13、_in;output clk;reg clk;reg 25:0 cnt;always (posedge clk_in)if(cnt<24999999) cnt=cnt+1; / (50mhz/1hz=50000000,cnt<50000000/2-1=24999999)else begin cnt=0; clk =! clk; endendmodule2)count1:计数模块,用1s时钟对待测信号计数,unknown为待测信号,cnt为计数值。源代码如下:module count1 (clk,unknown,cnt); input clk,unknown;output 24:0c
14、nt;reg 24:0temp;reg 24:0cnt; always (posedge unknown)beginif (clk) begin temp<=temp+2b10;endelsebeginif(temp>0)begincnt<=temp;endtemp<=0;endendendmodule3)judge:判断模块,对计数值进行判断,led13代表量程10kHz,100kHz,1MHz,en用来选择基准信号。源代码如下:module judge (cnt,led1,led2,led3,en); input 24:0cnt;output led1,led2,l
15、ed3; output 1:0en;reg 1:0en;reg led1,led2,led3;always (1)beginif (cnt<10000) beginled1<=1; led2<=0;led3<=0;en<=2'b00;endelse if(cnt<100000&&cnt>10000)beginled1<=0;led2<=1;led3<=0;en<=2'b01;endelsebeginled1<=0;led2<=0;led3<=1;en<=2'b10;
16、endelse beginled1<=0;led2<=0;led3<=0;endendendmodule4) select:通过en选择基准信号,clk13为分频产生的时钟信号,通过en选出一个合适的clk对待测信号计数。源代码如下:module select (clk1,clk2,clk3,en,clk);input clk1,clk2,clk3;input 1:0en; output clk;reg clk;always (1)if(en=0)beginclk<=clk1;endelsebeginif(en=1)beginclk<=clk2;endelsebe
17、ginif(en=2)beginclk<=clk3;endendendendmodule5)count2:计数,clr为清零信号,输入1清零,cout14为四个寄存器,分别存储计数值的四位数。源代码如下:module count2 (clk,unknown,cout1,cout2,cout3,cout4,clr); input clk,unknown,clr;output 3:0cout1,cout2,cout3,cout4; reg 3:0num1,num2,num3,num4;reg 3:0cout1,cout2,cout3,cout4;always (posedge unknown
18、)if(!clr)beginif(clk)begin if(num1>=9)beginnum1<=0;if(num2>=9)beginnum2<=0;if(num3>=9)beginnum3<=0;if(num4>=9)beginnum4<=0;endelsenum4<=num4+1;endelsenum3<=num3+1;endelsenum2<=num2+1;endelsenum1<=num1+1; endelsebeginif(num1|num2|num3|num4)beginbegincout1<=num1;
19、cout2<=num2;cout3<=num3;cout4<=num4;endnum1<=0;num2<=0;num3<=0;num4<=0;endelsecout1<=0;cout2<=0;cout3<=0;cout4<=0;endendelsebegincout1<=0;cout2<=0;cout3<=0;cout4<=0;endendmodule6):data_mux数值选择模块module data_mux(disp_select,A0,A1,A2,A3,Q);output 3:0 Q;input
20、 1:0disp_select;input 3:0 A0,A1,A2,A3;reg 3:0 Q;always (disp_select,A3,A2,A1,A0,Q)begin case() 2'b11: Q <= A3; 2'b10: Q <= A2; 2'b01: Q <= A1; 2'b00: Q <= A0; default: Q <= 4'b0; endcaseendendmodule7):dispselect位选模块module dispselect(clk,disp_select,Q);output 3:0 Q;
21、output 1:0 disp_select;input clk;reg 3:0 Q;reg 1:0 disp_select;always (posedge clk)beginif(disp_select < 2'b11) disp_select <= disp_select + 2'b1;elsedisp_select <= 2'b0;case(disp_select) 2'b11: Q <= 4'b0111; 2'b10: Q <= 4'b1011; 2'b01: Q <= 4'b1
22、101; 2'b00: Q <= 4'b1110; default: Q <= 4'b1111; endcaseendendmodule8):dispdecoder显示模块,每位输出转换为七段数码管显示。源代码如下:module dispdecoder(disp_select,data_out,clk,data_in);output 6:0 data_out;input 1:0 disp_select;input clk;input 3:0 data_in;reg 6:0 data_out;always (clk,disp_select,data_in,da
23、ta_out)beginif(clk) case(data_in) 0 : data_out <= 7'b1000000; /01 : data_out <= 7'b1111001; /12 : data_out <= 7'b0100100; /2 3 : data_out <= 7'b0110000; /34 : data_out <= 7'b0011001; /45 : data_out <= 7'b0100100; /56 : data_out <= 7'b1011111; /67 : da
24、ta_out <= 7'b0001111; /78 : data_out <= 7'b1111111; /89 : data_out <= 7'b1101111; /9default : data_out <= 7'b1000000;endcaseendendmodule各模块编译无误后连线组成完整系统。顶层电路图如下:四方案测试顶层图形文件建立后,对系统进行仿真,由于仿真时对输入输出信号的频率有要求,所以先对每个模块进行仿真。clock1模块,仿真波形如下:由于仿真对分频有要求,因此这里只进行了低分频,仅证明程序可进行分频,此波形为10
25、分频,输入周期为20ns,输出200ns,结果正确。2)judge模块,取cnt19=0,即cnt=524288Hz(100k,1M),仿真波形如下:可见led3为1,符合判断结果。3)select模块,取en=01,即选择clk2,仿真波形如下:由图可见,输出clk频率即为clk2频率,但是有一定延时。4)data_mux模块,disp_select输入为11,Q取值为A3,波形正确5)dispselect位选模块,根据输入波形扫描位码,6)count1模块,在一个完整波形clk内对unknown计数,clk周期为2us,unknown周期为20ns,计数转换为十进制后为100,结果正确。五
26、、系统框图方案二数字频率计允许测量信号的类型有三种:方波、三角波和正弦波,并且信号的测量通道灵敏度为 50mVpp,为此,需要将被测信号放大整形成标准的TTL电平的方波型号,便于CPLD/FPGA对信号脉冲的计数。在按键的设计中,需要考虑实际按键的消抖问题。图4.1 模块化划分后的结构 计数模块counter:对包含被测信号频率信息的脉冲进行计数 门控模块gate_control:根据量程,控制技术模块计数。 分频模块fdiv:将标准时钟分频,得到计数以及动态显示所需的时钟。 寄存器模块flip_latch:对计数模块的计数值进行寄存。 多路选择模块data_mux:根据动态选择信号,选择相应
27、的需要显示的计数值 动态为选择模块dispselevt:输出动态显示中的位选信号 BCD译码模块dispdenoder:将BCD码译成数码管的显示数据计数模块counter该模块主要完成对被测信号经过放大整形后输入到可编程逻辑器件的F_IN信号是现在一定的时间下的计数,采用六个异步BCD码十进制计数器来实现 0999999范围的计数。计数模块的结构框图如图所示。图 计数模块的结构框图根据模块实现的功能设计Verilog HDL源代码如下:module counter(EN,CLR,F_IN,F_OUT,Q0,Q1,Q2,Q3,Q4,Q5);output 3:0 Q5,Q4,Q3,Q2,Q1,Q
28、0;output F_OUT;input EN;input CLR;input F_IN;reg 3:0 Q5,Q4,Q3,Q2,Q1,Q0;reg F_OUT;reg F_out0,F_out1,F_out2,F_out3,F_out4;always (posedge F_IN)begin if(EN = 1'b1)&&(CLR = 1'b0)&&(Q0 != 4'b1001) begin Q0 <= Q0 + 4'b0001;F_OUT <= 1'b0; end else beginQ0 <= 4
29、39;b0000;if(EN = 1'b1)&&(CLR = 1'b0)&&(Q1 != 4'b1001)begin Q1 <= Q1 + 4'b0001; F_OUT <= 1'b0;endelsebegin Q1 <= 4'b0000; if(EN = 1'b1)&&(CLR = 1'b0)&&(Q2 != 4'b1001) begin Q2 <= Q2 + 4'b0001; F_OUT <= 1'b0; en
30、d else beginQ2 <= 4'b0000;if(EN = 1'b1)&&(CLR = 1'b0)&&(Q3 != 4'b1001)begin Q3 <= Q3 + 4'b0001; F_OUT <= 1'b0;endelsebegin Q3 <= 4'b0000; if(EN = 1'b1)&&(CLR = 1'b0)&&(Q4 != 4'b1001) begin Q4 <= Q4 + 4'b0001;
31、F_OUT <= 1'b0; end else begin Q4 <= 4'b0000; if(EN = 1'b1)&&(CLR = 1'b0)&&(Q5 != 4'b1001) begin Q5 <= Q5 + 4'b0001; F_OUT <= 1'b0; end else begin Q5 <= 4'b0000; F_OUT <= 1'b1; end end end end end endendendmodule该模块定义输入端口如下: EN:异步B
32、CD码十进制计数器的全局使能信号 CLR:异步BCD码十进制计数器复位信号 F_IN:被测信号经过放大与整形处理后的信号该模块定义输出端口如下: F_OUT:超出技术范围0999999的输出信号,用来指示提醒用户选择更大的量程。 Q0:计数器的最低位输出 Q1:计数器的第5位输出 Q2:计数器的第4位输出 Q3:计数器的第3位输出 Q4:计数器的第2位输出 Q5:计数器的第1位输出在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图所示。图 计数模块counter的仿真波形门控模块gate_control 门控模块实现检测外界量程的选择,并且根据量程输出控制6位BCD码十
33、进制计算器的计数时钟,以及在测量完一次信号频率后,计数器计数值清零。计数器的清零要与后级寄存器的锁存时刻做很好的时序配合。应该实在计数器测量完一次信号频率后,首先将数据锁存到寄存器,然后再将计数器值清零,这样可以惊醒下一次测量。门控模块的结构框图如图所示图 门控模块结构框图 根据模块实现的功能设计Verilog HDL源代码如下:module gate_control(SW0,SW1,SW2,f1hz,f10hz,f100hz,Latch_EN,Counter_Clr,Counter_EN,dp_s1hz,dp_s10hz,dp_s100hz); output Latch_EN;output
34、Counter_Clr;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;/初始化输入以及中间量initialbegin fref <= 1'b0; wire_1 <= 1'b0; wire_2 <= 1'b0;end/根据不同的外界量程选择,选择相应的计数基时钟always (SW0 or S
35、W1 or SW2 or f1hz or f10hz or f100hz)begin if(SW2 = 1'b1) begin fref <= f100hz; dp_s1hz,dp_s10hz,dp_s100hz <= 3'b001; end else if(SW1 = 1'b1) begin fref <= f10hz; dp_s1hz,dp_s10hz,dp_s100hz <= 3'b010; end else if(SW0 = 1'b1) begin fref <= f1hz; dp_s1hz,dp_s10hz,dp_
36、s100hz <= 3'b100; endend/根据不同的计数基时钟,提供输出相应的计数器计数值的清除脉冲与锁存器锁存脉冲always (posedge fref)begin wire_1 <= ! wire_1;endalways (negedge fref)begin wire_2 <= wire_1;endassign Counter_EN = wire_1;assign Latch_EN = (! Counter_EN) & wire_2;assign Counter_Clr = (! Counter_EN) & (! Latch_EN) |
37、 (! wire_2);endmodule 该模块定义输入端如下: SW0、SW1、SW2:量程选择开关 flhz:1Hz的标准时钟输入 fl0hz:10Hz的标准时钟输入 fl00hz:100Hz的标准时钟输入该模块定义输入端口如下: Latch_EN:用来是能寄存器所存数据 Counter_Clr:用于计数器的清零 Counter_EN:用于使能计数器开始计数 dp_s1hz:选择999999Hz量程时,用于控制显示中的小数点位置 dp_s10hz:选择9999.99Hz量程时,用于控制显示中的小数点位置 dp_s100hz:选择99.9999Hz量程时,用于控制显示中的小数点位置在Alt
38、era公司的软件工具QuartusII中编译和波形仿真得到波形如图所示。图 门控模块的仿真波形分频模块fdiv分频模块在系统全局时钟的驱动下,经过分频得到系统中所需要的多种频率成分的时钟信号。实际的分频模块总共有四个分频时钟,在程序上只需要改变其参数要求即可,所以在这里只介绍50MHZ到1MHZ的分频,其余的不在介绍。分频模块的结构框图如图所示。图 分频模块结构框图根据模块实现的功能设计Verilog HDL源代码如下:module div1(clk_50M,clk1,reset);/ 端口的定义input clk_50M,reset;/ 总的时钟是50Moutput clk1;/分频后输出的
39、时钟 1KHZreg clk1;reg 31:0 count;/32位的计数器always (posedge clk_50M or negedge reset)/异步复位begin if(!reset) begin clk1<='d0; count=32'd0;endelse if(count=32'd50_000)/ 判断计时器记到了50_000吗 begin count<=32'd0;/计到50_000计数器清零 clk1<=clk1;/输出的时钟取反 end/end begin else count<=count+1'd1;
40、/ 没计到50_000计数器加一end/end alwaysendmodule / 结束分频模块该模块定义输入端口如下: Clk:全局系统时钟信号该模块定义输出端口如下:clk1为分频信号reset为复位按键在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图所示。图 分频模块的仿真波形寄存器模块flip_latch寄存器模块实现每一个测量频率时,计数器计算值的暂时存储。寄存器模块的结构框图如图所示。图 寄存器模块根据模块实现的功能设计Verilog HDL源代码如下:module flip_latch(clk,A0,A1,A2,A3,A4,A5,Q0,Q1,Q2,Q3,
41、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)beginQ0 <= A0;Q1 <= A1;Q2 <= A2;Q3 <= A3;Q4 <= A4;Q5 <= A5;endendmodule该模块定义输入端口如下: clk:所存数据信号输入,当clk的上升沿到来时,寄存器将输入端信号锁存进寄存器,并且改变输出。 A0,A1,A2,A3,A4,A5:寄存器的数据输入端该模
42、块定义输出端口如下: Q0,Q1,Q2,Q3,Q4,Q5:寄存器的数据输出端。在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图所示。图 寄存器模块的仿真波形多路选择模块data_mux多路选择模块实现测量频率值的分时显示,即动态显示。经过多路选择器模块来分时地传输数据。多路选择模块的结构如图所示。图 多路选择模块结构框图根据模块实现的功能设计Verilog HDL源代码如下:module data_mux(disp_select,A0,A1,A2,A3,A4,A5,Q);output 3:0 Q;input 2:0disp_select;input 3:0 A0,A1
43、,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; endcaseendendmodule该模块定义输入端口如下: disp_selec
44、t:选择信号输入 A0,A1,A2,A3,A4,A5:多路选择模块的数据输入端口该模块定义输出端口如下: 多路选择模块的数据输出端口。在Altera公司的软件工具QuartusII中编译和波形仿真得到波形如图所示。图 多路选择模块的仿真波形动态位选模块dispselect动态位选模块用来驱动数码动态地显示频率测量数据,分时地选择各个数码管进行显示 动态位选的结构框图所示。图 动态位选模块的结构框图根据模块实现的功能设计Verilog HDL源代码如下:module dispselect(clk,disp_select,Q);output 5:0 Q;output 2:0 disp_select
45、;input clk;reg 5:0 Q;reg 2:0 disp_select;always (posedge clk)beginif(disp_select < 3'b101)disp_select <= disp_select + 3'b1;elsedisp_select <= 3'b0;case(disp_select) 3'b000: Q <= 6'b100000; 3'b001: Q <= 6'b010000; 3'b010: Q <= 6'b001000; 3'b0
46、11: Q <= 6'b000100; 3'b100: Q <= 6'b000010; 3'b101: Q <= 6'b000001; default: Q <= 6'b000000; endcaseendendmodule该模块定义输入端口如下: clk:动态位选的时钟信号输入,一般取1KHz左右的标准时钟。该模块定义输出端口如下: disp_select:动态位选中间量输出,用于与系统中其他模块之间的同步。 Q:动态位选信号输出,可以直接接到数码管的公共端。在Altera公司的软件工具QuartusII中编译和波形仿真
47、得到波形如图所示。图 动态位选模块的仿真波形BCD译码模块dispdecoderBCD译码模块主要实现BCD码到7段数码管显示码字段的转换,同时,考虑到频率测量中的一些“零”的处理,比如选择量程1999999Hz,但被测信号频率为100Hz,这样在显示的时候就需要将6为数码管的前三位屏蔽。BCD译码模块的结构框图如图所示。图 BCD译码模块的结构框图根据模块实现的功能设计Verilog HDL源代码如下:module dispdecoder(data_in,disp_select,dp_s1hz,dp_s10hz,dp_s100hz,Q5,Q4,Q3,Q2,Q1,Q0,counter_out,
48、data_out,dp);output 6:0 data_out;output dp;input 3:0 data_in;input 2:0 disp_select;input dp_s1hz,dp_s10hz,dp_s100hz;input 3:0 Q5,Q4,Q3,Q2,Q1,Q0;input counter_out;reg dp;reg 6:0 data_out;reg hide;initial begin dp <= 1'b0; hide <= 1'b0;end/译码显示数据always (data_in,hide,data_out)begin if(hid
49、e = 1'b0) begincase(data_in) 4'b0000 : data_out <= 7'b1111110; /04'b0001 : data_out <= 7'b0110000; /14'b0010 : data_out <= 7'b1101101; /24'b0011 : data_out <= 7'b1111001; /34'b0100 : data_out <= 7'b0110011; /44'b0101 : data_out <= 7
50、39;b1011011; /54'b0110 : data_out <= 7'b1011111; /64'b0111 : data_out <= 7'b1110000; /74'b1000 : data_out <= 7'b1111111; /84'b1001 : data_out <= 7'b1110011; /9default : data_out <= 7'b0000000;endcase endend/小数点位置与零数字的处理always (disp_select,dp_s1hz,dp
51、_s10hz,dp_s100hz, Q5,Q4,Q3,Q2,Q1,counter_out,dp,hide)begin if (disp_select = 3'b001) && (dp_s100hz = 1'b1)| (disp_select = 3'b011) && (dp_s10hz = 1'b1)| (disp_select = 3'b101) && (dp_s1hz = 1'b1) dp <= 1'b1; else dp <= 1'b0; case(disp_sel
52、ect) 3'b000: begin if(counter_out = 1'b0) && (Q5 = 4'b0) hide <= 1'b1; else hide <= 1'b0; end 3'b001: begin if(counter_out = 1'b0) && (Q5 = 4'b0) && (Q4 = 4'b0) &&(dp_s100hz != 1'b1) hide <= 1'b1; else hide <= 1&
53、#39;b0; end 3'b010: begin if(counter_out = 1'b0) && (Q5 = 4'b0) && (Q4 = 4'b0) && (Q3 = 4'b0) && (dp_s100hz != 1'b1) hide <= 1'b1; else hide <= 1'b0; end 3'b011: begin if(counter_out = 1'b0) && (Q5 = 4'b0) && (Q4 = 4'b0) && (Q3 = 4'b0) && (Q2 = 4'b0) && (dp_s100hz != 1'b1)&& (dp_s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二氧化碳响应性凝胶封窜体系研究
- 黄金分割教学设计
- 社交媒体艺术推广策略-洞察阐释
- 绿色工厂建设的战略意义与发展趋势
- 高三一轮复习 自然整体性与差异性1 教学设计学案
- 沪苏大丰产业联动集聚区污水处理厂工程可行性研究报告
- 万顷沙镇红港村生态景观廊道工程可行性研究报告
- 2025至2030年中国热熔喷胶贴跟机行业投资前景及策略咨询报告
- 2025至2030年中国活性膨胀剂行业投资前景及策略咨询报告
- 2025至2030年中国氯丁橡胶圆弧齿同步带行业投资前景及策略咨询报告
- 水泵测试报告
- 护理安全用药制度
- 《普通逻辑》第五版课后习题答案
- 中国药妆行业发展现状、药妆市场政策解读及未来发展趋势分析图
- 焊接车间作业流程看板
- 围堰施工监理实施细则
- 老年痴呆护理
- 车间精益改善总结报告课件(PPT 19页)
- 中小学教育惩戒规则(试行)全文解读ppt课件
- YY∕T 1797-2021 内窥镜手术器械 腔镜切割吻合器及组件
- 《冬病夏治工作指南》
评论
0/150
提交评论