Verilog-HDL语言-四位数字频率计-课程设计

合集下载

用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信号,它们和采样信号的关系在图上可以清楚的看出。

四位数字频率计实验报告

四位数字频率计实验报告

数字逻辑电路大型实验报告姓名指导教师专业班级学院信息工程学院提交日期1一、实验目的学习用FPGA实现数字系统的方法二、实验内容1.FPGA, Quartus II 和VHDL使用练习2.四位数字频率计的设计三、四位数字频率计的设计1.工作原理当系统正常工作时,8Hz信号测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。

在数码显示管上可以看到计数结果。

工作原理图如下:2.设计方案21) 整形电路:整形电路是将待测信号整形变成计数器所要求的脉冲信号2)控制信号产生器(分频电路):用8Hz时钟信号产生1Hz时钟信号、锁存器信号和cs信号3)计时器:采用级联的方式表示4位数4)锁存器:计数结束后的结果在锁存信号控制下锁存5)译码器:将锁存的计数结果转换为七段显示码3.顶层原理图(总图)3注:①CLK1:8Hz时钟信号输入; CLKIN:待测信号输入;②显像时自左而右分别是个位、十位、百位、千位;③顶层原理图中:(1)consignal模块:为频率计的控制器,产生满足时序要求的三个控制信号;(2)cnt10模块:有四个,组成四位十进制(0000-1001)计数器,使计数器可以从0计数到9999;(3)lock模块:有四个,锁存计数结果;(4)decoder模块:有四个,将8421BCD码的锁存结果转换为七段显示码。

4.底层4个模块(控制信号产生模块,十进制计数器模块,锁存器模块,译码模块)的仿真结果。

cnt10模块(十进制计数器模块):输入:CLK:待测量的频率信号(时钟信号模拟);CLR:清零信号,当clr=1时计数器清零,输出始终为0000,只有当clr=0时,计数器才正常计数CS:闸门信号,当cs=1时接收clk计数,当cs=0时,不接收clk,输出为0;输出:4co:进位信号,图中,在1001(9)的上方产生一个进位信号0,其余为1。

实验四位计数器设计样本

实验四位计数器设计样本

实验四 4 位计数器设计1.实验目学习quartusii 和modelsim用法;学习原理图和veriloghdl混合输入设计办法;掌握4 位计数器设计设计及仿真办法。

2.实验原理依照下面FPGA内部电路,设计4 位计数器,并在在kx3c10F+开发板上实现该电路,并作仿真。

设计其中计数器模块CNT4B和数码管译码驱动模块DECL7SverilogHDL代码,并作出整个系统仿真。

2.1 4位计数器模块代码module CNT4B(out,CLK,RST);//定义模块名和各个端口output out;//定义输出端口input CLK,RST;//定义输入时钟和复位reg [3:0] out;//定义四位计数器always @(posedge CLK or negedge RST) //上升沿时钟和下降沿复位beginif(!RST) //低电平复位out <= 4'd0;elseout <= out + 1;//每一种clk计数endendmodule效果图:2.2七段数码管代码module segled(out1,a);//定义模块名和输入输出端口input [3:0]a;//输入一种3位矢量output [6:0]out1;//输出一种6位矢量reg [6:0]out1;//reg型变量用于always语句always@(a) //敏感信号abegincase(a) //case语句用于选取输出4'b0000:out1<=7'b0111111;4'b0001:out1<=7'b0000110;4'b0010:out1<=7'b1011011; 4'b0011:out1<=7'b1001111; 4'b0100:out1<=7'b1100110; 4'b0101:out1<=7'b1101101; 4'b0110:out1<=7'b1111101; 4'b0111:out1<=7'b0000111; 4'b1000:out1<=7'b1111111; 4'b1001:out1<=7'b1101111; 4'b1010:out1<=7'b1110111; 4'b1011:out1<=7'b1111100; 4'b1100:out1<=7'b0111001; 4'b1101:out1<=7'b1011110; 4'b1110:out1<=7'b1111001; 4'b1111:out1<=7'b1110001; endcaseendendmodule //模块结束效果图:2.3综合模块代码// Copyright (C) 1991- Altera Corporation// Your use of Altera Corporation's design tools,logic functions// and other software and tools,and its AMPP partner logic// functions,and any output files from any of the foregoing// (including device programming or simulation files),and any// associated documentation or information are expressly subject // to the terms and conditions of the Altera Program License// Subscription Agreement,Altera MegaCore Function License// Agreement,or other applicable license agreement,including,// without limitation,that your use is for the sole purpose of// programming logic devices manufactured by Altera and sold by // Altera or its authorized distributors. Please refer to the// applicable agreement for further details.// PROGRAM "Quartus II 64-Bit"// VERSION "Version 13.1.0 Build 162 10/23/ SJ Web Edition" // CREATED "Tue Apr 11 22:35:09 "module cou(CLK,RST,Q);input wire CLK;input wire RST;output wire [6:0] Q;wire [3:0] SYNTHESIZED_WIRE_0; CNT4B b2v_inst(.CLK(CLK),.RST(RST),.out(SYNTHESIZED_WIRE_0)); segled b2v_inst1(.a(SYNTHESIZED_WIRE_0),.out1(Q));endmodule效果图:3.实验设备kx3c10F+开发板,电脑。

实验五 4位十进制频率计设计

实验五  4位十进制频率计设计

实验五4位十进制频率计设计一、实验目的:设计4位十进制频率计,学习较复杂的数字系统设计方法。

二、原理说明:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。

这清0个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。

【例5-1】10进制计数器,用于计算分频结果,并连接数码管显示。

module cnt10d(clk,rst,en,cq,cout);input clk;input rst;input en;output[3:0] cq;output cout;reg[3:0] cq;reg cout;always@(posedge clk or posedge rst)begin if(rst) cq<=4'b0000;else if(en) begin if(cq<9) begin cq<=cq+1'b1;cout<=1'b0; endelse begin cq<=4'b0000; cout<=1'b1; endendendendmodule【例5-2】--测频控制器,使得频率计能自动测频module testctl(clkk,cnt_en,rst_cnt,load);input clkk; // 1HZoutput cnt_en;output rst_cnt;output load;reg div2clk;wire cnt_en;reg rst_cnt;wire load;always@(posedge clkk)div2clk<=~div2clk;always @(clkk or div2clk) beginif(!clkk & !div2clk) rst_cnt<=1'b1;else rst_cnt<=1'b0;endassign load = ~div2clk;assign cnt_en = div2clk;endmodule【例5-3】锁存器,将频率计的每位数锁存后输出module reg4(clk,cq,led );input clk;input[3:0] cq;output[3:0] led;reg[3:0] led;always@(posedge clk)led<=cq;endmodule[例5-4] 用原理图方式将各模块连接起来也可以用.v文件实现系统组合。

电子线路课程设计-四位数字频率计的设计模板

电子线路课程设计-四位数字频率计的设计模板

湖北民族学院信息工程学院课程设计报告书题目:四位数字频率计的设计课程:电子线路课程设计专业:电气工程及其自动化班级:学号:学生姓名:指导教师:2010年 12 月 15 日信息工程学院课程设计任务书学号学生姓名专业(班级)设计题目四位数字频率计的设计设计技术参数 1、频率准确度一般用相对误差来表示,即⎪⎪⎪⎭⎫⎝⎛∆+±=∆fffffccxxT1x式中,NNNTX11f±+∆=为量化误差,是数字仪器所特有的误差。

当闸门时间T选定后,f x越低,量化误差越大;TTf∆=∆f c c为闸门时间相对误差,主要由时基电路标准频率的准确度决定,fffXcT1c<<∆。

2、频率测量范围在输入电压符合规定要求值时,能够正常进行测量饿频率区间称为频率测量范围。

频率测量范围主要由放大整形电路的频率响应决定。

3、数字显示位数频率计的数字显示位数决定频率计的分辨率。

位数越多,分辨率越高。

4、测量时间频率计完成一次测量所需要的时间,包括准备、计数、锁存和复位时间。

设计要求①拟定数字频率计的组成框图,设计安装各单元电路,要求布线整齐美观,便于级联。

②按照给定的技术指标,检测数字频率计是否满足要求。

③画出数字频率计的整机逻辑电路图。

④写出设计性实验报告。

参考资料【1】谢自美,罗杰,赵云娣,杨小献. 电子线路设计.实验.测试(第三版)[M]. 武汉:华中科技大学出版社,2006【2】高志勇. 数字频率计的设计[D]. 石家庄: 河北科技大学信息学院, 2009【3】田良,黄正瑾.综合电子设计与实践[M].南京:东南大学出版社,2002.【4】李祥臣.模拟电子基础教程[M].北京:清华大学出版社,2005.【5】张永瑞.电子测量技术基础[M].西安:西安电子科技大学出版社,2002.2010年 12 月 15 日信息工程系课程设计成绩评定表学生姓名:谭佐兵学号:030840521 专业(班级):0308405课程设计题目:四位数字频率计的设计成绩:指导教师:年月日文章编号:四位数字频率计的设计谭佐兵(湖北民族学院信息工程学院湖北恩施 445000)【摘要】数字频率计是直接用十进制数字显示被测信号频率的一种测量装置。

基于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可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。

4位十进制频率计设计

4位十进制频率计设计一、实验目的设计4位十进制频率计。

学习较复杂的数字系统设计方法。

二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作准备。

这3个信号可以由一个测频控制信号发生器产生,即图5-1中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。

其工作时序波形如图5-2。

图5-1 4位十进制频率计顶层文件原理图图5-2 频率计测频控制器TESTCTL测控时序图实验步骤设计测频控制器1、为本项设计建立文件夹2、输入设计项目和存盘3、将设计项目设置成工程文件将测频控制器设置为工程文件。

4、选择目标器件并编译如果发现有错,排除错误后再次编译。

5、时序仿真接下来应该测试设计项目的正确性,即逻辑仿真,具体步骤如下:(1)建立波形文件。

用输入总线的方式给出输入信号仿真数据。

(2)输入信号节点。

(3)设置波形参量。

(4)设定仿真时间宽度。

(5)加上输入信号。

(6)波形文件存盘。

(7)运行仿真器。

(8)观察分析波形。

对照测频控制器工作原理,观察显示的时序波形是否正确。

(9)包装元件入库。

设计4位锁存器对照设计测频控制器的实验步骤,设计4位锁存器。

设计分频器设计顶层文件。

1、输入设计项目和存盘根据4位十进制频率计顶层文件原理图。

Verilog_HDL_数字频率计

基于Verilog HDL数字频率计设计与实现课程设计任务书学院:计算机与通信工程学院专业:网络工程专业课程名称计算机组成原理课程设计时间2010~2011学年第一学期17~18周学生姓名郭祥斌指导老师陈沅涛题目主要内容:(1)数字频率计前端信号的放大整形处理(2)数字频率计的Verilog HDL设计实现(3)数字频率计的CPLD/FPGA制作要求:(1)通过对相应文献的收集、分析以及总结,给出相应课题的背景、意义及现状研究分析。

(2)通过课题设计,掌握计算机组成原理的分析方法和设计方法。

(3)学按要求编写课程设计报告书,能正确阐述设计和实验结果。

(4)学生应抱着严谨认真的态度积极投入到课程设计过程中,认真查阅相应文献以及实现,给出个人分析、设计以及实现。

应当提交的文件:(1)课程设计报告。

(2)课程设计附件(主要是源程序)。

课程设计成绩评定学院计算机通信工程专业网络工程班级网络08-02 班学号200858080223 学生姓名郭祥斌指导教师陈沅涛课程成绩完成日期2010年12月31日指导教师对学生在课程设计中的评价评分项目优良中及格不及格课程设计中的创造性成果学生掌握课程内容的程度课程设计完成情况课程设计动手能力文字表达学习态度规范要求课程设计论文的质量指导教师对课程设计的评定意见综合成绩指导教师签字年月日基于Verilog HDL数字频率计设计与实现学生:郭祥斌指导老师:陈沅涛摘要:在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

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

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

FPGA—4位十进制频率计

FPGA—4位十进制频率计4位十进制频率计一、设计目的用Verilog HDL语言设计一个能实现自动测频的4位十进制频率计。

1)测量范围: 1Hz~9999Hz2)测量的数值通过4个数码管显示3)频率超过9999Hz时,溢出指示灯亮,可以作为扩大测量范围的接口。

二、设计原理1、若某一信号在T秒时间里重复变化了N 次,则根据频率的定义可知该信号的频率fs 为:fs=N/T。

2、当T=1s时,N就是测得的频率。

3、根据以上所提出的方法,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器复位信号。

这个复位信号可以由一个测频控制信号发生器产生,即图1中的TESTCTL,它的设计要求是,TESTCTL 的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,每0.01ms锁存器进行一次锁存,并由数码管显示计数值。

设置锁存器是为了使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。

锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作准备。

图3 芯片信息配置由于我们所采用的板子为RCXQ208_V5 FPGA开发板,所以配置如图所示。

1、新建各个分模块并输入代码。

图4 建立VHDL文件2、建立顶层文件为原理图型,例化各个模块并连接。

图5 建立VHDL文件3、对设计进行综合,如果出现错误,根据提示改正。

图6 综合黄色感叹符号代表有警告,有些警告可以忽略,绿色小勾表示综合成功。

4、建立测试文件并进行仿真,验证设计。

图7 建立激励文件之后一直点击确认即可。

为了结合我们的下载板子的时钟信号,在测试文件中设置时钟单位为10ns,精度为1ps,如图:图8 设置时钟单位仿真文件应验证个端口的正确性。

四位十进制频率计设计 自己写的

四位十进制频率计设计自己写的四位十进制频率计设计自己写的数字频率计设计1设计任务设计一简易数字频率计,其基本要求是:1)测量频率范围为1Hz~10Hz,测量范围分为四个等级,即×1、×10、×100、×1000。

2)频率测量精度fxfx2103.3)被测信号可以是下弦波、三角波和方波。

4)显示模式为4位十进制显示。

5)使用EWB进行模拟。

2.设计原则及方案频率的定义是单位时间(1s)内周期信号的变化次数。

若在一定时间间隔t内测得周期信号的重复变化次数为n,则其频率为f=n/t据此,设计方案框图如图1所示。

图1数字频率计组成框图其基本原理是,被测信号ux首先经整形电路变成计数器所要求的脉冲信号,频率与被测信号的频率fx相同。

时钟电路产生时间基准信号,分频后控制计数与保持状态。

当其高电平时,计数器计数;低电平时,计数器处于保持状态,数据送入锁存器进行锁存显示。

然后对计数器清零,准备下一次计数。

其波形逻辑关系图如图2所示。

3.基本电路设计1)整形电路整形电路将待测信号整形为计数器所需的脉冲信号。

电路形式采用555定时器组成的施密特触发器。

电路如图XXX所示。

如果待测信号为三角波,则输入整形电路,将分析设置为瞬态分析,然后启动电路。

输入和输出波形如图XXX所示。

可以看出,输出是相同频率的方波。

2)时钟产生电路时钟信号是控制计数器计数的标准时间信号,其精度在很大程度上决定了频率计的频率测量精度。

当需要高频率测量精度时,应使用晶体振荡器通过分频获得频率。

在该频率计中,时钟信号采用555定时器组成的多谐振荡器电路,产生频率为1kz的信号,然后进行分频。

多谐振荡器电路如图XXX所示。

给出了由555定时器组成的多谐振荡器的周期计算公式xxxxxxxxxx取XXXXXXXXXXXXX获得一个振荡频率为1kz的负脉冲,其振荡波形如图XXX所示。

3)分频器电路分频电路由计数器组成,对1kz时钟脉冲进行分频,获得不同量程所需的时间基准信号,实现量程控制。

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

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信号。

仿真结果如图1-2.图1-2 2、 4位十进制计数器模块4位十进制计数器模块包含4位十进制的计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有清零控制和进位扩展输出的功能。

always@(posedge clkint)beginif(clk_cnt)beginif(cntp1==’b1001)begin cntp1<=’b0000; cntp2<=cntp2+1;if(cntp2==’b1001)begin cntp2<=’b0000; cntp3<=cntp3+1;if(cntp3==’b1001)begin cntp3<=’b0000; cntp4<=cntp4+1;if(cntp4==’b1001)begin cntp4<=’b0000; led=1;本程序采用的是以累加的方法结合巧妙地if语句进行四重循环,实现四位十进制不同的高低级别,实现计数。

一位十进制原理图仿真如图1-3。

图1-3 四位十进制原理图仿真如图1-4。

图1-4 3、锁存模块如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。

其生成的功能模块如图所示:if(cntp1!=’b0000|cntp2!=’b0000|cntp3!=’b0000|cntp4!=’b0000)begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntp1<='b0000;cntp2<=’b0000;cntp3<=’b0000;cntp4<=’b0000;4、动态扫描模块本设计采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延迟时间相当重要。

根据人眼视觉暂留原理,LED数码管每秒导通16次以上,人眼就无法LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。

但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。

如果延时控制的不好则会出现闪动,或者亮度不够,根据经验,延时0.005S可以达到满意的效果。

另外,显示的字符有变化时,可在延时到达后送一个地电平(共阴极数码管)LED数码管先短暂熄灭,再显示一个字符,可使在视觉上字符的变化更清楚。

begincase(cnt[14:13])'b00:begin scan<=’b00000001;dat<=cntq1; end'b01:begin scan<=’b00000010;dat<=cntq2; end'b10:begin scan<=’b00000100;dat<=cntq3; end'b11:begin scan<=’b00001000;dat<=cntq4; enddefault:begin scan<=’bx;dat<=’bx; end5、译码模块译码模块是对计数出的数进行译码显示出来。

endcasecase(dat[3:0])4’b0000:begin seg7[6:0]=7’b1111110:end4’b0001:seg7[6:0]=7’b0110000;4’b0010:seg7[6:0]=7’b1101101;4’b0011:seg7[6:0]=7’b1111001;4’b0100:seg7[6:0]=7’b0110011;4’b0101:seg7[6:0]=7’b1011011;4’b0110:seg7[6:0]=7’b1011111;4’b0111:seg7[6:0]=7’b1110000;4’b1000:seg7[6:0]=7’b1111111;4’b1001:seg7[6:0]=7’b1111011;default:seg7[6:0]=’bX;其中分别对应着十进制的0—9这是个数字。

6、编译仿真最后的程序的编译仿真结果如图1-5。

图1-5附录1:module cymometer(seg7,scan,sysclk,clkin);output[6:0]seg7;output[7:0]scan;output led;reg led;input sysclk; //20MHz时钟信号input clkin;reg[6:0]seg7;reg[7:0]scan;reg[25:0]cnt;reg clk_cnt;reg[2:0]cntp1,cntp2,cntp3,cntp4;reg[2:0]cntq1,cntq2,cntq3,cntq4;reg[3:0]dat;always@(posedge sysclk)beginif(cnt==26’b1_0111_1101_0111_1000_0100_0000)begin clk_cnt<=~clk_cnt;cnt<=0;endelsebegin cnt<=cnt+1;endendalways@(posedge clkint)beginif(clk_cnt)beginif(cntp1==’b1001)begin cntp1<=’b0000; cntp2<=cntp2+1;if(cntp2==’b1001)begin cntp2<=’b0000; cntp3<=cntp3+1;if(cntp3==’b1001)begin cntp3<=’b0000; cntp4<=cntp4+1;if(cntp4==’b1001)begin cntp4<=’b0000; led=1;endendendendelse begin cntp1<=cntp+1;endendelsebeginif(cntp1!=’b0000|cntp2!=’b0000|cntp3!=’b0000|cntp4!=’b0000 |) begincntq1<=cntp1;cntq2<=cntp2;cntq3<=cntp3;cntq4<=cntp4;cntp1<='b0000;cntp2<=’b0000;cntp3<=’b0000;cntp4<=’b0000; end endendalwaysbegincase(cnt[14:13])'b00:begin scan<=’b00000001;dat<=cntq1; end'b01:begin scan<=’b00000010;dat<=cntq2; end'b10:begi n scan<=’b00000100;dat<=cntq3; end'b11:begin scan<=’b00001000;dat<=cntq4; enddefault:begin scan<=’bx;dat<=’bx; endendcasecase(dat[3:0])4’b0000:begin seg7[6:0]=7’b1111110:end4’b0001:seg7[6:0]=7’b0110000;4’b0010:seg7[6:0]=7’b1101101;4’b0011:seg7[6:0]=7’b1111001;4’b0100:seg7[6:0]=7’b0110011;4’b0101:seg7[6:0]=7’b1011011;4’b0110:seg7[6:0]=7’b1011111;4’b0111:seg7[6:0]=7’b1110000;4’b1000:seg7[6:0]=7’b1111111;4’b1001:seg7[6:0]=7’b1111011;default:seg7[6:0]=’bX;endcaseendendmodule。

相关文档
最新文档