简易数字频率计设计报告_简易数字频率计的设计

2020-02-28 其他范文 下载本文

简易数字频率计设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“简易数字频率计的设计”。

EDA技术基础 简易数字频率计 必做实验

电子信息科学与技术

物电学院

2011-06-24 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

简易数字频率计

一.实验要求

用Verilog硬件描述语言设计一个时序逻辑电路,能够对输入的TTL信号进行1s时长计数,将计数结果在数码管上显示,让该电路循环运行,则数码管显示的就是输入信号的频率。

用标准DDS信号发生器输入TTL信号,测试信号的频率与DDS输出设定的频率比较,分析误差以及误差产生的原因。

显示效果好,无闪烁,高位零不显示。

二.方案原理图

总体框图:

三、主要部分原理说明及实验步骤

根据原理图,先把计数器模块、显示模块、扫描模块分别做出。对于计数器模块因为要实现00000000~99999999的计数器,所以要用32bit,即要用

32第2页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

个D触发器。从而要用8个数码管进行循环扫描显示。对于1HZ的精密脉冲在低电平时,一方面和被测脉冲通过或门,当被测脉冲为高电平时门电路开启,另一方面通过一个非门把计数器的清零端置1,计数器正常工作开始计数。高电平时对计数器清零的同时,把测得的数据送入BUFFER中进行显示锁存。数码管的扫描时钟由外部提供。在此基础上把前面的0清除。

1、我在该设计中使用了一个或门作为门控电路,当输入时钟clka为低电平时,被测信号clk通过,当输入时钟clka为高电平时,被测信号被阻止。从clka端输入的是一个24M的脉冲,经过1HZ模块处理后生成一秒赫兹信号(如下图)

由这个信号来控制99999999计数器的清零和buffer中数据的更新以及被测信号的通过与阻止

其verilog语言代码如下 module clk_1hz(clk,clked);input clk;output clked;reg clked;reg[31:0]jishu;always @(posedge clk)begin if(jishu==24000000)begin jishu=0;clked=1;end else begin jishu=jishu+1;clked=0;end end endmodule2、门控电路部分

其verilog语言代码如下

第3页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

module mynot(clk_1hz,nclk_1hz);input clk_1hz;output nclk_1hz;aign nclk_1hz=!clk_1hz;endmodule

99999999计数器计数在到达1S的瞬间,1HZ时钟出现上升沿,控制缓存器将此时的计数值锁存起来,然后送出显示。很短一段时间后,1HZ时钟恢复低电平,在这很短的时间内1HZ时钟经非门也完成了计数器的清零,之后计数器又恢复计数状态,进入下一秒的计数。

其verilog语言代码如下 module mynot(clk_1hz,nclk_1hz);input clk_1hz;output nclk_1hz;aign nclk_1hz=!clk_1hz;endmodule3、计数模块

第4页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

99999999计数器是本次实验的关键所在,它的主要功能是:在1hz精密时钟和门控电路的控制下,在1s的时间内,对输入信号进行计数,1s后,由于门控电路的存在,计数器停止计数 其verilog语言代码如下 module cnt99999999(clr,clk,q);input clr,clk;output [31:0]q;reg [31:0]q;always @(posedge clk or negedge clr)begin if(!clr)q[31:0]=0;else if(q[31:0]==31'H99999999)q[31:0]=q[31:0]+32'H66666667;else if(q[27:0]==27'H9999999)q[31:0]=q[31:0]+28'H6666667;else if(q[23:0]==24'H999999)

q[31:0]=q[31:0]+24'H666667;else if(q[19:0]==20'H99999)

q[31:0]=q[31:0]+20'H66667;else if(q[15:0]==16'H9999)

q[31:0]=q[31:0]+16'H6667;else if(q[11:0]==12'H999)

q[31:0]=q[31:0]+12'H667;else if(q[ 7:0]== 8'H99)

q[31:0]=q[31:0]+8'H67;else if(q[ 3:0]== 4'H9)

q[31:0]=q[31:0]+4'H7;else q[31:0]=q[31:0]+1;end endmodule4、显示数据缓冲buffer的设计

数据缓冲buffer的功能是当用计数器对输入信号计数,这些数据都暂时存在这个里面,每当时钟的上升沿到来的时候,它就向后面的模块输送数据,这样就可以得到相对稳定的显示。

第5页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

其verilog语言代码如下

module buff(in,clk,n1,n2,n3,n4,n5,n6,n7,n8);input clk;input [31:0]in;output [3:0]n1,n2,n3,n4,n5,n6,n7,n8;reg [3:0]n1,n2,n3,n4,n5,n6,n7,n8;

always @(posedge clk)begin begin n1=in[3:0];n2=in[7:4];n3=in[11:8];n4=in[15:12];n5=in[19:16];n6=in[23:20];n7=in[27:24];n8=in[31:28];end end endmodule5、显示部分

由于要用到8个数码管对实验结果进行显示,我们可以设计一个译码模块:

其verilog语言代码如下 module yima(in,a,b,c,d,e,f,g,dp);input

[3:0]in;output a,b,c,d,e,f,g,dp;reg

a,b,c,d,e,f,g,dp;always @(in)begin case(in)

第6页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

4'b0000:{dp,g,f,e,d,c,b,a}=8'b00111111;4'b0001:{dp,g,f,e,d,c,b,a}=8'b00000110;4'b0010:{dp,g,f,e,d,c,b,a}=8'b01011011;4'b0011:{dp,g,f,e,d,c,b,a}=8'b01001111;4'b0100:{dp,g,f,e,d,c,b,a}=8'b01100110;4'b0101:{dp,g,f,e,d,c,b,a}=8'b01101101;4'b0110:{dp,g,f,e,d,c,b,a}=8'b01111101;4'b0111:{dp,g,f,e,d,c,b,a}=8'b00000111;4'b1000:{dp,g,f,e,d,c,b,a}=8'b01111111;4'b1001:{dp,g,f,e,d,c,b,a}=8'b01101111;default:{dp,g,f,e,d,c,b,a}=8'b01000000;endcase end endmodule 部分引脚功能的排列如下图所示

数码管的引脚排列 以上5部分就是顶层原理图的主要部分

四、实验总结

1、要用1HZ的精确时钟不能直接接一个外接的信号源,这样的误差太大,只能将一个标准的24M的时钟进行24分频,才能的到相对稳定的时钟信号。

2、数据缓冲部分不能少,如果没有这部分,将得不到想要的结果,数码管上会出现一排乱跳的数字。

3、在整个实验设计过程中,我发现只要弄清楚所需要的几个模块,然后将模块分开来进行生成,设计也并不是想象中的那么难。

第7页,共8页 湖北师范学院电工电子实验教学省级示范中心电子版实验报告

4、在此程序设计中,对各个模块的功能有针对性的设计思路有了一定的提高,对于一个程序的需要哪些功能模块,需要什么样的输入输出,都比以前有了一定的提高。

5、学EDA已经有一学期了,现在对那些原理框图并不陌生了,现在也可以写一些简单的代码。我发现只要我们认真的去学习,虚心的的去请教他人,我们谁都可以把这门课学好。虽然在学习这门课以及做实验的过程中,我们往往会遇到种种困难,但是当实验结果与现象出来的那一刹那,我们就会感受那成功的快乐。

第8页,共8页

《简易数字频率计设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
简易数字频率计设计报告
点击下载文档
相关专题 简易数字频率计的设计 设计 报告 频率计 简易数字频率计的设计 设计 报告 频率计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文