基于Verilog的数字频率计的设计(包含代码及仿真).doc

合集下载

用verilog HDL设计的4位频率计

用verilog HDL设计的4位频率计

简单4位数字频率计设计一、 设计要求(1)、利用Verilog HDL 语言行为描述方法,设计一个简单的4位数字频率计; (2)、要求输入标准时钟信号频率为1MHz ,系统可计数频率范围为1Hz~9999Hz ; (3)、系统具有复位信号,且当计数频率发生溢出时能够给出指示信号,计数的频率通过4个共阴数码管进行显示(动态扫描显示)。

二、 系统结构框图4位数字频率计系统结构框图根据设计要求,输入系统的标准时钟信号要先经过分频后得到一个周期为2s 占空比50%的信号,用来对输入信号采样,得到采样信号GA TED_CLK ;为了能够控制计数模块对采样的信号进行正常计数及保存计数后的频率,这要求,要在计数器刚好完成计数后立即将数据输出给显示部分进行显示,并且要为下次计数做好准备,因此数据信号处理部分还要有产生控制计数器的两个信号LOAD 和COUNTER_CLR ,LOAD 信号控制计数完成后的数据及时输出给显示,COUNTER_CLR 信号控制计数器清零;计数模块就是完成对采样信号的计数,并当计数发生溢出时产生溢出信号FLOW_UP ;显示控制模块要完成将计数模块输入的信号进行译码显示。

三、 信号描述测试信号采样原理:Signal for testTo displaySignal for testGA TED_CLK 、LOAD 、COUNTER_CLR 信号的关系:COUNTER_CLRGATED_CLKLOAD四、 Verilog 程序各子模块verilog 程序:(1)信号处理模块_verilog : moduleFREQUENCY_COUNTROL_BLOCK(GATED_CLK,LOAD,COUNTER_CLR,CLK_IN,SIGNA L_TEST,RESET); output GATED_CLK; output LOAD; output COUNTER_CLR; input CLK_IN; input SIGNAL_TEST; input RESET; reg LOAD; reg COUNTER_CLR; reg DIVIDE_CLK; reg[19:0] cn; reg A1,A2;//信号分频:由CLK_IN 得到分频后的信号DIVIDE_CLK(0.5Hz) always @(posedge CLK_IN) begin if(RESET) begin DIVIDE_CLK<=0; cn<=0;endelse if(cn==1000000)begincn<=0;DIVIDE_CLK<=~DIVIDE_CLK;endelsecn<=cn+1;end//频率计数控制信号的产生:产生LOAD信号和COUNTER_CLR信号always @(posedge SIGNAL_TEST)beginA1<=~DIVIDE_CLK;endalways @(posedge SIGNAL_TEST)beginA2=A1;endalways @(A1 or A2)beginLOAD=A1&&(!A2);endalways @(posedge SIGNAL_TEST)COUNTER_CLR=LOAD;//产生驱动计数模块的信号GATED_CLK,也就是被计数模块检测的信号assign GATED_CLK=SIGNAL_TEST&DIVIDE_CLK;endmodule(2)、计数器模块:moduleFREQUENCY_COUNTER_BLOCK(COUT,FLOW_UP,CLOCK_IN,RESET,LOAD,COUNTER _CLR);output[15:0] COUT;output FLOW_UP;input CLOCK_IN;input LOAD;input COUNTER_CLR;input RESET;reg[15:0] TEMP;reg FLOW_UP;parameter B_SIZE=16; //二进制位宽,为便于移植,所有定义了成参数reg[B_SIZE+3:0] bcd; //转换后的BCD码的位数要比二进制多4位reg[B_SIZE-1:0] binary;reg[B_SIZE-1:0] bin;reg[B_SIZE+3:0] result;//计数器完成计数得到二进制表示的频率数值always @(CLOCK_IN or RESET or LOAD or COUNTER_CLR)beginif(RESET|COUNTER_CLR)beginTEMP<=0;FLOW_UP<=0;endelse if(LOAD)binary<=TEMP;else if(TEMP>9999)beginFLOW_UP<=1;binary<=9999;endelseif(CLOCK_IN)TEMP<=TEMP+1;end//将二进制表示(或十六进制表示)的数转换为BCD码的形式,便于数码管译码显示always @(binary or RESET)beginbin=binary;result=0;if(RESET)bcd<=0;elsebeginrepeat(B_SIZE-1)beginresult[0]=bin[B_SIZE-1];if(result[3:0]>4)result[3:0]=result[3:0]+4'd3;if(result[7:4]>4)result[7:4]=result[7:4]+4'd3;if(result[11:8]>4)result[11:8]=result[11:8]+4'd3;if(result[15:12]>4)result[15:12]=result[15:12]+4'd3;if(result[19:16]>4)result[19:16]=result[19:16]+4'd3;result=result<<1;bin=bin<<1;endresult[0]=bin[B_SIZE-1];bcd<=result;endendassign COUT=bcd[15:0];endmodule(3)信号显示处理:module FREQUENCY_DISPL Y_BLOCK(DOUT,DCLK_IN,RESET,CDIN);output[10:0] DOUT;input[15:0] CDIN;input DCLK_IN;input RESET;reg[10:0] DOUT;reg[3:0] Temp1;reg[1:0] cn;always @(posedge DCLK_IN) //设置成动态扫描beginif(RESET)cn<=0;elsebegincn<=cn+1;case(cn)2'b00: begin DOUT[10:7]<=4'b0001; Temp1<=CDIN[3:0];end2'b01: begin DOUT[10:7]<=4'b0010; Temp1<=CDIN[7:4];end2'b10: begin DOUT[10:7]<=4'b0100; Temp1<=CDIN[11:8];end2'b11: begin DOUT[10:7]<=4'b1000; Temp1<=CDIN[15:12];endendcaseendendalways @(Temp1) //译码显示begincase(Temp1)4'b0000: DOUT[6:0]<=7'b0111111; //3fh=04'b0001: DOUT[6:0]<=7'b0000110; //06h=14'b0010: DOUT[6:0]<=7'b1010110; //56h=24'b0011: DOUT[6:0]<=7'b1001111; //4fh=34'b0100: DOUT[6:0]<=7'b1100110; //66h=44'b0101: DOUT[6:0]<=7'b1101101; //6dh=54'b0110: DOUT[6:0]<=7'b1111101; //7dh=64'b0111: DOUT[6:0]<=7'b0000111; //07h=74'b1000: DOUT[6:0]<=7'b1111111; //7fh=84'b1001: DOUT[6:0]<=7'b1101111; //6fh=9default: DOUT[6:0]<=7'b0111111; //3fhendcaseendendmodule顶层verilog程序:moduleFREQUENCY_COUNTER_DISPL Y_BLOCK(DOUT,FLOW_UP,CLK,TEST_CLK_IN,RESET) ;output[10:0] DOUT;output FLOW_UP;input CLK;input TEST_CLK_IN;input RESET;wire gated_clk,load,counter_clr;wire[15:0] cout_cdin;FREQUENCY_COUNTROL_BLOCKu1(.GATED_CLK(gated_clk),.LOAD(load),.COUNTER_CLR(counter_clr),.CLK_IN(CLK),.SIG NAL_TEST(TEST_CLK_IN),.RESET(RESET));FREQUENCY_COUNTER_BLOCKu2(.COUT(cout_cdin),.FLOW_UP(FLOW_UP),.CLOCK_IN(gated_clk),.RESET(RESET),.LOA D(load),.COUNTER_CLR(counter_clr));FREQUENCY_DISPL Y_BLOCKu3(.DOUT(DOUT),.DCLK_IN(CLK),.RESET(RESET),.CDIN(cout_cdin));endmodule五、仿真结果分析仿真结果如图所示,输入标准时钟频率为1MHz,经过分频后变成频率为0.5Hz的信号,将其与测试信号相与得到采样信号GATED_CLK,同时利用测试信号和0.5Hz的分频信号可以产生LOAD信号和COUNTER_CLR信号,它们和采样信号的关系在图上可以清楚的看出。

根据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`引脚,可以检查计算的频率是否正确。

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

基于fpga控制的数字频率计设计(含程序、仿真图)大学毕设论文

基于fpga控制的数字频率计设计(含程序、仿真图)大学毕设论文

目录1 引言 (1)1.1 课题背景 (1)1.2 课题意义 (2)1.3 国内外现状及发展趋势 (2)1.4 系统开发环境及技术分析 (3)1.4.1 FPGA开发简介 (3)1.4.2 VHDL特点及设计方法 (5)2 需求分析 (7)2.1 系统基本要求 (7)2.2 系统结构 (7)3 系统设计 (8)3.1 总体方案比较 (8)3.2 程序流程图 (10)3.3 系统模块设计 (11)3.3.1 整形电路 (11)3.3.2 计数器 (12)3.3.3分频器 (14)3.3.4锁存器 (16)3.3.5控制器 (19)3.3.6 显示器 (22)4 系统仿真及测试 (23)结论 (29)致谢 (30)参考文献 (31)附录1 (32)附录2 (35)1 引言1.1 课题背景进入信息时代以来,微电子技术和计算机技术飞速发展, 各种电子测量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化, 特别是DSP技术诞生以后,电子测量技术更是迈进了一个全新的时代[1]。

近年来,DSP逐渐成为各种电子器件的基础器件,逐渐成为21世纪最具发展潜力的朝阳行业,甚至被誉为信息化数字化时代革命旗手。

在电子技术领域内,频率是一个最基本的参数,频率与其它许多电参量的测量方案、测量结果都有十分密切的关系。

如时间,速度等都涉及到或本身可转化为频率的测量。

因此,频率的测量就显得更为重要。

而且,目前在电子测量中,频率的测量精确度是最高的.现在市场上有各种多功能,高精度,高频率的数字频率计,但价格不菲。

而在实际工程中,不是对所有信号的频率测量都要求达到非常高的精度。

因此,本文提出了一种能满足一般测量精度要求,但成本低廉的数字频率计的设计方案。

在电子工程中、资源勘探、仪器仪表等相关应用中,频率计是工程技术人员必不可少的测量工具。

数字频率计是计算机,通信设备,音频视频等科研生产领域不可缺少的车辆仪器,采用VHDL语言编程设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外其余全在一片FPGA芯片上实现,整个设计过程变得十分透明,快捷和方便,特别是对于各层次电路系统的工作时序的了解显得尤为准确而且具有灵活的现场可更改性。

基于Verilog的数字频率计的设计(包含代码及仿真)

基于Verilog的数字频率计的设计(包含代码及仿真)

一、实验名称数字频率计的设计二、实验地点211楼303三、实验目的和任务(1) 了解数字电路设计的基本特点(2) 了解数字频率计电路的基本原理(3) 基本掌握ISE 软件的使用(设计输入、仿真、实现)(4) 了解可编程逻辑器件(FPGA )的一般情况(5) 基本掌握HDL 的使用四、实验内容(1) 设计出符合设计要求的解决方案(2) 设计出单元电路(3) 利用EDA 软件对各单元电路及整体电路进行仿真(4)利用EDA 软件在ELB 电子课程设计实验板实现设计(5) 观察实验结果五、项目需用仪器设备名称以及所需主要元器件PC 机、EDA教学实验系统一台,带有(SPARTAN -3A XC3S200A芯片,LED 管, 七段数码管等)的实验板一块, 跳线、下载电缆一根,函数发生器。

六、实验任务与要求频率测量范围为10Hz~10MHz,用6只数码管以kHz为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择1S、0.1S和0.01S三个闸门时间中的一个;有一个按钮开关用来使频率计复位;有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。

数字频率计的相关技术指标如下:1、位数:测量频率通过LED数码管为六位十进制数显示。

2、测试频率范围为:10HZ-10MHZ。

3、计数器溢出时要有溢出标志over。

4、需要有闸门标志gate。

5、显示工作方式:a、用BCD七段共阳极数码管显示读数,只有在读数不发生跳变时才是正确的结果。

b、采用记忆显示方法,即在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数到来,才将上次显示更新。

用第二次测试结果,更新显示值。

6、要求被测输入信号应是符合数字电路要求的脉冲波。

七、verilog设计环境介绍VerilogVerilog HDL是目前应用最为广泛的硬件描述语言.Verilog HDL可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。

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)第一章测量原理与方法所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。

100MHz等精度频率计设计(基于某VerilogHDL)

100MHz等精度频率计设计(基于某VerilogHDL)

某某:X中权学号:152210303127班级:电子1班数电课设报告100MHz等精度频率计设计〔基于Verilog HDL〕一、设计要求:提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:1.频率:测频X围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。

2.占空比:测试精度 1% ~ 99%3.相位差:测试两个同频率的信号之间的相位差,测试X围 0 ~ 360 某某科技大学2017/10/12二、设计分析使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA 设计计算得出所需测量值。

三、模电局部首先选择比拟器,对于 100 MHz 信号,比拟器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求由TLV3501数据手册得知:当频率低于 50MHz 的时候,正弦波的峰峰值需大于 20mV,频率高于50MHz时,峰峰值需大于 1V。

然后需要选择放大器,当正弦波幅值为 10mV时,放大倍数需大于35。

方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。

经转换后的输出电压符合TTL电平要求,可以被识别出0和1。

四、数电局部开发板:Cyclone IV E: EP4CE6E22C8板载时钟为 50MHz,带4个按键和一个复位键〔按键按下为0,抬起为1〕,四个七段数码管〔共阳〕,FPGA的引脚可由杜邦线引出。

设计思路:测量频率:输入一个100MHz的基准频率,由计数器T1来计算基准频率的上升沿个数,即周期数。

输入一个被测信号,它由计数器T2来测量周期数。

两个信号在同一个使能信号EN〔使能信号时间为1~2s〕下开始计数,计数完后,存储计数结果,由〔T1 * 10〕可以算出具体的计数时间〔单位ns〕,再由(〔T1 * 10ns〕/T2 )*10^9可算得被测信号频率,单位Hz。

Verilog频率计(低频))

Verilog频率计(低频))

日志档案发表于2010/5/17 23:45:37标签:无标签Verilog频率计(低频)小弟最近弄了个频率计,主要测量工频50HZ的。

代码附在下边。

下面的代码,功能实现了,通过了modelsim仿真,实际测试也成功。

还是存在一些问题,不是功能上的,而是实现方法上了,我总感觉我的这个设计肯定不是最好的,有一些除法,还有十进制书转化成BCD码的问题还须要很大的优化。

但是小弟,刚学FPGA,一些问题也搞不清楚,。

就发在网上,分享一下,也让大家指正一下。

//// Description 测量频率(工频50HZ 13~ 59.9HZ)// Create Date: 2010- 05 -17// Engineer: 张书腾// Module Name: frequency////nate:该设计只是适用于50HZ左右的频率测量,采用的是测周发module frequency(clk, rst_n, fre,sm_bit, segment);input clk; //50M系统时钟input rst_n; //异步复位端input fre;//频率输入端output [3:0] sm_bit;//数码管位码output[7:0] segment; //数码管位码reg [3:0] sm_bit;//数码管位码寄存器reg [7:0] segment;//数码管位码寄存器////////////////////标准信号F="100K",测周///////////////////////////reg [9:0]count;//100K时钟分频计数器always @ (posedge clk or negedge rst_n) beginif(!rst_n)count <= 1'b0;else if(count< 10'd499)count <= count+1'b1;elsecount <= 1'b0;endreg clk_100K;//100K时钟输出寄存器always @ (posedge clk or negedge rst_n) beginif(!rst_n)clk_100K <= 1'b0;else if(count<=249) //时钟的占空比为50%clk_100K <= 1'b0;else clk_100K <= 1'b1;end///////////////////////////////////////////////待测频率进行2分频,2分频后,就可以只计二分频后信号的高电平或低电平//就可以了,如果不2分频,只记高电平或低电平的话,信号的占空比不同会导致结果不准确reg fre_2;always @ (posedge fre or negedge rst_n) beginif(!rst_n)fre_2 <= 1'b0;else if(fre)fre_2 <= ~fre_2;//2分频end//////////////测周计数模块,计2分频后的待测频的高电平或低电平/////////////////////// //相当于在待测频率的整个周期内计数//////////////////////////////////////////////////////reg [12:0] cnt;//计数寄存器//由于位宽的限制,最大计数值8192,所以测低频(低于14HZ时会出错)always @ (posedge clk_100K or negedge rst_n) beginif(!rst_n) begincnt <= 13'd0;endelse if(!fre_2) //低电平计数cnt <= cnt + 1'b1;else begincnt <= 13'd0;//不为低电平时清零endend////////锁存信号,上升沿有效//////////////////////////reg load;always @ (posedge fre_2 or negedge rst_n) beginif(!rst_n) beginload <= 1'b0;endelse load <= ~load;//产生上升沿end//////////////////////////////////reg [12:0] cnt_r;//存储锁存的值always @ (posedge load)//load上升沿锁存begincnt_r <= cnt;//将计数值锁存end/////////////////////////数据处理单/////////////////////////////////////////////////////////////////////////////reg [23:0] temp; //暂存数据//(将一个十进制的四位数各个位取出),fre_r 中的数为实际频率是100倍,是为了后面的计算方便always @ (posedge clk or negedge rst_n)if(!rst_n) beginfre_r <= 13'd0;endelse begintemp <= (24'd1*******)/cnt_r;//fre_r=(1/(10us * cnt_r ))*100实际频率扩大100倍//采用了一个除法运算符,不清楚效率如何,但是能工作fre_r <= temp[12:0]; //取出低位消除警告//////////////////////////////////////end//////////////////////////////////reg [12:0] fre_r , temp1, temp2,temp3;//fre_r , temp1, temp2,temp3用于计算reg [3:0] count1,count2,count3,count4;//数码管要显示的每位十进制数reg [3:0] state;///状态机的状态寄存器///////////////////////状态机编码//////////////////parameter shiwei = 4'b0001, //十位gewei = 4'b0010,//个位shifenwei = 4'b0100,//十分位baifenwei = 4'b1000;//百分位always @ (posedge clk or negedge rst_n) ////状态机,取出一个四位数的各个位的值,用比较法if(!rst_n) beginstate <= shiwei;count1 <= 4'd0;count2 <= 4'd0;count3 <= 4'd0;count4 <= 4'd0;endelse begincase(state)shiwei: beginstate <= gewei; /////////////// //十位//用比较发对照出每位的十进制数if((fre_r>=5000)&&(fre_r<6000)) begin count1 <=4'd5; temp1<=fre_ r-13'd5000; endelse if((fre_r>=4000)&&(fre_r<5000)) begin count1 <=4'd4; temp1<=fre_ r-13'd4000; endelse if((fre_r>=3000)&&(fre_r<4000)) begin count1 <=4'd3; temp1<=fre_ r-13'd3000; endelse if((fre_r>=2000)&&(fre_r<3000)) begin count1 <=2; temp1<=fre_r-1 3'd2000; endelse if((fre_r>=1000)&&(fre_r<2000)) begin count1 <=1; temp1<=fre_r-1 3'd1000; endelse if(fre_r<1000) begin count1 <=0; temp1<=fre_r; endelse begin count1 <=5; temp1<=fre_r-13'd5000;end endgewei: beginstate <= shifenwei; ////////////////////////个位//用比较发对照出每位的十进制数 if(temp1>=900) begin count2 <=9; temp2<=temp1-13'd90 0; endelse if((temp1>=800)&&(temp1<900)) begin count2 <=8; temp2<=temp1 -13'd800; endelse if((temp1>=700)&&(temp1<800)) begin count2 <=7; temp2<=temp1 -13'd700; endelse if((temp1>=600)&&(temp1<700)) begin count2 <=6; temp2<=temp1 -13'd600; endelse if((temp1>=500)&&(temp1<600)) begin count2 <=5; temp2<=temp1 -13'd500; endelse if((temp1>=400)&&(temp1<500)) begin count2 <=4; temp2<=temp1 -13'd400; endelse if((temp1>=300)&&(temp1<400)) begin count2 <=3; temp2<=temp1 -13'd300; endelse if((temp1>=200)&&(temp1<300)) begin count2 <=2; temp2<=temp1 -13'd200; endelse if((temp1>=100)&&(temp1<200)) begin count2 <=1; temp2<=temp1 -13'd100; endelse if(temp1<100) begin count2 <=0; temp2<=temp1; endelse begin count2 <=0; temp2<=temp1-13'd900; end endshifenwei: beginstate <= baifenwei;///////////////////////////十分位//用比较发对照出每位的十进制数if(temp2>=90) begin count3 <=9; temp3<=temp2-13'd90; endelse if((temp2>=80)&&(temp2<90)) begin count3 <=8; temp3<=temp2-1 3'd80; endelse if((temp2>=70)&&(temp2<80)) begin count3 <=7; temp3<=temp2-1 3'd70; endelse if((temp2>=60)&&(temp2<70)) begin count3 <=6; temp3<=temp2-1 3'd60; endelse if((temp2>=50)&&(temp2<60)) begin count3 <=5; temp3<=temp2-13'd50; endelse if((temp2>=40)&&(temp2<50)) begin count3 <=4; temp3<=temp2-1 3'd40; endelse if((temp2>=30)&&(temp2<40)) begin count3 <=3; temp3<=temp2-1 3'd30; endelse if((temp2>=20)&&(temp2<30)) begin count3 <=2; temp3<=temp2-1 3'd20; endelse if((temp2>=10)&&(temp2<20)) begin count3 <=1; temp3<=temp2-1 3'd10; endelse if(temp2<10) begin count3 <=0; temp3<=temp2; endelse begin count3 <=0; temp3<=temp2-13'd90; end endbaifenwei: beginstate <= shiwei;/////////////////百分位///////////////////////////////////count4 <= temp3[3:0];enddefault: beginstate <= shiwei;endendcaseend////////////////////////////////////////////////////////////////显示模块 ///////////////reg [18:0] count_1ms; //用来产生数码管动态显示的位变化的驱动时钟always @ (posedge clk or negedge rst_n)if(!rst_n) begincount_1ms <= 19'd0;endelse begincount_1ms <= count_1ms + 1'b1;end//////////数码管动态扫描的位产生单元always @ (posedge clk or negedge rst_n)if(!rst_n)sm_bit=4'b0000;else begincase(count_1ms[18:16]) //数码管动态显示的位扫描//基本上是每一位亮1m s3'b000: sm_bit=4'b1110;3'b001: sm_bit=4'b1101;3'b010: sm_bit=4'b1011;3'b011: sm_bit=4'b0111;default: sm_bit=4'b1111;endcaseendalways @ (posedge clk or negedge rst_n)if(!rst_n) beginsegment =8'h03;endelse begincase(sm_bit)4'b1110: segment=convent(count1); //十位4'b1101: segment=convent(count2)-8'd1;///个位//显示小数点4'b1011: segment=convent(count3); //十分位4'b0111: segment=convent(count4); //百分位default: segment=8'b1111_1111;endcaseendfunction [7:0] convent;//将自然数转化成共阳数码管的函数input [3:0] bcd; //输入为自然数case(bcd)4'd0: convent="8"'h03; //数码管段码,a为最高位,dp为最低位 4'd1: convent="8"'h9f;4'd2: convent="8"'h25;4'd3: convent="8"'h0d;4'd4: convent="8"'h99;4'd5: convent="8"'h49;4'd6: convent="8"'h41;4'd7: convent="8"'h1f;4'd8: convent="8"'h01;4'd9: convent="8"'h09;default: convent = 8'hff;endcaseendfunction///////////////////////////////////////////////////////////。

基于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芯片中进行硬件实现。

基于FPGA的数字式频率计设计报告

基于FPGA的数字式频率计设计报告

湖南大学电气与信息工程学院本科生课程设计题目:数字频率计课程:电子技术综合设计专业:电子信息工程班级:1703指导老师:设计时间:目录一、选题 (1)二、要求 (1)三、方案原理 (3)四、框图 (4)五、单元电路说明 (6)1分频模块 (6)2 显示模块六、参考资料 (21)一、选题数字式频率计的VERILOG设计二、要求对输入FPGA开发板的一定频率的输入信号的频率进行测量,并通过LCD进行显示,并使可测量范围尽可能大,精度尽可能高三、方案原理(1)L CD显示原理本次设计中使用的是基于HD44780的LCD1602。

管脚定义图如下:要实现液晶显示功能有如下关键步骤:1.确定字符显示位置:要在液晶上的某个位置上显示某个字符,就是要向DDRAM的某个地址写入要显示的数据代码。

屏幕物理位置与DDRAM地址的对应关系如下:2.确定显示字符的内容:液晶要显示某个字符时,实质上就是显示该字符的字模, ,即向DDRAM里写数,数据与字模对照表如下:3.将数据写入LCD:执行以下步骤:清屏指令->功能设置指令->进入模式设置指令->显示开关控制指令->设定DDRAM地址指令->数据写入DDRAM指令,相关指令如下:液晶读数据时序:把数据写入液晶时序:由上图可知要保证液晶能正常显示,在E的下降沿时,数据要有效。

(2)频率测量原理利用分频模块获得一个1HZ的clk脉冲,同时设定一个计数脉冲,clk 脉冲作为时基,同时设定一个计数脉冲,每当clk脉冲跳变时,将计数寄存器中的数据送至显示寄存器,同时清零计数寄存器,并显示寄存器中的内容送至LCD显示模块,即可完成频率测量功能模块例化思路分频模块产生多种频率的信号供不同模块使用顶层文件脉冲计数count门控信号二-十进制转换模块LCD1602模块显示频率(最小单位1Hz)和占空比(最小单位0.1%)Clk_In,sysclkClk_GateClk_500Cnt7~Cnt0countClk_500。

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

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

实验五 数字频率计设计一、实验目的1、掌握简单的时序控制电路设计方法;2、进一步掌握复杂数字电路设计中的层次设计方法;3、掌握数字频率计的原理与设计方法;二、硬件、软件要求计算机、EDA 实验箱、MAX+plus II 软件,下载电缆三、实验内容及实验原理1、数字频率计原理:1)系统组成框图如图1.5.1所示:其中,8位七段数码管模块为实验箱上电路模块,电路中有3-8译码器,故位选信号为3位二进制顺序编码;动态扫描显示电路可利用实验三的设计文件;数据寄存器是由32个D 触发器构成,每四个为一组,每组保存一个BCD 码,其时钟信号由测频时序控制模块提供,在本实验中需自行设计;八位十进制计数器模块可利用实验四的设计文件;测频时序控制模块在本实验中需要自行设计;分频器是将输入的800Hz 显示扫描时钟进行分频得到所需的8Hz 时钟,并接至测频时序控制模块,本实验中需自行设计。

2)测频时序控制模块原理:该模块为频率计控制电路的核心,完成各模块的协调工作,按照时钟节拍完成测频功能。

其原理图如图1.5.2所示:8位七段数码管模块动态扫描显示电路 数据 寄存器 八位十进制计数器 测频时序控制 分频器 800Hz 时钟输入 8Hz 时钟输入 fx 被测信号输入clken clken clr clr clk lock lock clk sel2 sel1 sel0 a~g 图1.5.1 频率计组成框图图1.5.2 测频时序控制逻辑电路图其仿真波形如图1.5.3所示:图1.5.3 测频时序控制仿真波形2、设计要求:1)采用原理图或Verilog语言完成各模块的设计。

对本次实验所设计的测频时序控制模块、数据寄存器模块、时钟分频模块进行时序仿真,记录设计文件和仿真波形。

2)频率计顶层文件采用原理图设计,将各功能模块进行连接,并对整个频率计顶层设计进行仿真,最后下载至实验箱,完成实际信号的频率测量,记录顶层文件和仿真结果。

基于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语言写的一频率计,代码+思路

verilog语言写的一频率计,代码+思路

北京印刷学院课程设计报告课程设计名称:电子系统综合课程设计课程设计题目:频率计专业:电子信息工程专业班级:08电-2学生姓名:罗中明 杜萌学号:080400226 080400212指导老师:唐英杰时间:2011年 6月27 日至 2011 年 7 月 8 日频率计课程设计实验报告一、设计任务要求1、基本要求:设计一个3位十进制数字显示的数字式频率计,其频率测量范围在1MHz内。

量程分别为10kHz,100kHz和1MHz三档,即最大读数分别为9.99kHz,99.9kHz和999kHz。

这里要求量程能够自动转换,具体要求如下:1)、当读数大于999时,频率计处于超量程状态,此时显示器发出溢出指示(最高位显示F,其余各位不显示数字),下一次测量时,量程自动增大一档。

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

3)、采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示测频结果,并将此显示结果保持到下一次计数结束,显示时间不小于1s。

4)、小数点位置随量程变更自动移位。

二、设计方案1、系统功能(基本功能和附加功能)基本功能:显示待测频率,LED灯显示小数点,显示待测频率的量程。

附加功能:实现量程自由变化,通过拨码开关控制待测频率大小。

2、系统设计方案说明1、分频模块:由于测频时不同量程档需要不同的时基信号,分频模块是必不可少的。

系统通过试验箱给定的50MHZ的频率通过分频变成0.5HZ,即1秒钟得计数时间,通过1秒钟的记数时间里待测频率上升沿的数量实现频率测定,待测频率通过分频,多路器等实现各频率的测定2 计数模块:想要实现频率的测定,其实就是在1秒钟的计数时间里对待测频率信号上升沿进行计数,所以计数模块是不可缺少的,本计数器需输出指示超量程和欠量程状态的信号。

3 量程控制模块:对待测频率的量程进行判断,确定量程以后,根据不同的量程,在试验箱上显示,我们的设计是4个量程(1,2,3量程和超量程)。

数字频率计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数字频率计概况频率是常用的物理量, 在实际测量过程中总是尽可能地把被测参量转换成频率参量进行测量。

VerilogHDL语言四位数字频率计课程设计

VerilogHDL语言四位数字频率计课程设计

1、设计目旳和规定1、设计一种4位十进制数字频率计。

2、测量范畴1~9999Hz,采用4位数码管显示,有溢出批示。

3、量程有1KHz,1MHz两档,用LED灯批示。

4、读数不小于9999时,频率计处在超量程状态,发出溢出批示,下次量程,量程自动增大一档。

5、读数小时,频率计处在前量程状态,下次测量,量程自动减小一档。

6、采用记忆显示方式,在计数与显示电路中间加以锁存电路,每次计数结束,将计数成果送锁存器锁存,并保持到下一种计数结束。

2、设计原理1、基本原理频率测量旳基本原理是计算每秒钟内待测信号旳脉冲个数。

这就规定sysclk 能产生一种1s脉宽旳周期信号,并对频率计旳每一种计数器cntp旳使能端进行同步控制。

当clK_cnt高电平时容许计数,并保持其所计旳数。

在停止计数期间,一方面需要一种锁存信号将计数器在前1s旳计数值锁存进锁存器reg中,并由外部旳7段译码器译出并稳定显示。

原理图如图1-1图1-12、模块原理根据数字频率计旳基本原理,本文设计方案旳基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等几种单元,并且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。

3、设计内容1、分频模块由于晶体振荡器提供旳为50MHz旳时钟,而在整个频率计里将用到周期为2s,半个周期为1s旳闸门信号,因此我们在此模块先分频产生0.5Hz旳分频信号。

always@(posedge sysclk)beginif(cnt==26’b10_1111_1010_1111_0000_1000_0000)begin clk_cnt<=~clk_cnt;cnt<=0;endelsebegin cnt<=cnt+1;endend二进制旳26’b10_1111_1010_1111_0000_1000_0000,即为十进制旳50x10^7,由程序中旳clk_cnt<=~clk_cnt;cnt<=0;得知会产生我们想要旳周期为2s旳clk_int信号。

基于FPGA的数字频率计设计与仿真

基于FPGA的数字频率计设计与仿真
杂 ,而 且 会 产 生 比较 大 的 延 时 ,造 成 测 量 误 也 是应 用 VHDL语言进行编 写的,其形成的
程序 完全 相符合 。 本设计应用 VHD L语言 , 实现 对数 字频率
差 大 、可靠 性莘 。随 着可编 程逻辑 器件的 广 泛 应用 ,以 EDA 工具 作为 开发平 台 ,运 用 VHDL语 占,将 使整 个系统大 大 简化 ,从 而 提 高整体 的性 能和 可靠性 。 F GA器件上实现数 字频 率计测 频方案 ,其测 P
r o 9跳变 l 0时 ,从 叭 变为 2 ,这 O 4 数字 频率计 是一种 基本的 测量仪 器 ,被 块 部是 应 用 V H D L 语言 进 行编 程 ,并 在 c mc u从 9 广 泛 应 用于 航 灭 、 电子 、测 控 等 领 域 。 实 Ma + ls 软件 上编译 和仿真。之后 由这四 与设 计方案 中所说的 中间过程 不显示 ,只显 x pu I I 际的硬件设 计用到 的器件较 多 ,连 线比较 复 个模块构 成频率计 的顶 层文件 ,该顶 层文件 示结 果与设计 初衷相 符。 从波形 图上分析 与
计的硬件 电路描述 , 在软件平台 MA P US X+ L Ⅱ 环境下通过 了编译 、 仿真 , 通过仿真 图可以 看 出本设计的正确性 , 另外还下载到 F G P A器
件 上进行 验证 。
本设 计 采 用 自顶 】 下的 设 计 方 法 ,在 tss n [ 删试 信号 ,它的时钟周期设置 为 eti a 为l g
【】 松, l潘 黄继 业 . D E A技术实用教程( 2 第 版) [ . M】北京 : 科学 出版社 ,0 2 20.
【】付家才 . DA 工程 实践技 术【 . 2 E M】北京 : 化
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验名称数字频率计的设计二、实验地点211楼303三、实验目的和任务(1)了解数字电路设计的基本特点(2)了解数字频率计电路的基本原理(3)基本掌握ISE软件的使用(设计输入、仿真、实现)(4)了解可编程逻辑器件(FPGA )的一般情况(5)基本掌握HDL的使用四、实验内容(1)设计出符合设计要求的解决方案(2)设计出单元电路(3)利用EDA 软件对各单元电路及整体电路进行仿真(4)利用EDA 软件在ELB电子课程设计实验板实现设计(5)观察实验结果五、项目需用仪器设备名称以及所需主要元器件PC机、EDA教学实验系统一台,带有(SPARTAN -3A XC3S200A芯片,LED管 , 七段数码管等)的实验板一块 , 跳线、下载电缆一根,函数发生器。

六、实验任务与要求频率测量范围为10Hz~10MHz,用6只数码管以kHz为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择1S、0.1S 和0.01S三个闸门时间中的一个;有一个按钮开关用来使频率计复位;有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。

数字频率计的相关技术指标如下:1、位数:测量频率通过LED数码管为六位十进制数显示。

2、测试频率范围为:10HZ-10MHZ。

3、计数器溢出时要有溢出标志over。

4、需要有闸门标志gate。

5、显示工作方式:a、用BCD七段共阳极数码管显示读数,只有在读数不发生跳变时才是正确的结果。

b、采用记忆显示方法,即在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数到来,才将上次显示更新。

用第二次测试结果,更新显示值。

6、要求被测输入信号应是符合数字电路要求的脉冲波。

七、verilog设计环境介绍VerilogVerilog HDL是目前应用最为广泛的硬件描述语言.Verilog HDL可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。

Verilog HDL适合算法级,寄存器级,逻辑级,开关级、系统级和版图级等各个层次的设计和描述.verilogHDL进行设计最大的优点是其工艺无关性.这使得工程师在效用设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路.verilogHDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICS和FPGA的设计之用。

verilogHDL 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。

Verilog 是由en:Gateway Design Automation公司于大约1984年开始发展。

Gateway Design Automation公司后来被Cadence Design Systems于1990年所购并。

现在Cadence 对于Gateway 公司的Verilog 和Verilog-XL 模拟器拥有全部的财产权。

选择VHDL还是verilog HDL?这是一个初学者最常见的问题。

其实两种语言的差别并不大,他们的描述能力也是类似的。

掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。

选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。

当然,如果您是专用集成电路(ASIC)设计人员,则必须首先掌握verilog,因为在IC设计领域,90%以上的公司都是采用verilog进行IC设计。

对于PLD/FPGA设计者而言,两种语言可以自由选择。

八、实验原理所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。

若在一定时间内计得这个周期信号变化的次数为N,则其频率可表达为:N f T=(1)1所示:首先,把被测信号①(以正弦波为例)通过放大整形电路变成脉冲②(实际上变成方波即可)其重复频率等于被测频率x f ,然后将它加到闸门的一个输入端。

闸门通过门控信号④来控制开、闭时间,只有在闸门开通时间T 内,被计数的脉冲⑤才能通过闸门,被送到十进制电子计数器进行计数。

门控信号的时间T 是非常准确的,以它作为时间基准,它由时基发生器提供。

时基信号发生器由一个高稳定的石英振荡器和一系列数字分频器组成,由它输出的标准时间脉冲(时标)去控制门控电路形成门控信号。

比如,时标信号的重复周期为1S,则加到闸门的门控信号作用时间T 及闸门时间亦准确的等于1S,及闸门开通时间为1S,这时若计得10000个数,则有(1)式知,被测频率10000x f Hz =。

从以上讨论可知,电子计数器的测频原理实质上以比较法为基础,它将x f 和时基信号频率相比,两个频率相比的结果以数字的形式显示出来。

一.分频模块程序module count(rest,clk,clk_1hz,clk_10hz,clk_100hz,clk_1khz);input clk,rest;output reg clk_1hz,clk_10hz,clk_100hz,clk_1khz;reg[29:0] count1,count2,count3,count4;initialbeginclk_1hz=0;clk_10hz=0;clk_100hz=0;clk_1khz=0;count1=0;count2=0;count3=0;count4=0;endalways@( posedge clk)beginif(!rest)begincount1<=0;count2<=0;count3<=0;count4<=0;clk_1hz<=0; clk_10hz<=0;clk_100hz<=0;clk_1khz<=0;endelse beginif(count1==24000000)begin count1<=0;clk_1hz<=~clk_1hz; endelse count1<=count1+1;if(count2==2400000)begin count2<=0;clk_10hz<=~clk_10hz;endelse count2<=count2+1;if(count3==240000)begin count3<=0;clk_100hz<=~clk_100hz;endelse count3<=count3+1;if(count4==24000)begin count4<=0;clk_1khz<=~clk_1khz;endelse count4<=count4+1;endendendmodule仿真图仿真模块二,门控电路和清零,锁存,阀门信号产生程序module chose(rest,clk_10hz,clk_100hzhz,clk_1khz,key1,key10,key100,gate_out1,ff,clk_latch,clk_clear);input rest ,clk_10hz,clk_100hz,clk_1khz,key1,key10,key100;output gate_out1,clk_latch,clk_clear;output reg [2:1] ff;reg gate_out1,clk_latch,clk_clear,gate;reg [4:1]count;initial begin gate_out1=0;ff=0;clk_latch=0;clk_clear=0;gate=0;count=0;endalways@( posedge clk_1khz)beginif(!rest) begin gate_out1<=0; ff<=2'b00;endelse beginif(key1==1&&key10==0&&key100==0) begin gate<=clk_10hz; ff<=2'b01;endelse if(key1==0&&key10==1&&key100==0) begin gate<=clk_100hz;ff<=2'b10;endelse if(key1==0&&key10==0&&key100==1) begin gate<=clk_1khz;ff<=2'b11;endelse begin ff<=0;endendend////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////always @(posedge gate)begincount<=count+1;if (count<=9)begin gate_out1<=1;clk_clear<=0;clk_latch<=0;endelse if (count==11)begin gate_out1<=0;clk_clear<=0;clk_latch<=1;endelse if (count==13)begin gate_out1<=0;clk_clear<=1;clk_latch<=0;count<=0;end elsebegin gate_out1<=0;clk_clear<=0;clk_latch<=0;end endendmodule仿真图仿真模块三, 计数器程序module counter(rest,start,clk_in,cnt1,cnt2,cnt3,cnt4,cnt5,cnt6,yichu,clk_clear);input rest,start,clk_in,clk_clear;output yichu;reg yichu;output reg [4:1]cnt1,cnt2,cnt3,cnt4,cnt5,cnt6;initial beginyichu=1;cnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=4'b0000;endalways@(posedge clk_in )beginif(!rest) begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=4'b0000;endelse beginif(clk_clear==1)begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=4'b0000;yichu<=1;endelse if(start==1)beginif((cnt6==4'b1001)&&(cnt5==4'b1001)&&(cnt4==4'b1001)&&(cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001))begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=4'b0000;cnt6<=4'b0000;yichu<=0;endelse if((cnt5==4'b1001)&&(cnt4==4'b1001)&&(cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001))begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=4'b0001;cnt6<=cnt6+4'b0001;endelse if((cnt4==4'b1001)&&(cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001)) begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=4'b0000;cnt5<=cnt5+4'b0001;cnt6<=cnt6;endelse if((cnt3==4'b1001)&&(cnt2==4'b1001)&&(cnt1==4'b1001))begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=4'b0000;cnt4<=cnt4+4'b0001;cnt5<=cnt5;cnt6<=cnt6;endelse if((cnt2==4'b1001)&&(cnt1==4'b1001))begincnt1<=4'b0000;cnt2<=4'b0000;cnt3<=cnt3+4'b0001;cnt4<=cnt4;cnt5<=cnt5;cnt6<=cnt6;endelse if((cnt1==4'b1001))begincnt1<=4'b0000;cnt2<=cnt2+4'b0001;cnt3<=cnt3;cnt4<=cnt4;cnt5<=cnt5;cnt6<=cnt6;endelse begincnt1<=cnt1+4'b0001;cnt2<=cnt2;cnt3<=cnt3; cnt4<=cnt4;cnt5<=cnt5;cnt6<=cnt6;endendendendendmodule仿真图模块仿真图四,锁存以及译码扫描显示程序module v138(rest,clk_1khz,se,in1,in2,in3,in4,in5,in6,segs,ff,dp,led,en,clk_latch);input [4:1] in1,in2,in3,in4,in5,in6;input clk_1khz,rest;input [2:1]ff;input clk_latch;output reg dp, led,en;output reg [4:1] se;reg [3:1] count,dig;output reg [7:1] segs;reg [4:1] sign_out4;reg [4:1] latch1,latch2,latch3,latch4,latch5,latch6;。

相关文档
最新文档