实验六-数字频率计的Verilog-HDL语言实现

合集下载

根据Verilog的数字频率计的设计

根据Verilog的数字频率计的设计

根据Verilog的数字频率计的设计以下是一个使用Verilog设计并仿真的数字频率计的示例:```verilogmodule frequency_counterinput reset,input clk,output reg [31:0] frequencyreg [31:0] count;reg [31:0] prev_count;reg counting;if (reset) begincounting <= 0;count <= 0;prev_count <= 0;end else beginprev_count <= count;count <= count + 1;if (prev_count == 0) begincounting <= 1;counting <= 0;frequency <= count;count <= 0;endendendendmodule```为了仿真该模块,可以使用任何支持Verilog仿真的工具,如ModelSim。

以下是一个对该模块进行仿真的示例测试台代码:```verilogmodule frequency_counter_tb;reg reset;reg clk;wire [31:0] frequency;frequency_counter dut.reset(reset),.clk(clk),.frequency(frequency)initial beginreset = 1;;reset = 0;endalways begin;clk = ~clk;endendmodule```在上述测试台代码中,引脚`reset`和`clk`通过不断的切换来产生复位和时钟信号。

然后,通过监视`frequency`引脚,可以检查计算的频率是否正确。

完成设计和测试台代码后,可以使用仿真工具对其进行仿真,以验证设计的正确性和性能。

EDA实验06—Verilog HDL中使用函数和任务

EDA实验06—Verilog HDL中使用函数和任务

电子信息工程学系实验报告课程名称:EDA技术与实验在实验项目名称:Verilog HDL中使用函数和任务实验时间:班级:通信091 姓名:Jxairy 学号:实验目的:1.了解函数的定义和在模块设计中的使用。

2.了解函数的可综合性问题。

3.了解许多综合器不能综合复杂的算术运算。

4.掌握任务在Verilog模块设计中的应用。

5.学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。

实验环境:Windows 7、MAX+PlusⅡ10、QuartusⅡ等。

实验内容:1.用函数定义8—3编码器的文本设计及仿真。

2.用任务模块进行alutask的文本设计及仿真。

实验过程:一、用函数定义8—3编码器的文本设计及仿真:(试验环境:MAX+PlusⅡ10)(1)新建文本:选择菜单File下的New,出现如图5.1所示的对话框,在框中选中“Text Editor file”,按“OK”按钮,即选中了文本编辑方式。

图6.1 新建文本(2)另存为Verilog编辑文件,命名为“code_83.v”如图5.2所示。

(3)在编辑窗口中输入程序,如图6.3所示。

图6.2 另存为.V编辑文件图6.3 8—3编码器的源程序(4)设置当前文本:在MAX+PLUS II中,在编译一个项目前,必须确定一个设计文件作为当前项目。

按下列步骤确定项目名:在File菜单中选择Project 中的Name选项,将出现Project Name 对话框:在Files 框内,选择当前的设计文件。

选择“OK”。

如图6.4所示。

(5)打开编译器窗口:在MAX—plusⅡ菜单内选择Compiler 项,即出现如图6.5的编译器窗口。

图6.4 设置当前仿真的文本设计图6.5 编译器窗口选择Start即可开始编译,MAX+PLUS II编译器将检查项目是否有错,并对项目进行逻辑综合,然后配置到一个Altera 器件中,同时将产生报告文件、编程文件和用于时间仿真用的输出文件。

verilog简易数字频率计报告

verilog简易数字频率计报告

一、实验原理根据原理图,将计数器模块、显示模块、扫描模块、译码器模块等分别做出。

其原理是在1S内用待测信号给计数器计数,并在一秒结束时给计数器清零,计出来用缓存器缓存,在数码管中显示出来。

二、方案论证一、通过50M的时钟进行计数获得精密的1HZ——计数器用Verilog HDL 语言实现在1HZ为底电平时计数——门控电路用或门开启——1HZ为高电平时进行数据锁存与显示——利用Verilog HDL语言使前面的0不显示。

计数器用Verilog HDL语言在写代码时可以用复制粘贴的方法可以简便的实现。

通过50M的时钟进行计数获得精密的1HZ后只是经过很短的时间内进行计数器的清零及数据的琐存,并且得到的是1HZ的精密时钟。

把锁存的数据进行清0的转换后利用分时扫描,后通过数码管译码显示。

说明:Cnt9999:0000~9999计数器;Buffer:锁存器;Scan:扫描显示共8个模块三、实验步骤一、计数器模块计数器模块的仿真波形二、锁存模块利用32位的D触发器进行储存计数器送给它的数据。

在时钟为上升沿的时候触发保存数据。

锁存模块的源代码:module buffer_32(clr,clear,in,out);input clear,clr;input[31:0] in;output[31:0] out;reg[31:0] out;always@(posedge clear or negedge clr)if(!clr)out<=0;//else if(clear)out=in;else out<=in;endmodule三、转化清零模块波形仿真波形module cnt9999(clr,clk,q,c);input clr,clk;output c;output [15:0]q;reg c;reg [15:0]q;always @(posedge clk or negedge clr)beginif(!clr)begin q[15:0]<=0;c<=1'b0;endelse if(q[15:0]==16'H9999) begin q[15:0]<=0;c<=1'b1;endelse if(q[11:0]==12'H999)begin q[15:0]<=q[15:0]+12'H667;c<=1'b0;endelse if(q[7:0]== 8'H99)begin q[15:0]<=q[15:0]+8'H67;c<=1'b0;endelse if(q[3:0]== 4'H9)begin q[15:0]<=q[15:0]+4'H7;c<=1'b0;endelse begin q[15:0]<=q[15:0]+1'b1; c<=1'b0;endendendmodule四、扫描显示模块把存储的数据分别分给8个数码管,利用循环扫描即可显示出所要显示的数据。

VHDL语言设计数字频率计

VHDL语言设计数字频率计

数字频率计的设计一、频率计实现的功能要设计的频率计的测量范围为1MHz。

为了提高测量的精度,量程分为三档,分别是:10kHz、100kHz、1MHz。

并要求在测量频率大于或小于选择的量程时,频率计自动换档。

1、当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增加一档。

2、当读数小于009时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。

3、当超出测量范围时,显示错误。

4、在计数时不显示数据,计数完成后只显示测量结果。

5、小数点位置要自动移位。

二、频率计各部分的分析在这个设计中,需要用计数器来进行计数,而且计数器在各个档位要被重复使用,在测量的过程中,计数允许时钟信号还要进行调整,故将计数器设计成一个单独的模块,提供计数值的输出。

显示结果包括数值显示,档位显示及溢出标志显示。

其中数值显示要用到三个数码管,实验箱上连在一起的三个数码管中,只有两个数码管内部接有译码器,因此我们自己还要在程序中为那个没有译码器的数码管再加一段七段译码器程序来显示结果。

档位标志由三个LED灯来显示,代替数码管上的小数点的功能。

溢出标志由两个LED灯来显示,其中一个显示结果溢出,另一个显示输入信号在测量范围之内。

该频率计的顶层逻辑电路原理图如图(1)所示:图(1)三、频率计各部分的设计和实现从上面的分析可以知道,频率计可以由三个模块来组成。

下面对各个模块的设计方法和实现方法进行详细说明。

1、时基进程的设计和实现在实际使用时,输入的信号是随意的,没有办法预知输入的频率。

因此选取频率计的时基是非常重要的。

在设计要求中,将量程分为三档,在某一档进行测量时,需要提供该档的时基。

在10kHz档,该档最大读数为9.99kHz,最小读数为0.01 kHz,所以要提供的时基是频率为0.01 kHz的脉冲。

同理,在100 kHz档上,要提供的时基应该是频率为0.1 kHz的脉冲。

在1 MHz档上,要提供的时基是频率为1 kHz的脉冲。

数字频率计实验报告

数字频率计实验报告

考虑到测量方便,将数字频率计划分为四档:10~99Hz 、100~999Hz 、1000~9999Hz 、10000~99999Hz 。

这样可以保证每一档三位有效数字,而且第三位有效数字误差在±2以内时即可达到精度要求。

三个输入信号:待测信号、标准时钟脉冲信号和复位脉冲信号。

设计细化要求:频率计能根据数字频率计设计计双0102 雷昊 2001011830786一、课程设计内容及要求本次课程设计要求设计并用FPGA 实现一个数字频率计,具体设计要求如下:测量频率范围: 10Hz ~100KHz 精度: ΔF / F ≤ ±2 %系统外部时钟: 1024Hz 测量波形: 方波 Vp-p = 3~5 V 硬件设备:Altera Flex10K10 五位数码管 LED 发光二极管编程语言:Verilog HDL / VHDL二、系统总体设计输入待测信号频率自动选择量程,并在超过最大量程时显示过量程,当复位脉冲到来时,系统复位,重新开始计数显示频率。

基于上述要求,可以将系统基本划分为四个模块,分别为分频、计数、锁存和控制,并可以确定基本的连接和反馈,如上图所示。

三、系统及模块设计与说明如左图所示为数字频率计测量频率的原理图。

已知给定标准时钟脉冲高电平时间,将此0T 高电平信号作为计数器闸门电平,通过计数器得到时间内待测脉冲的个数N ,则有。

由图示可以看出,一个闸门电平时间内0T 0T Nf计数的最大误差为N ±1,为保证误差要求取N ≥100。

经计算,四档的闸门电平时间分0T 别为10s 、1s 、0.1s 和0.01s 。

仅对计数器计数值N 进行简单的移位即可得到结果。

产生闸门电平的工作由分频器完成。

分频器采用计数分频的方法,产生计数闸门电平和一系列控制脉冲,并接受计数器和控制器的反馈。

控制器主要用来判断计数器计数是否有效,从而控制档位转换,锁存器打开、关闭和设定值。

计数器在分频器和控制器的作用下对输入待测信号计数,并把计数值输出,在计数溢出时向控制器和分频器发送溢出脉冲。

verilog hdl实验报告

verilog hdl实验报告

verilog hdl实验报告《Verilog HDL实验报告》Verilog HDL(硬件描述语言)是一种用于描述电子系统的硬件的语言,它被广泛应用于数字电路设计和硬件描述。

本实验报告将介绍Verilog HDL的基本概念和使用方法,并通过实验展示其在数字电路设计中的应用。

实验目的:1. 了解Verilog HDL的基本语法和结构2. 掌握Verilog HDL的模块化设计方法3. 熟悉Verilog HDL的仿真和综合工具的使用实验内容:1. Verilog HDL的基本语法和结构Verilog HDL是一种硬件描述语言,其语法和结构类似于C语言。

它包括模块定义、端口声明、信号赋值等基本元素。

在本实验中,我们将学习如何定义Verilog模块,并使用端口声明和信号赋值描述数字电路的行为。

2. Verilog HDL的模块化设计方法Verilog HDL支持模块化设计,可以将复杂的电路分解为多个模块,每个模块描述一个子电路的行为。

在本实验中,我们将学习如何设计和实现Verilog模块,并将多个模块组合成一个完整的数字电路。

3. Verilog HDL的仿真和综合工具的使用Verilog HDL可以通过仿真工具进行功能验证,也可以通过综合工具生成实际的硬件电路。

在本实验中,我们将使用Verilog仿真工具对设计的数字电路进行功能验证,并使用综合工具生成对应的硬件电路。

实验步骤:1. 学习Verilog HDL的基本语法和结构2. 设计一个简单的数字电路,并实现Verilog模块描述其行为3. 使用仿真工具对设计的数字电路进行功能验证4. 使用综合工具生成对应的硬件电路实验结果:通过本实验,我们学习了Verilog HDL的基本概念和使用方法,并成功设计和实现了一个简单的数字电路。

我们使用仿真工具对设计的数字电路进行了功能验证,并使用综合工具生成了对应的硬件电路。

实验结果表明,Verilog HDL在数字电路设计中具有重要的应用价值。

基于verilog语言的数字频率计设计

基于verilog语言的数字频率计设计

基于verilog语言的数字频率计设计以下是一种基于Verilog语言的数字频率计设计:```verilogmodule frequency_counterinput clk, //输入时钟input reset, //复位信号input enable, //启用信号input signal_in, //输入信号output [31:0] frequency //输出频率reg [31:0] count; //计数器if (reset) begincount <= 0;end else if (enable) beginif (signal_in) begincount <= count + 1;endendendassign frequency = count; //将计数器值赋给输出端口endmodule```在此设计中,我们使用一个32位的计数器(count)来计算输入信号(signal_in)的高电平脉冲数。

输入时钟(clk)用于同步计数器的操作。

复位信号(reset)用于将计数器复位为0。

启用信号(enable)用于控制计数器的启用与禁用。

当reset为高电平时,计数器会被复位为0。

当enable为高电平时,计数器会逐渐增加,直到输入信号(signal_in)为低电平。

此时,计数器的值会保持不变。

最终,计数器的值会通过输出端口frequency输出。

在这个设计中,frequency是一个32位的输出端口,表示输入信号的高电平脉冲数。

这个设计可以通过Verilog仿真工具进行仿真,并且可以综合到FPGA芯片中进行硬件实现。

Verilog-数字频率计

Verilog-数字频率计

摘要本文介绍了基于FPGA的数字频率计的设计方法,设计采用硬件描述语言Verilog,在软件开发平台ISE上完成,可以在较高速时钟频率(48MHz)下正常工作。

该数字频率计采用测频的方法,能准确的测量频率在10Hz到100MHz之间的信号。

使用ModelSim仿真软件对Verilog程序做了仿真,并完成了综合布局布线,最终下载到芯片Spartan3A上取得良好测试效果。

关键词:FPGA,Verilog,ISE,测频方法IAbstractThis paper introduces the design method of digital frequency meter based on FPGA,which use hardware description language-Verilog in software development platform ISE and can word in relatively high-speed clock of48MHz.The frequency meter uses the method of frequency measurement,which could accurately measure the frequency of signals between10Hz to100MHz.This system uses the simulation tool-ModelSim to run and debug the Verilog program,and design the circuit placement.A good result can be achieved when the program was burnt on the chip Spartan3A.KeywordsKeywords::FPGA,Verilog,ISE,Frequency MeasurementIIII目录第一章测量原理与方法................................................................................................................................................................................................441.1测频方法.............................................................................................................41.2测周方法.............................................................................................................51.3等精度测量法....................................................................................................51.4放大整形电路....................................................................................................61.5时基信号产生. (7)第二章任务要求..........................................................................................................................................................................................................................88第三章各模块功能及介绍....................................................................................................................................................................................883.1分频器..................................................................................................................84.2闸门选择器........................................................................................................104.3频率计数器........................................................................................................124.4锁存器................................................................................................................144.5扫描显示控制译码系统.. (15)第四章顶层电路及总体仿真............................................................................................................................................................................16164.1顶层电路.. (16)4.2总体仿真结果 (16)4.3测试结果 (19)第一章测量原理与方法所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。

在FPGA上用VHDL实现数字频率计 实验报告

在FPGA上用VHDL实现数字频率计 实验报告

数字系统设计实验报告一、设计要求:1、(1)频率测量范围10Hz~1MHz(2)量程自动转换,量程分为10KHz (1s) 、100KHz (0.1s) 、1MHz (10ms)三档。

转换规则如下:当读数大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大一档;当读数小于0999时,频率计处于欠量程状态,下一次测量时,量程自动减小一档(3)数据采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示计数结果,并将此显示结果保持到下一次计数结束。

(4)用发光二极管显示量程二、方案选则1测量原理:当预置门控信号为高电平时,启动计数器,被测信号(频率为fx) 计数当预置门控信号为低电平时,关闭计数器设在一次预置门控时间Tg内对被测信号计数值为Nx,则fx= Nx / Tg2具体方案:本设计中将2MHz的时钟分三次频,分别作为防抖电路的周期信号、显示模块片选信号、计数及锁存模块闸门信号。

防抖电路滤去窄波,显示模块用模4计数器来分别输出四位测量结果。

计数器通过在0.1s内对输入信号的高电平(发生期)进行计数来得出结果,并且为了达到换挡目的,测量时计六位数,通过结果选择档位进行输出。

二、原理图三、总体电路图四、流程图五、设计清单1、防抖电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY debounce ISPORT(key,cp: IN STD_LOGIC; --复位键imp:OUT STD_LOGIC); --去掉窄波后输出END debounce;ARCHITECTURE base OF debounce ISSIGNAL ql,q2:STD_LOGIC;BEGINPROCESS(cp)BEGINIF cp'event AND cp='1'THENq2<=ql; ql<=key;END IF;END PROCESS;imp<=ql AND NOT q2;END base;时序仿真波形:2、分频电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY dividefre4 ISPORT(cp_2m:IN STD_LOGIC; --2MHzcpl:OUT STD_LOGIC; --200Hzcp2:OUT STD_LOGIC; --25Hzcp3:OUT STD_LOGIC); --5HzEND dividefre4;ARCHITECTURE behavior OF dividefre4 IS SIGNAL tout:INTEGER RANGE 0 TO 4999; --5000分频SIGNAL toutl:INTEGER RANGE 0 TO 7; --8分频SIGNAL tout2:INTEGER RANGE 0 TO 39; --40分频SIGNAL cp_1:STD_LOGIC;SIGNAL cp_2:STD_LOGIC;SIGNAL cp_3:STD_LOGIC;SIGNAL cp:STD_LOGIC;BEGINPROCESS(cp_2m) –分出400Hz时钟BEGINIF(cp_2m'event AND cp_2m='1')THENIF tout=4999 THENtout<=0;ELSE tout<=tout+1;END IF;IF tout=2499 THENcp<='0';ELSE cp<='1';END IF;END IF;END PROCESS;PROCESS(cp) --200Hz时钟BEGINIF(cp'event AND cp='1')THENcp_1<=NOT cp_1;END IF;END PROCESS;PROCESS(cp_1) --25Hz时钟和5HzBEGINIF(cp_1'event AND cp_1='1')THENIF toutl=7 THEN toutl<=0;ELSE toutl<=toutl+1;END IF;IF toutl=3 THENcp_2<='1';ELSIF toutl=7 THEN cp_2<='0'; --8分频得25Hz END IF;IF tout2=39 THEN tout2<=0; --40分频得5HzELSE tout2<=tout2+1;END IF;IF tout2=39 THENcp_3<='1';ELSIF tout2=19 THEN cp_3<='0';END IF;END IF;END PROCESS;cpl<=cp_1;cp2<=cp_2;cp3<=cp_3;END behavior;仿真波形:(因原程序所分频倍数太大,所以这里将5000倍分频降至50倍)3、计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY fretest ISPORT(enable:IN STD_LOGIC; --使能cp3:IN STD_LOGIC; --闸门INput:IN STD_LOGIC; --被测信号reset:IN STD_LOGIC; --复位信号overflow:OUT STD_LOGIC; --大于1000kHzPlay0,playl,play2,play3:OUT INTEGER RANGE 0 TO 9;decimal:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点,即档位END fretest;ARCHITECTURE behavior OF fretest ISSIGNAL r0_1,r1_1,r2_1,r3_1,r4_1,r5_1:INTEGER RANGE 0 TO 9;BEGINPROCESS(INput,enable,reset,cp3)BEGINIF enable='0'THEN NULL; --不测量ELSIF(input'event AND input='1')THEN --检测被测信号IF reset='1'THEN --同步复位,高电平有效overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSIF cp3='0'THEN --闸门为0时清零Overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSE --闸门为高电平计数r0_1<=r0_1+1;IF r0_1=9 THEN r1_1<=r1_1+1;r0_1<=0;IF(r1_1=9)THEN r2_1<=r2_1+1;r1_1<=0;IF(r2_1=9)THEN r3_1<=r3_1+1;r2_1<=0;IF(r3_1=9)THEN r4_1<=r4_1+1;r3_1<=0;IF(r4_1=9)THEN r5_1<=r5_1+1;r4_1<=0;IF(r5_1=9)THEN r5_1<=0;overflow<='1'; --大于1000kHz END IF;END IF;END IF;END IF;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(r5_1,r4_1)BEGINIF r5_1=0 AND r4_1=0 THEN --为小于9999Hz时play0<=r0_1;playl<=r1_1;play2<=r2_1;play3<=r3_1;decimal<="100";ELSIF r5_1=0 THEN --为几十kHz时play0<=r1_1;playl<=r2_1;play2<=r3_1;play3<=r4_1;decimal<="010";ELSE --为几百kHz时play0<=r2_1;playl<=r3_1;play2<=r4_1;play3<=r5_1;decimal<="001";END IF;END PROCESS;END behavior;仿真波形4、锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY frelatch ISPORT(reset:IN STD_LOGIC; --复位cp3:IN STD_LOGIC; --时钟Overflow: IN STD_LOGIC; --大于1000kHz表示play0,playl,play2,play3:IN INTEGER RANGE 0 TO 9;decimal:IN STD_LOGIC_VECTOR(2 DOWNTO 0);--小数点overlatch:OUT STD_LOGIC; --大于1000kHzp0latch,pllatch,p21atch,p31atch:OUT INTEGER RANGE 0 TO 9; delatch:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点END frelatch;ARCHITECTURE behavior OF frelatch ISBEGINPROCESS(cp3,reset)BEGINIF reset='1'THENoverlatch<='0';p0latch<=0;pllatch<=0;p21atch<=0;p31atch<=0;delatch<=decimal;ELSIF cp3'event AND cp3='0'THENoverlatch<=overflow;p0latch<=play0;pllatch<=playl;p21atch<=play2;p31atch<=play3;delatch<=decimal;END IF;END PROCESS;END behavior;仿真波形5、显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY display ISPORT( cpl:IN STD_LOGIC; --时钟overflow:IN STD_LOGIC; --高于1000kHz标志p0,p1,p2,p3:IN INTEGER RANGE 0 TO 9;--BCD码输入 show:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7段码输出 sel:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--位扫描码END dISplay;ARCHITECTURE behavior OF display ISSIGNAL count: INTEGER RANGE 0 TO 3;SIGNAL sel_1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(cpl)BEGINIF(cpl'event AND cpl='1') THENIF count=3 THEN count<=0;ELSEcount<=count+1;END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN 0=>sel_1<="1110"; --第0位WHEN 1=>sel_1<="1101"; --第1位WHEN 2=>sel_1<="1011"; --第2位WHEN 3=>sel_1<="0111"; --第3位END CASE;END PROCESS;PROCESS(overflow,sel_1)BEGINIF(overflow='1')THENshow<="0110111"; --高于1000kHz,显示HELSIF(sel_1(0)='0')THEN --第0位数码管译码CASE p0 ISWHEN 0=>show<="1111110";--显示0,a-gWHEN 1=>show<="0110000";--1WHEN 2=>show<="1101101";--2WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(1)='0')THEN --第1位译码 CASE p1 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111"; WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(2)= '0')THEN --第2位译码 CASE p2 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(3)='0')THEN --第3位译码 CASE p3 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;END IF;END PROCESS; sel<=sel_1; END behavior; 仿真波形。

基于Verilog HDL的数字频率计设计及仿真实现

基于Verilog HDL的数字频率计设计及仿真实现

基于Verilog HDL的数字频率计设计及仿真实现基于veriloghdl的数字频率计设计及仿真实现摘要:在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都存有十分紧密的关系,因此频率的测量就变得更为重要。

测量频率的方法存有多种,其中电子计数器测量频率具备精度高、使用方便、测量快速,以及易于同时实现测量过程自动化等优点,就是频率测量的关键手段之一。

电子计数器测频存有两种方式:一就是轻易测频法,即为在一定闸门时间内测量被测信号的脉冲个数;二就是间接测频法,例如周期测频法。

轻易测频法适用于于高频信号的频率测量,间接测频法适用于于低频信号的频率测量。

本文阐释了为veriloghdl语言设计了一个直观的数字频率计的过程关键词:周期;eda;veriloghdl;数字频率计;波形仿真郭祥斌基于veriloghdl数字频率计设计与同时实现第-2-页共37页1引言在电子测量领域中,频率测量的精确度就是最低的,仅约10―10e-13数量级。

因此,在生产过程中许多物理量,比如温度、压力、流量、液位、ph值、振动、加速度、速度、加速度,乃至各种气体的百分比成分等均用传感器转换成信号频率,然后用数字频率计去测量,以提升精确度。

国际上数字频率计的分类很多。

按功能分类,测量某种单一功能的计数器。

如频率计数器,只能专门用来测量高频和微波频率;时间计数器,是以测量时间为基础的计数器,其测时分辨力和准确度很高,可达ns数量级;特种计数器,它具有特种功能,如可逆计数器、予置计数器、差值计数器、倒数计数器等,用于工业和白控技术等方面。

数字频率计按频段分类(1)低速计数器:最高计数频率<10mhz;(2)中速计数器:最高计数频率10―100mhz;(3)高速计数器:最高计数频率>100mhz;(4)微波频率计数器:测频范围1―80ghz或更高。

单片机自问世以来,性能不断提升和健全,其资源又能够满足用户很多应用领域场合的须要,加之单片机具备集成度低、功能弱、速度快、体积小、功耗高、使用方便、价格低廉等特点,因此,在工业掌控、智能仪器仪表、数据采集和处置、通信系统、高级计算器、家用电器等领域的应用领域日益广为,并且正在逐步替代现有的多片微机应用领域系统。

频率测量及其Verilog HDL的实现方法

频率测量及其Verilog HDL的实现方法
被测信号经过放大整形后变为矩形脉冲clkx送人cpld器件时钟电路用来提供标准时钟脉冲elk用于闸门时间的计时可采用16m晶振配合门电路产生16m时钟送人cpldcpld内部设计两个计数器计数器1用来对16m时钟进行计数产生给定的闸门时36图1测频电路原理框图间t如ls此时计数值为16m同时用计数器2对整形后的被测信号进行计数
在 电子产品测试与维修领域 ,频率计是必不可少 的设备之一。测量频率有 两种方式 :直接测频法和间 接 测频法。直接测频法适用于高频 信号 的频率测量 ,
间接 测 频 法适 用 于任 何 频 段 的频率 测 量 。
j 频 原理 I l I
11 直 接测 量 法 .
即在一 定 闸 门时 间 ( 常设 定 为 l )内测 量 被测 通 s
王 宜 结
淮 南 师 范 学院 ( 安徽 淮 南 2 2 0 ) 301
摘要 : 测量频率的方法有直接测量和 间接测量两种 。 直接测量是测量给定的时间内被测信号的周期个数 ,
直接 测 量精 度 随 着测 量 的频 率 而 变化 。 间接 测 量是 通 过 测 量被 测 信 号 的 整数 个 周期 内所 占用 的 时 间 间接 求
图 1测 频 电 路 原 理 框 图
信号的脉冲个数。闸门时间的控制可以通过对给定频
率 的时钟 计 数来 实 现 , 频 电路 原理 框 图如 图 1 测 所示 。 被测 信 号 经 过放 大 整形 后 变 为矩 形 脉 冲 c x 人 l 送 k
间 T( l, 时 计 数值 为 1M ) 如 s此 6 ,同时 用计 数 器 2对
整形后的被测信号进行计数 。 假定在 T时间内测得脉
冲个数 为 N,则 被测 信号 的频 率 为 N r 由于直 接测 厂。 量 法存 在 正 负一 个 被测 时 钟 的误差 ,当被测 时钟频 率 很低 时 ,就 会 产生 很 大 的相 对误 差 。 比如 ,当被测 信 号 的频率 为 1H 时 ,则 测 得 的频 率 可 能是 9或 l 0z 0或

数字频率计设计(使用VHDL语言)

数字频率计设计(使用VHDL语言)

实验报告\
一、实验目的
设计数字频率计,学习较复杂数字系统设计方法。

二、实验内容
设计八位数码显示频率计P228
三、实验环境
计算机、QuartusII软件
四、实验步骤
1、子模块FTCTRL(用于产生控制信号) (1)程序代码
(2)仿真结果
2
、子模块COUNTER32B (用于计数)
(1)程序代码
(2)仿真结果
(3)结果分析
当使能信号ENABLE=‘1’时,允许计数。

当CLR=‘1’时重新计数
3、子模块REG32B(输出数据)
(1)程序代码
(2)仿真结果
(3)结果分析
当LK=’1’时,输出当前数据DIN,否则不做处理。

4、子模块SHOW
(1)程序代码
(2)仿真结果
(3)结果分析
当S=‘0’时,载入数据DATA,否则将数据DATA左移4位。

每次上升沿,SHOW1输出数据的高四位。

综合模块:
五、实验结果与讨论
这个实验花了比较多的时间,在做计数器的时候由于没有考虑到最后使用的是二进制显示的,所以在转换的时候遇到了不少的问题,最后
新亏有老师帮我想了办法解决。

EDA实验编程答案

EDA实验编程答案

实验三、数字频率计4位数字频率计控制模块modulefre_pm1(clk,rst,count_en,count_clr,load); input clk,rst;output count_en,count_clr,load;regcount_en,load;always @(posedge clk)begin if(rst) begin count_en<=0;load<=1;endelse begin count_en<=~count_en;load<=~count_en;endendassign count_clr=~clk&load; endmodule四位频率计计数子模块module a1(out,cout,en,clr,clk);input en,clr,clk;output[3:0] out;output cout;reg[3:0] out;always @(posedge clk or posedge clr)begin if(clr) out<=0;else if(en) begin if(out==9) out<=0;else out<=out+1;endendassign cout=((out==9)&en)?1:0; endmodule十六位锁存器模块module b1(qo,din,load);input load;input[15:0] din;output[15:0] qo;reg[15:0] qo;always @(posedge load)begin qo=din;endendmodule实验四英文之母显示电路module abcd(clr,clk,a,b,c,d,e,f,g,w); input clr,clk;output a,b,c,d,e,f,g,w;reg[3:0] out;reg a,b,c,d,e,f,g,w;always @(posedge clk or posedge clr) begin if(clr) out<=0;elsebegin if(out==15) out<=0;else out<=out+1;endendalways @(out)begincase(out)4'h0:{a,b,c,d,e,f,g}=7'b1111110;4'h1:{a,b,c,d,e,f,g}=7'b0110000;4'h2:{a,b,c,d,e,f,g}=7'b1101101; 4'h3:{a,b,c,d,e,f,g}=7'b1111001;4'h4:{a,b,c,d,e,f,g}=7'b0110011;4'h5:{a,b,c,d,e,f,g}=7'b1011011;4'h6:{a,b,c,d,e,f,g}=7'b1011111;4'h7:{a,b,c,d,e,f,g}=7'b1110000;4'h8:{a,b,c,d,e,f,g}=7'b1111111;4'h9:{a,b,c,d,e,f,g}=7'b1110011;4'ha:{a,b,c,d,e,f,g}=7'b1110111;4'hb:{a,b,c,d,e,f,g}=7'b0011111;4'hc:{a,b,c,d,e,f,g}=7'b1001110;4'hd:{a,b,c,d,e,f,g}=7'b0111101;4'he:{a,b,c,d,e,f,g}=7'b1001111;4'hf:{a,b,c,d,e,f,g}=7'b1000111; default:{a,b,c,d,e,f,g}=7'b0000001; endcasew=1;endendmodule实验五序列检测器module lychy(x,z,clk,reset,state);input x,clk,reset;output z;output[3:0]state; reg[3:0]state;reg z;parameters0='b000,s1='b001,s2='b010,s3='b011,s4='b10 0,s5='b101,s6='b110,s7='b111;always @(posedge clk)begin if(reset) begin state<=s0;z<=0;end else casex(state)s0: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s1;z<=0;endends1: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s2;z<=0;endends2: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s3;z<=0;endends3: beginif(x==0) begin state<=s4;z<=0;endelse begin state<=s3;z<=0;endends4: beginif(x==0) begin state<=s5;z<=0;endelse begin state<=s1;z<=0;endends5: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s6;z<=0;endends6: beginif(x==0) begin state<=s7;z<=1;endelse begin state<=s2;z<=0;endends7: beginif(x==0) begin state<=s0;z<=0;endelse begin state<=s1;z<=0;endenddefault: state<=s0;endcaseendendmodule实验六、数字频率计的Verilog HDL语言实现module sdfrequent(clk,reset,signal_in,fout);input clk,reset,signal_in;output[23:0] fout;reg[23:0] fout;wire count_en,count_clr,load;reg[23:0] ffout;wire cout0,cout1,cout2,cout3,cout4,cout5;fre_ctrl fre_ctrl0(clk,reset,count_en,count_clr,load);count10 count0(ffout[3:0],cout0,count_en,count_clr,signal_in); count10 count1(ffout[7:4],cout1,count_en,count_clr,cout0); count10 count2(ffout[11:8],cout2,count_en,count_clr,cout1); count10 count3(ffout[15:12],cout3,count_en,count_clr,cout2);count10 count4(ffout[19:16],cout4,count_en,count_clr,cout3); count10 count5(ffout[23:20],cout5,count_en,count_clr,cout4); latch_24 latch0(fout,ffout,load);endmodulemodule count10(out,cout,en,clr,clk);input en,clr,clk;output[3:0] out;output cout;reg[3:0] out;always @(posedge clk or posedge clr)begin if(clr) out<=0;else if(en)begin if(out==9) out<=0;else out<=out+1;endendassign cout=((out==9)&en)?1:0;endmodulemodule fre_ctrl(clk,rst,count_en,count_clr,load);input clk,rst;output count_en,count_clr,load;reg count_en,load;always @(posedge clk)begin if(rst)begin count_en=0;load=1;endelse begin count_en=~count_en;load=~count_en;endendassign count_clr=~clk&load;endmodule方法二module sdf(q0,clk,clr,in);input clk,clr;input in;output[23:0] q0;reg[23:0] q0;reg [23:0] out;wire count_clr,load,cout1,cout2,cout3,cout4,cout5;fre_ctrl szfre_ctrl(clk,rst,count_en,count_clr,load);count10 szcount10_1(out[3:0],cout1,en,clr,in);count10 szcount10_2(out[7:4],cout2,en,clr,cout1);count10 szcount10_3(out[11:8],cout3,en,clr,cout2);count10 szcount10_4(out[15:12],cout4,en,clr,cout3); count10 szcount10_5(out[19:16],cout5,en,clr,cout4); count10 szcount10_6(out[23:20],cout6,en,clr,cout5);latch_24 szlatch_24(q0,out,load);endmodulemodule fre_ctrl(clk,rst,count_en,count_clr,load);input clk,rst;output count_en,count_clr,load;reg count_en,load;always @(posedge clk)begin if(rst) begin count_en=0;load=1;endelse begin count_en=~count_en;load=~count_en;endendassign count_clr=~clk&load;endmodulemodule count10(out,cout,en,clr,clk);input en,clr,clk;output[3:0] out;output cout;reg[3:0] out;always @(posedge clk or posedge clr)begin if(clr) out<=0;else if(en) begin if(out==9);else out<=out+1;end endassign cout=((out==9)&en)?1:0;endmodulemodule latch_24(q0,din,load);input load;input[23:0] din;output [23:0] q0;reg[23:0] q0;always @(posedge load)begin q0=din;endendmodule实验一八三译码器和模13BCD码实验二、数字跑表图(1)数字跑表原理图图(2)模100B计数器原理图及仿真图图(3 )模60计数器原理图实验七脉冲发生器module pulse(in,clk,out);input in,clk;output out;reg out;reg[1:0] counter;reg flag;always@(posedge clk)beginif (in)beginif(!flag) begin out=1;counter=counter+1; endif (counter==3) begin out=0;flag=1; endendelsebegin flag=0;counter=0;out=0; endendendmodule用状态机实现模7计数器module counter_fsm(clk,clear,co,q);input clk,clear;output co;output[3:0] q;reg co;reg[3:0] current,next,q;parameter ST0=0,ST1=1,ST2=2,ST3=3,ST4=4,ST5=5,ST6=6; always@(posedge clk)beginif(!clear) begin q=0;co=0;next=ST1;end else begincase(current)ST0:begin q=current;co=0;next=ST1;end ST1:begin q=current;co=0;next=ST2;end ST2:begin q=current;co=0;next=ST3;end ST3:begin q=current;co=0;next=ST4;end ST4:begin q=current;co=0;next=ST5;end ST5:begin q=current;co=0;next=ST6;end ST6:begin q=current;co=1;next=ST0;end default: next=ST0;endcase。

数字频率计verilogHDL代码

数字频率计verilogHDL代码
input lock;
input[3:0]
datain1,datain2,datain3,datain4,datain5,datain6,datain7,datain8;
output[3:0]
dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,dataout7,dataout8;
testctl m1(clk,clr_cnt,clken,lock,div2clk);
bwjsq m2(fx,clr_cnt,clken,dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,dataout7,dataout8,);
lock m3(lock,dataout1,dataout2,dataout3,dataout4,dataout5,dataout6,dataout7,dataout8,dataout11,dataout12,dataout13,dataout14,dataout15,dataout16,dataout17,dataout18);
jsq m1(clk,reset,clken,dataout1,co1);
jsq m2(co1,reset,clken,dataout2,co2);
jsq m3(co2,reset,clken,dataout3,co3);
jsq m4(co3,reset,clken,dataout4,co4);
end
end
endmodule
reg co;
always@(posedge clk or posedge reset)
begin
if(reset)

基于Verilog HDL数字频率计的设计

基于Verilog HDL数字频率计的设计

EDA设计课程论文题目基于Verilog HDL数字频率计的设计学院通信学院专业班级学生姓名大彬哥指导教师大陆会2013年5月17日EDA设计基础实验论文摘要频率是常用的物理量, 在实际测量过程中总是尽可能地把被测参量转换成频率参量进行测量。

例如工程中用振弦式方法测量力、时间测量、速度控制等, 都可转化为频率测量。

随着科学技术与计算机应用的不断发展, 以单片机作为核心的测量控制系统层出不穷。

在被测信号中, 较多的是模拟和数字开关信号, 此外还经常遇到以频率为参数的测量信号, 例如流量、转速、晶体压力传感器以及经过参变量一频率转换后的信号等等。

因此, 频率测量是电子测量技术中最基本的测量之一。

电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。

直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。

本文运用现代电子设计工具, 采用V er ilogHDL语言在CPLD器件上实现了简易数字频率计的设计。

在10Hz ~ 100MHz 频率测量范围内, 该频率计能根据输入被测频率信号, 自动调整测试量程进行测试并给出测试结果的BCD 码及七段LED 译码显示。

具有体积小、可靠性高、功耗低的特点。

关键词:数字频率计 Verilog_HDL 分频计数IEDA设计基础实验论文AbstractFrequency is a common physical quantities, in actual measurement process is always possible, the measured parameters are converted into the frequency parameter measurement. For example, engineering with vibrating method for measuring force, measurement of time, velocity control, can all be converted into frequency measurement. With the development of science and technology and the continuous development of computer applications, to single-chip microcomputer as the core control system for measuring the emerge in an endless stream. In the measured signal, more is analog and digital switch signal, in addition also frequently encountered with a frequency parameter measurement signal, such as flow rate, rotational speed, crystal pressure sensor and the variable frequency converted signal and so on. Therefore, the frequency measurement is the electronic measurement technology in the most fundamental measurement of.Electronic counter frequency measurement in two ways : one is the direct frequency measurement Law, or within a certain time gates of measured signal pulse number; two is the indirect frequency measurement Law, such as cycle frequency measurement method. Direct frequency measurement Law is applicable to the high frequency signal frequency measurement, indirect frequency measurement Law is applicable to low-frequency signals in the frequency measurement. The use of modern electronic design tool, using V Er ilogHDL language in CPLD device achieves simple digital frequency meter design. In the10Hz100MHz frequency measurement range, the frequency meter according to input the measured frequency signal, automatic adjustment and test range tested and the test results are given in the BCD code and the seven LED decoding display. Has the advantages of small volume, high reliability, low power consumption.Keywords: digital frequency meter Verilog_HDL frequency countingIIEDA设计基础实验论文目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1数字频率计概况 (1)1.2本文研究内容 (1)1.3目的与意义 (2)第2章系统设计方案 (3)2.1数字频率计总体设计方案 (3)2.1.1 放大整形 (3)2.1.2 SW1、SW2、SW3按键 (3)2.1.3 标准时钟 (3)2.1.4 LED显示模块 (3)2.2系统的参数 (4)2.2.1 频率测量 (4)2.2.2 频率测量方法 (4)2.2.3 功能及技术指标 (4)第3章数字频率计的基本原理 (6)3.1计数模块COUNTER (6)3.2门控模块GATE_CONTROL (6)3.3分频模块FDIV (7)3.4寄存器模块FLIP_LATCH (7)3.5多路选择模块DATA_MUX (8)3.6动态位选模块DISPSELECT (9)3.7BCD译码模块DISPDECODER (11)第4章数字频率计软件设计 (15)4.1软件实现功能综述 (15)4.2多路选择模块DATA_MUX的设计 (15)4.2.1 多路选择模块data_mux的接口电路 (15)4.2.2 多路选择模块data_mux程序设计 (16)4.3动态位选模块DISPSELECT的设计 (17)4.3.1 动态位选模块dispselec的接口电路 (17)4.3.2 动态位选模块dispselec的程序设计 (17)IIIEDA设计基础实验论文4.4BCD译码模块DISPDECODER的设计 (18)4.4.1 BCD译码模块dispdecoder的接口电路 (18)4.4.2 BCD译码模块dispdecoder的程序设计 (19)第5章数字频率计系统的仿真分析 (23)5.1系统原理图 (23)5.2多路选择模块DATA_MUX的仿真分析 (24)5.3动态位选模块DISPSELEC的仿真分析 (25)5.4BCD译码模块DISPDECODER的仿真分析 (25)5.5软硬件调试 (26)结论 (28)参考文献 (29)IVEDA设计基础实验论文第1章绪论1.1数字频率计概况频率是常用的物理量, 在实际测量过程中总是尽可能地把被测参量转换成频率参量进行测量。

数电编程实验报告

数电编程实验报告

实验名称:基于Verilog HDL的数字频率计设计实验日期:2023年11月1日实验目的:1. 掌握Verilog HDL编程语言的基本语法和编程技巧。

2. 理解数字频率计的工作原理和设计方法。

3. 培养团队合作和问题解决能力。

实验内容:本次实验要求设计一个基于Verilog HDL的数字频率计,能够测量输入信号的频率,并将结果显示在数码管上。

实验原理:数字频率计的基本原理是利用计数器对输入信号的周期进行计数,然后通过计算得到频率。

具体步骤如下:1. 使用一个时钟信号作为计数器的时钟输入。

2. 计数器在时钟信号的作用下对输入信号的周期进行计数。

3. 当计数器达到预设的值时,停止计数,并计算出频率。

4. 将计算出的频率显示在数码管上。

实验步骤:1. 环境搭建:在Quartus II软件中创建一个新的工程,并添加Verilog HDL源文件。

2. 模块设计:设计一个名为`frequency_counter`的模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。

- 输出信号:计数器输出`count`、频率输出`frequency`。

- 功能:对输入信号的周期进行计数,并计算出频率。

3. 数码管驱动模块设计:设计一个名为`segment_display`的模块,该模块包含以下功能:- 输入信号:计数器输出`count`、数码管段选信号`seg`。

- 输出信号:数码管显示信号`display`。

- 功能:将计数器输出转换为数码管显示信号。

4. 顶层模块设计:设计一个名为`top`的顶层模块,该模块包含以下功能:- 输入信号:时钟信号`clk`、复位信号`reset`、输入信号`signal`。

- 输出信号:数码管显示信号`display`。

- 功能:调用`frequency_counter`和`segment_display`模块,实现数字频率计的功能。

VerilogHDL基础实验可编程实验报告

VerilogHDL基础实验可编程实验报告

可编程逻辑器件设计实验报告实验名称:第二部分:VerilogHDL基础实验实验目的:掌握Quartus II 软件的基本使用方法,完成基本时序电路设计实验时间: 2014 年 06 月 19 日地点: 803实验室学生姓名:学号:实验名称:简单D触发器实验一简单D触发器1、实验步骤(1)创建工程启动New Project Wizard,创建一个工程。

(2)创建文件选择菜单File—>New—>Verilog HDL File,创建一个Verilog HDL文件,在Verilog HDL文件中编写能够完成实验功能的Verilog HDL代码。

(3)编译工程选择菜单Processing —>Start Compilation,或者单击按钮。

(4)观察RTL视图选择菜单Tools—>Netlist Viewers—>RTL Viewer即可生成RTL视图。

(5)仿真1).创建VWF文件选择菜单File—>New—>Vector Waveform File2). 设定“End Time”选择菜单Edit File—> End Time,在弹出的对话框中将Time设置为20us。

3).在VWF文件中输入信号节点选择菜单View—>Utility Windows—>Node Finder,在出现的对话框中将Filter框中设置为Pins:all,再单击List按钮,从端口列表中选择需要观察的并拖到波形编辑窗口中。

4).编辑输入信号波形5).观察仿真结果选择菜单Processing—>Start Simulation,或者单击按钮,观察输出波形。

2. VerilogHDL代码module _DFF (clk,d,q);input clk,d;output q;reg q;always@ (posedge clk)beginq<=d;endendmodule3. RTL 视图4.仿真波形实验二同步置数的D触发器1.实验步骤(1)创建工程启动New Project Wizard,创建一个工程。

实验六-数字频率计的Verilog-HDL语言实现

实验六-数字频率计的Verilog-HDL语言实现

五邑大学实验报告实验课程名称)数字频率计的Verilog HDL语言实现院系名称:信息工程学院专业名称:通信工程(物联网工程)实验项目名称:EDA实验班级: 110711学号:。

报告人:冯剑波实验六 数字频率计的Verilog HDL 语言实现一、实验目的:1、掌握较复杂数字电路或系统的纯Verilog HDL 实现方法;2、体会纯Verilog HDL 语言输入设计与原理图输入设计的差别。

二、实验原理:【数字频率计是用来测量输入信号的频率并显示测量结果的系统。

一般基准时钟的高电平的持续时间为s T 10 ,若在这0T 内被测信号的周期数为N 则被测信号的频率就是N ,选择不同的0T ,可以得到不同的测量精度。

一般0T 越大,测量精度越高,但一次的测量时间及频率计所需的硬件资源也增加。

三、设计任务与要求:1、设计一个6位频率计,测量范围从1Hz 到99 99 99Hz ,测量结果用6个数码管显示,基准时钟频率为1Hz ;2、只显示测量结果,中间计数过程不显示;结果更新时间2秒一次;3、频率计只设一个复位键,按下该键(reset=0)系统复位,释放该键(reset=1)系统工作,测量并显示结果。

4、显示用静态方式;5、用Verilog HDL 实现上述要求的频率计。

四、设计源程序及注释与仿真结果设计源程序:module pinlvji(oHEX0,oHEX1,oHEX2,oHEX3,oHEX4,oHEX5,clk_50M,clk_1Hz,reset,signal_out); @input clk_50M,reset; //50MHz 时钟输入、复位output[6:0] oHEX0,oHEX1,oHEX2,oHEX3,oHEX4,oHEX5; //数码管0-5,分别显示个、十、百、千、万、十万位的数字output reg clk_1Hz;output reg signal_out; reg signal_in; reg[29:0] cnt;reg[29:0] cnt1; reg count_en; //计数允许,count_en=1时计数,下降沿到来时锁存reg load; reg[3:0] ge,shi,bai,qian,wan,shiwan; reg cout1,cout2,cout3,cout4,cout5;reg[3:0] q0,q1,q2,q3,q4,q5;wire clr; always @(posedge clk_50M) //改变Hz 的范围,自己设定的频率1Hz-999999Hzbegincnt1=cnt1+1;if(cnt1<=25_000_0) begin signal_out=0;signal_in=0;endelse if(cnt1==50_000_0) cnt1=0;【else begin signal_out=1;signal_in=0;endendalways @(posedge clk_50M) //50M分频产生1Hz时钟begincnt=cnt+1;if(cnt<=25_000_000) clk_1Hz=0;else if(cnt==50_000_000) cnt=0;else clk_1Hz=1;end/*被测信号signal_in作为个位的输入,,signal_in上升沿到来时ge位+1;进位输出是cout1,作为十位的输入*/always @(posedge signal_out or posedge reset or posedge clr)~begin if(reset) ge=0;else if(clr) ge=0;else begin if(count_en) begin if(ge==9) begin ge=0;cout1=1;endelse begin ge=ge+1;cout1=0;endendendend/*cout1作为十位的输入,cout1上升沿到来时shi位+1;进位输出是cout2,作为百位的输入*/always @(posedge cout1 or posedge reset or posedge clr)begin if(reset) shi=0;else if(clr) shi=0;¥else begin if(count_en) begin if(shi==9) begin shi=0;cout2=1;endelse begin shi=shi+1;cout2=0;endendendend/*cout2作为百位的输入,cout2上升沿到来时bai位+1;进位输出是cout3,作为千位的输入*/always @(posedge cout2 or posedge reset or posedge clr)begin if(reset) bai=0;else if(clr) bai=0;else begin if(count_en) begin if(bai==9) begin bai=0;cout3=1;endelse begin bai=bai+1;cout3=0;end…endendend/*cout3作为千位的输入,cout3上升沿到来时qian位+1;进位输出是cout4,作为万位的输入*/ always @(posedge cout3 or posedge reset or posedge clr)begin if(reset) qian=0;else if(clr) qian=0;else begin if(count_en) begin if(qian==9) begin qian=0;cout4=1;endelse begin qian=qian+1;cout4=0;endendend;endalways @(posedge cout4 or posedge reset or posedge clr)begin if(reset) wan=0;else if(clr) wan=0;else begin if(count_en) begin if(wan==9) begin wan=0;cout5=1;endelse begin wan=wan+1;cout5=0;endendendendalways @(posedge cout5 or posedge reset or posedge clr)begin if(reset) shiwan=0;<else if(clr) shiwan=0;else begin if(count_en) begin if(bai==9) begin shiwan=9;endelse begin shiwan=shiwan+1;endendendend/*****count_en=1时计数,count_en=0不允许计数********/always @(posedge clk_1Hz or posedge reset)begin if(reset) begin count_en=0;endelse begin count_en=~count_en;load=~count_en;endend//*****count_en下降沿到来时锁存数据****/ always @(negedge count_en)begin q0=ge; q1=shi;q2=bai; q3=qian;q4=wan; q5=shiwan;endassign clr=~clk_1Hz&load;/****调用数码管显示*****/led7s u0(q0,oHEX0);led7s u1(q1,oHEX1);led7s u2(q2,oHEX2);]led7s u3(q3,oHEX3);led7s u4(q4,oHEX4);led7s u5(q5,oHEX5);endmodulemodule led7s(datain,ledout);input[3:0] datain; output reg[6:0] ledout; always begin case(datain)0: ledout<=7'b1000000;1: ledout<=7'b1111001;2: ledout<=7'b0100100;3: ledout<=7'b0110000;)4: ledout<=7'b0011001;5: ledout<=7'b0010010;6: ledout<=7'b0000010;7: ledout<=7'b1111000;8: ledout<=7'b0000000;9: ledout<=7'b0010000;default:ledout<=7'b1000000;endcase endendmodule仿真波型:·五、心得体会虽然我以前上了Verilog HDL语言,但是这都实习中还是碰到了一些问题,通过向老师,向同学寻求帮助和在网上,在图书馆查找相关的资料来一点点解决遇到的问题,从中感觉自己对VHDL语言的理解又进了一步!对硬件描述语言和纯元件语言,如c语言之间的差别又有了更深一层次的理解,不过自我感觉想要对VHDL 语言要很熟练的掌握的话,还需要多多的联系才行的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

五邑大学实验报告实验课程名称)数字频率计的Verilog HDL语言实现院系名称:信息工程学院专业名称:通信工程(物联网工程)实验项目名称:EDA实验班级: 110711学号:。

报告人:冯剑波实验六 数字频率计的Verilog HDL 语言实现一、实验目的:1、掌握较复杂数字电路或系统的纯Verilog HDL 实现方法;2、体会纯Verilog HDL 语言输入设计与原理图输入设计的差别。

二、实验原理:【数字频率计是用来测量输入信号的频率并显示测量结果的系统。

一般基准时钟的高电平的持续时间为s T 10 ,若在这0T 内被测信号的周期数为N 则被测信号的频率就是N ,选择不同的0T ,可以得到不同的测量精度。

一般0T 越大,测量精度越高,但一次的测量时间及频率计所需的硬件资源也增加。

三、设计任务与要求:1、设计一个6位频率计,测量范围从1Hz 到99 99 99Hz ,测量结果用6个数码管显示,基准时钟频率为1Hz ;2、只显示测量结果,中间计数过程不显示;结果更新时间2秒一次;3、频率计只设一个复位键,按下该键(reset=0)系统复位,释放该键(reset=1)系统工作,测量并显示结果。

4、显示用静态方式;5、用Verilog HDL 实现上述要求的频率计。

四、设计源程序及注释与仿真结果设计源程序:module pinlvji(oHEX0,oHEX1,oHEX2,oHEX3,oHEX4,oHEX5,clk_50M,clk_1Hz,reset,signal_out); @input clk_50M,reset; //50MHz 时钟输入、复位output[6:0] oHEX0,oHEX1,oHEX2,oHEX3,oHEX4,oHEX5; //数码管0-5,分别显示个、十、百、千、万、十万位的数字output reg clk_1Hz;output reg signal_out; reg signal_in; reg[29:0] cnt;reg[29:0] cnt1; reg count_en; //计数允许,count_en=1时计数,下降沿到来时锁存reg load; reg[3:0] ge,shi,bai,qian,wan,shiwan; reg cout1,cout2,cout3,cout4,cout5;reg[3:0] q0,q1,q2,q3,q4,q5;wire clr; always @(posedge clk_50M) //改变Hz 的范围,自己设定的频率1Hz-999999Hzbegincnt1=cnt1+1;if(cnt1<=25_000_0) begin signal_out=0;signal_in=0;endelse if(cnt1==50_000_0) cnt1=0;【else begin signal_out=1;signal_in=0;endendalways @(posedge clk_50M) //50M分频产生1Hz时钟begincnt=cnt+1;if(cnt<=25_000_000) clk_1Hz=0;else if(cnt==50_000_000) cnt=0;else clk_1Hz=1;end/*被测信号signal_in作为个位的输入,,signal_in上升沿到来时ge位+1;进位输出是cout1,作为十位的输入*/always @(posedge signal_out or posedge reset or posedge clr)~begin if(reset) ge=0;else if(clr) ge=0;else begin if(count_en) begin if(ge==9) begin ge=0;cout1=1;endelse begin ge=ge+1;cout1=0;endendendend/*cout1作为十位的输入,cout1上升沿到来时shi位+1;进位输出是cout2,作为百位的输入*/always @(posedge cout1 or posedge reset or posedge clr)begin if(reset) shi=0;else if(clr) shi=0;¥else begin if(count_en) begin if(shi==9) begin shi=0;cout2=1;endelse begin shi=shi+1;cout2=0;endendendend/*cout2作为百位的输入,cout2上升沿到来时bai位+1;进位输出是cout3,作为千位的输入*/always @(posedge cout2 or posedge reset or posedge clr)begin if(reset) bai=0;else if(clr) bai=0;else begin if(count_en) begin if(bai==9) begin bai=0;cout3=1;endelse begin bai=bai+1;cout3=0;end…endendend/*cout3作为千位的输入,cout3上升沿到来时qian位+1;进位输出是cout4,作为万位的输入*/ always @(posedge cout3 or posedge reset or posedge clr)begin if(reset) qian=0;else if(clr) qian=0;else begin if(count_en) begin if(qian==9) begin qian=0;cout4=1;endelse begin qian=qian+1;cout4=0;endendend;endalways @(posedge cout4 or posedge reset or posedge clr)begin if(reset) wan=0;else if(clr) wan=0;else begin if(count_en) begin if(wan==9) begin wan=0;cout5=1;endelse begin wan=wan+1;cout5=0;endendendendalways @(posedge cout5 or posedge reset or posedge clr)begin if(reset) shiwan=0;<else if(clr) shiwan=0;else begin if(count_en) begin if(bai==9) begin shiwan=9;endelse begin shiwan=shiwan+1;endendendend/*****count_en=1时计数,count_en=0不允许计数********/always @(posedge clk_1Hz or posedge reset)begin if(reset) begin count_en=0;endelse begin count_en=~count_en;load=~count_en;endend//*****count_en下降沿到来时锁存数据****/ always @(negedge count_en)begin q0=ge; q1=shi;q2=bai; q3=qian;q4=wan; q5=shiwan;endassign clr=~clk_1Hz&load;/****调用数码管显示*****/led7s u0(q0,oHEX0);led7s u1(q1,oHEX1);led7s u2(q2,oHEX2);]led7s u3(q3,oHEX3);led7s u4(q4,oHEX4);led7s u5(q5,oHEX5);endmodulemodule led7s(datain,ledout);input[3:0] datain; output reg[6:0] ledout; always begin case(datain)0: ledout<=7'b1000000;1: ledout<=7'b1111001;2: ledout<=7'b0100100;3: ledout<=7'b0110000;)4: ledout<=7'b0011001;5: ledout<=7'b0010010;6: ledout<=7'b0000010;7: ledout<=7'b1111000;8: ledout<=7'b0000000;9: ledout<=7'b0010000;default:ledout<=7'b1000000;endcase endendmodule仿真波型:·五、心得体会虽然我以前上了Verilog HDL语言,但是这都实习中还是碰到了一些问题,通过向老师,向同学寻求帮助和在网上,在图书馆查找相关的资料来一点点解决遇到的问题,从中感觉自己对VHDL语言的理解又进了一步!对硬件描述语言和纯元件语言,如c语言之间的差别又有了更深一层次的理解,不过自我感觉想要对VHDL 语言要很熟练的掌握的话,还需要多多的联系才行的。

六、思考题1、本设计的测量结果在6个数码管上显示,若采用静态显示的方式,每位显示需4根输出线,共需24根据输出线;若用动态扫描方式,只需6+7=13根线。

什么叫动态扫描显示方式你能写出动态扫描输出显示的程序吗答:动态数码扫描显示方式是利用了人眼的视觉暂留效应,把6个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。

动态扫描输出显示的程序如下:>module led_dong(seg,sl,clk); //静态模块显示output [7:0] seg; //定义数码管段输出引脚output[3:0] sl; //定义数码管位(选择)输出引脚input clk; //定义输入时钟引脚reg [7:0] seg_reg; //定义数码管段输出寄存器reg [5:0] sl_reg; //定义数码管位输出寄存器reg [5:0] disp_dat; //定义显示数据寄存器reg [29:0] count; //定义计数器寄存器always@(posedge clk) //定义clk信号下降延触发 begin,count=count+1; //计数器加1endalways@(count[18:17]) //定义显示数据触发事件 begincase(count[18:17]) //定义扫描显示数据3'b000:disp_dat=6'b100000; //显示十万位数3'b001:disp_dat=6'b010000; //显示万位数3'b010:disp_dat=6'b001000; //显示千位数3'b011:disp_dat=6'b000100; //显示百位数3'b100:disp_dat=6'b000010; //显示十位数3'b101:disp_dat=6'b000001; //显示个位数(endcasecase(count[19:17]) //选择数码管显示位3'b000:sl_reg=6'b100000;; //选择个位数码管 3'b001:sl_reg=6'b010000;; //选择十位数码管 3'b010:sl_reg=6'b001000;; //选择百位数码管 3'b011:sl_reg=6'b000100;; //选择千位数码管3'b100:sl_reg=6'b000010;; //选择万位数码管3'b101:sl_reg=6'b000001;; //选择十万位数码管 endcaseendalways@(disp_dat) //显示译码输出—begincase(disp_dat) //选择输出数据6'h0:seg_reg=8'hc0; //显示06'h1:seg_reg=8'hf9; //显示16'h2:seg_reg=8'ha4; //显示26'h3:seg_reg=8'hb0; //显示36'h4:seg_reg=8'h99; //显示46'h5:seg_reg=8'h92; //显示56'h6:seg_reg=8'h82; //显示66'h7:seg_reg=8'hf8; //显示76'h8:seg_reg=8'h80; //显示86'h9:seg_reg=8'h90; //显示96'ha:seg_reg=8'h88; //显示a6'hb:seg_reg=8'h83; //显示b6'hc:seg_reg=8'hc6; //显示c6'hd:seg_reg=8'ha1; //显示d6'he:seg_reg=8'h86; //显示e6'hf:seg_reg=8'h8e; //显示fendcaseendassign seg=seg_reg; //输出数码管译码结果assign sl=sl_reg; //输出数码管选择endmodule2、本设计与教材《数字系统设计与Verilog HDL语言》实验三的设计有何不同答:书上设计输入采用层次化设计,学习混合输入设计方法,即部分底层模块用Verilog HDL实现。

相关文档
最新文档