1、数字频率计课程设计实习报告数字频率计设计报告书一、设计要求设计一个 4 位十进制数字式频率计,最大测量范围为 10MHz。量程分10kHz、100kHz、1MHz 和 10MHz 四档(最大读数分别为9999kHz、9999kHz、999.9kHz、9999.kHz).量程自动转换规则如下:(1) 当读数大于 9999 时,频率计处于超量程状态,此时显示器发出溢出指示,下一次测量 时,量程自动增大一档,小数点位置随量程变更自动移位。(2) 可用手动方式使量程在每次测量开始时处于最低档。显示方式如下:(3) 采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示计数结果, 将此显示结
2、果保持到下一次计数结束。显示时间应不小于 1s。(4) 送入信号应是符合 CMOS 电路要求的脉冲波,对于小信号模拟信号应有放大整形电路。二、方案设计整体思路所谓频率就是周期性信号在单位时间 (1s)内变化的次数。若在一定时间间隔 T 内测得 周期性信号的重复变化次数为 N ,则频率可表示为 f =N /T (Hz)。被测信号 fx 经放大整 形电路变成计数电路所要求的脉冲信号,其频率与被测信号 fx 的频率相同。基准电路提供 标准时间基准信号 clk,其高电平持续时间 t 1 = 1 s,当 1 s 信号来到时 ,闸门电路开通 ,被 测脉冲信号通过闸门电路,成为计数电路的计数脉冲 CP,计数
3、电路开始计数,直到 ls 信号1结束时闸门电路关闭 ,停止计数。若在闸门时间 1 s 内计数电路计得的脉冲个数为 N ,则 被测信号频率 f =NHz。控制电路的作用有两个:一是产生锁存脉冲 CLK,使显示电路上的数 字稳定;二是产生清“0”脉冲,使计数电路每次测量从零开始计数。时钟信号的选择设计电路中时钟信号采用 12M 有源晶振产生,下面是 12M 有源晶振引脚图:整形电路的选择整形电路中可以用运算放大器 LM311 组成电压选择器实现,以下是关于此芯片的资料:引脚功能:GROUND/GND 接地INPUT +INPUT -OUTPUTBALANCE正向输入端 反向输入端 输出端平衡BAL
4、ANCE/STROBE 平衡/选通V+V-NC电源正电源负空脚LM311 引脚图2由于 LM311 过于复杂且此次设计要求精度不高,整形电路可以改为如下电路:R11.0k D1BAS81D2BAS81这样产生稳定 3.3V 为幅值的信号送入 EPM570 中,对芯片起到保护作用。设计所用核心芯片资料及其原理所用核心芯片为 CPLD 器件 EPM570T100C5。基本设计方法是借助集成开发软件平台 quartus II 6.0,用原理图、硬件描述语言(Verilog HDL)等方法,生成相应的目标文件, 通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。EPM570 引
5、脚图:3在 Quartus II 6.0 中设定的引脚分布如下:4计数译码原理图:分频选择器原理图:5时钟信号待测信号数码管引脚图:通过 Verilog HDL 语言设计程序,实现上述原理图功能,最终所测信号频率以四位共阴极 数码管显示,单位为 KHz。6三、调试1、2、3、4、程序代码按照分频计、计数器、锁存器、选择器、译码器模块分别进行编程调试、仿真;建立工程,把五个模块连接,调试。针对错误模块进行修改,重新建立工程、 连接模块;将程序下载到 EMP570 中,利用数电实验板以及数码管进行调试;将各种器件焊接到万用板上,连接电源进行实际调试。1module ssss(b,base);inp
6、ut b;output reg base;reg 23:0q;always(posedge b)if(q5999999)q=q+1;elsebeginbase=!base;q=0;endEndmodule2module Fen6M(b,base);7input b;output reg base;reg 23:0q;always(posedge b)if(q5999999)q=q+1;elsebeginbase=!base;q=0;endEndmodule3module ctrl(clk,Counter_EN,Latch_EN,Counter_Clr);input clk;output Cou
7、nter_EN,Latch_EN,Counter_Clr;reg wire_1=0,wire_2=0;always (posedge clk)beginwire_1 = ! wire_1;end8always (negedge clk)beginwire_2 = wire_1;endassign Counter_EN = wire_1;assign Latch_EN = (! Counter_EN) & wire_2;assign Counter_Clr = (! Counter_EN) & (! Latch_EN) & (! wire_2);endmodule4module counter(
8、clk,clr,en,q,ql);input clk,en,clr;output reg3:0 q;output ql;assign ql=en&(q=9);always(posedge clk,posedge clr)if(clr) q=0;elseif(en)9beginif(q9) q=q+1;else q=0;endendmodule5module latcher(d1,d2,en,clk,q1,q2);input 3:0 d1,d2;input clk,en;output reg3:0 q1,q2;always(posedge clk)if(en)beginq1=d1;q2=d2;e
9、ndendmodule106module over_select(IN,SELECT,OUT);input 3:0 IN;input SELECT;output reg3:0 OUT;always (SELECT)case(SELECT)0:OUT=IN;1:OUT=10;endcaseendmodule7module decode4to7(incode,outcode);input 3:0 incode;output 6:0 outcode;reg6:0 outcode;11always(incode)begincase(incode)4b0000: outcode= 7b1111110;4
10、b0001: outcode= 7b0110000;4b0010: outcode= 7b1101101;4b0011: outcode= 7b1111001;4b0100: outcode= 7b0110011;4b0101: outcode= 7b1011011;4b0110: outcode= 7b1011111;4b0111: outcode= 7b1110000;4b1000: outcode= 7b1111111;4b1001: outcode= 7b1110011;ddddddd: outcode= 7b1000111;eeeeeeeendEndmodule8.module Ha
11、lf_freq(CLK_in,CLK_out);input CLK_in;output CLK_out;12reg CLK_out;always(posedge CLK_in)beginCLK_out=CLK_out;endEndmodule9.module fenpin(clk,fout10,fout100,fout1000);input clk;output fout10,fout100,fout1000;reg3:0 q1,q2,q3;assign fout10=(q1=9);assign fout100=fout10&(q2=9);assign fout1000=fout100&(q3
12、=9);always(posedge clk)if(q19) q1=q1+1;else q1=0;always(negedge fout10)if(q29) q2=q2+1;else q2=0;always(negedge fout100)if(q39) q3=q3+1;13else q3=0;Endmodule10.module decode2to4(incode,outcode);input1:0 incode;output reg3:0 outcode;integer i;always (incode)begincase(incode)2b00:outcode=4b1000;2b01:o
13、utcode=4b0100;2b10:outcode=4b0010;2b11:outcode=4b0001;endcaseendendmodule11.14module decode4to7(incode,outcode,in);input 3:0 incode;input in;output 7:0 outcode;reg7:0 outcode;always(incode)begincase(incode)4b0000: outcode6:0= 7b1111110;4b0001: outcode6:0= 7b0110000;4b0010: outcode6:0= 7b1101101;4b00
14、11: outcode6:0= 7b1111001;4b0100: outcode6:0= 7b0110011;4b0101: outcode6:0= 7b1011011;4b0110: outcode6:0= 7b1011111;4b0111: outcode6:0= 7b1110000;4b1000: outcode6:0= 7b1111111;4b1001: outcode6:0= 7b1110011;ddddddd: outcode6:0= 7b1000111;eeeeeeeif(in=1) outcode7=1b1;else outcode7=1b0;endendmodule1512
15、.module mux4_1(a,b,c,d,s,out);input a,b,c,d;input 1:0 s;output reg out;always (s)case(s)2b00:out=a;2b01:out=b;2b10:out=c;2b11:out=d;endcaseendmodule13.16module renge_counter(clk,clr,q,ql);input clk,clr;output reg 2:0 q;output ql;assign ql=(q=4);always (posedge clk ,posedge clr) if(clr)q=0;else if(q4
16、)q=q+1;else q=0;endmodule17总体电路图18四、测试数据与实验结果组号准确数据实验数据1234567五、心得体会我们小组的实习题目是数字式频率计。该项目主要是通过 verilog 语言编程后进行焊接 完成。我们在十七十八号两天对 verilogHDL 语言设计进行了学习与巩固,从十九号正式开 始数字式频率计的设计,二十一号编程验收通过,开始处理外部信号的测试,即稳压工作。 之后进行 PCB 图的制作。从二十四号开始焊接电路板,于二十七号完成所有工作。在刚开始编程的时候,对于 verilogHDL 语言这种新知识要花一段时间来消化,所以在 编写频率计的代码时遇到很多问题,
17、但是经过我们查找资料和激烈的讨论后终于解决了问 题。通过自我学习以及其他方式我们了解到了计数器分频器译码器等模块的编译方式,学 到了很多 Verilog 的有用的知识点。从二十四号开始的焊接由于之前电子工艺实习时焊接 过几百个点,所以最后的焊接工作还比较顺利。同时经过这几天的焊接,在某种程度上又 锻炼了我们的动手能力。通过这十几天的学习与实践,我们完成了数字频率计的设计以及制作,我们才发现自己 只学书本上的知识是远远不够的,还是要靠动手来提高自己的能力。这次实习一方面提高 了自己的学习与思考的能力,另一方面在动手能力方面也有了较大的提高,所以这次的电 子工艺实习对我们来说是收获颇多的。当然,我们在这一方面还有许多的不足之处,我们 会在今后的学习生涯中继续努力争取继续提高。19
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1