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

上传人:飞****2 文档编号:13890455 上传时间:2022-05-01 格式:DOC 页数:18 大小:408KB
返回 下载 相关 举报
基于Verilog的数字频率计的设计(包含代码及仿真)(共18页).doc_第1页
第1页 / 共18页
基于Verilog的数字频率计的设计(包含代码及仿真)(共18页).doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《基于Verilog的数字频率计的设计(包含代码及仿真)(共18页).doc》由会员分享,可在线阅读,更多相关《基于Verilog的数字频率计的设计(包含代码及仿真)(共18页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上一、实验名称数字频率计的设计二、实验地点211楼303三、实验目的和任务(1) 了解数字电路设计的基本特点 (2) 了解数字频率计电路的基本原理 (3) 基本掌握 ISE 软件的使用(设计输入、仿真、实现) (4) 了解可编程逻辑器件( FPGA )的一般情况 (5) 基本掌握 HDL 的使用四、实验内容(1) 设计出符合设计要求的解决方案 (2) 设计出单元电路 (3) 利用 EDA 软件对各单元电路及整体电路进行仿真 (4)利用 EDA 软件在 ELB 电子课程设计实验板实现设计 (5) 观察实验结果五、项目需用仪器设备名称以及所需主要元器件PC 机、EDA教学实

2、验系统一台,带有(SPARTAN -3A XC3S200A芯片 ,LED 管 , 七段数码管 等)的实验板一块 , 跳线、下载电缆一根,函数发生器。六、实验任务与要求频率测量范围为10Hz10MHz,用6只数码管以kHz为单位显示测量结果;有三个带锁按键开关(任何时候都只会有一个被按下)用来选择1S、0.1S和0.01S三个闸门时间中的一个;有一个按钮开关用来使频率计复位;有两只LED,一只用来显示闸门的开与闭,另一只当计数器溢出时做溢出指示。数字频率计的相关技术指标如下:1、位数:测量频率通过LED数码管为六位十进制数显示。2、测试频率范围为:10HZ-10MHZ。3、计数器溢出时要有溢出标

3、志over。4、需要有闸门标志gate。5、显示工作方式:a、用BCD七段共阳极数码管显示读数,只有在读数不发生跳变时才是正确的结果。b、采用记忆显示方法,即在一次测试结束时,显示测试结果,此显示值一直保留到下次测量显示数到来,才将上次显示更新。用第二次测试结果,更新显示值。6、要求被测输入信号应是符合数字电路要求的脉冲波。 七、verilog设计环境介绍VerilogVerilog HDL是目前应用最为广泛的硬件描述语言Verilog HDL可以用来进行各种层次的逻辑设计,也可以进数字系统的逻辑综合,仿真验证和时序分析等。 Verilog HDL适合算法级,寄存器级,逻辑级,开关级、系统级和

4、版图级等各个层次的设计和描述 verilogHDL进行设计最大的优点是其工艺无关性这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路 verilogHDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICS和FPGA的设计之用。verilogHDL 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。 Verilog 是由en:Gateway Design Automation公司于大约1984年开始发展。Gateway

5、 Design Automation公司后来被 Cadence Design Systems于1990年所购并。现在 Cadence 对于 Gateway 公司的 Verilog 和 Verilog-XL 模拟器拥有全部的财产权。 选择VHDL还是verilog HDL?这是一个初学者最常见的问题。其实两种语言的差别并不大,他们的描述能力也是类似的。掌握其中一种语言以后,可以通过短期的学习,较快的学会另一种语言。 选择何种语言主要还是看周围人群的使用习惯,这样可以方便日后的学习交流。当然,如果您是专用集成电路(ASIC)设计人员,则必须首先掌握verilog,因为在IC设计领域,90%以上的公

6、司都是采用verilog进行IC设计。对于PLD/FPGA设计者而言,两种语言可以自由选择。八、实验原理所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。若在一定时间内计得这个周期信号变化的次数为N,则其频率可表达为: (1)电子技术器可以严格按公式(1)所表达的频率的定义进行测频,其原理方框图如图1所示:计数器闸门放大整形门控电路时基信号发生器 图1 测频原理图 首先,把被测信号(以正弦波为例)通过放大整形电路变成脉冲(实际上变成方波即可)其重复频率等于被测频率,然后将它加到闸门的一个输入端。闸门通过门控信号来控制开、闭时间,只有在闸门开通时间T内,被计数的脉冲才能通过闸门,被送到

7、十进制电子计数器进行计数。门控信号的时间T是非常准确的,以它作为时间基准,它由时基发生器提供。时基信号发生器由一个高稳定的石英振荡器和一系列数字分频器组成,由它输出的标准时间脉冲(时标)去控制门控电路形成门控信号。比如,时标信号的重复周期为1S,则加到闸门的门控信号作用时间T及闸门时间亦准确的等于1S,及闸门开通时间为1S,这时若计得10000个数,则有(1)式知,被测频率。从以上讨论可知,电子计数器的测频原理实质上以比较法为基础,它将和时基信号频率相比,两个频率相比的结果以数字的形式显示出来。溢出指示灯九、 1 .原理框图溢出信号七段译码管显示数据扫描显示系统门控电路分频器石英振荡锁存器计数

8、器阀门控制被测信号 clearlatch时基2、各模块功能及实现一.分频模块程序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; reg29:0 count1,count2,count3,count4;initial begin clk_1hz=0; clk_10hz=0; clk_100hz=0; clk_1khz=0; count1=0; count2=0; count3=0; count4=0

9、; endalways( posedge clk) begin if(!rest) begin count1=0;count2=0;count3=0;count4=0; clk_1hz=0; clk_10hz=0;clk_100hz=0;clk_1khz=0; end else begin if(count1=) begin count1=0;clk_1hz=clk_1hz; end else count1=count1+1; if(count2=) begin count2=0;clk_10hz=clk_10hz;end else count2=count2+1; if(count3=) b

10、egin count3=0;clk_100hz=clk_100hz;end else count3=count3+1; if(count4=24000) begin count4=0;clk_1khz=clk_1khz;end else count4=count4+1; end endendmodule 仿真图 仿真模块 二,门控电路和清零,锁存,阀门信号产生程序 module chose(rest,clk_10hz,clk_100hzhz,clk_1khz,key1,key10,key100,gate_out1,ff,clk_latch,clk_clear); input rest ,clk

11、_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:1count; initial begin gate_out1=0;ff=0;clk_latch=0;clk_clear=0;gate=0;count=0;endalways( posedge clk_1khz) begin if(!rest) begin gate_out1=0; ff=2b00;end

12、 else begin if(key1=1&key10=0&key100=0) begin gate=clk_10hz; ff=2b01;end else if(key1=0&key10=1&key100=0) begin gate=clk_100hz;ff=2b10;end else if(key1=0&key10=0&key100=1) begin gate=clk_1khz;ff=2b11;end else begin ff=0;end endend / always (posedge gate)begincount=count+1;if (count=9)begin gate_out1

13、=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;endelse begin gate_out1=0;clk_clear=0;clk_latch=0;endendendmodule仿真图仿真模块 三, 计数器程序module counter(rest,start,clk_in,cnt1,cnt2,cnt3,cnt4,cnt5,

14、cnt6,yichu,clk_clear); input rest,start,clk_in,clk_clear; output yichu; reg yichu; output reg 4:1cnt1,cnt2,cnt3,cnt4,cnt5,cnt6; initial begin yichu=1; cnt1=4b0000;cnt2=4b0000;cnt3=4b0000;cnt4=4b0000; cnt5=4b0000; cnt6=4b0000; end always(posedge clk_in )begin if(!rest) begin cnt1=4b0000;cnt2=4b0000;c

15、nt3=4b0000; cnt4=4b0000;cnt5=4b0000;cnt6=4b0000; end else begin if(clk_clear=1) begin cnt1=4b0000;cnt2=4b0000;cnt3=4b0000; cnt4=4b0000;cnt5=4b0000;cnt6=4b0000;yichu=1; end else if(start=1) begin if(cnt6=4b1001)&(cnt5=4b1001)&(cnt4=4b1001)&(cnt3=4b1001)&(cnt2=4b1001)&(cnt1=4b1001) begin cnt1=4b0000;c

16、nt2=4b0000;cnt3=4b0000;cnt4=4b0000; cnt5=4b0000;cnt6=4b0000;yichu=0;end else if(cnt5=4b1001)&(cnt4=4b1001)&(cnt3=4b1001)&(cnt2=4b1001)&(cnt1=4b1001) begin cnt1=4b0000;cnt2=4b0000; cnt3=4b0000;cnt4=4b0000; cnt5=4b0001;cnt6=cnt6+4b0001; endelse if(cnt4=4b1001)&(cnt3=4b1001)&(cnt2=4b1001)&(cnt1=4b1001)

17、 begin cnt1=4b0000;cnt2=4b0000;cnt3=4b0000; cnt4=4b0000;cnt5=cnt5+4b0001;cnt6=cnt6; end else if(cnt3=4b1001)&(cnt2=4b1001)&(cnt1=4b1001) begin cnt1=4b0000;cnt2=4b0000;cnt3=4b0000; cnt4=cnt4+4b0001;cnt5=cnt5;cnt6=cnt6; end else if(cnt2=4b1001)&(cnt1=4b1001) begin cnt1=4b0000;cnt2=4b0000; cnt3=cnt3+4b

18、0001;cnt4=cnt4;cnt5=cnt5;cnt6=cnt6; endelse if(cnt1=4b1001)begincnt1=4b0000;cnt2=cnt2+4b0001;cnt3=cnt3;cnt4=cnt4;cnt5=cnt5;cnt6=cnt6;endelse begin cnt1=cnt1+4b0001;cnt2=cnt2;cnt3=cnt3; cnt4=cnt4;cnt5=cnt5;cnt6=cnt6; end end end endendmodule仿真图模块仿真图四,锁存以及译码扫描显示程序module v138(rest,clk_1khz,se,in1,in2,i

19、n3,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:1ff; 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; initial begin cou

20、nt=0; dp=1 ;segs=0; se=0;sign_out4=0;led=0;en=0; latch1=0;latch2=0;latch3=0; latch4=0;latch5=0;latch6=0; end/always( posedge clk_latch ) begin latch1=in1;latch2=in2;latch3=in3; latch4=in4;latch5=in5;latch6=in6; end /锁存器。 always(posedge clk_1khz)begin count=count+1;end/位选自加always(posedge clk_1khz ) b

21、egin if(!rest) begin led=1; end else begin case(count) 0: begin sign_out4=latch1; se=count;end 1: begin sign_out4=latch2; se=count;end 2: begin sign_out4=latch3; se=count;end 3: begin sign_out4=latch4; se=count;end 4: begin sign_out4=latch5; se=count;end 5: begin sign_out4=latch6; se=count;end defau

22、lt:sign_out4=4b1111; endcase endend / 将数据依次译码 always(posedge clk_1khz) begin if(ff=2b01&se=3)begin dp=0;end else if(ff=2b10&se=2)begin dp=0;end else if(ff=2b11&se=1)begin dp=0;end else begin dp=1;endend/档位选择always ( sign_out4)beginif(!rest) begin segs=0;endelse begin case(sign_out4) 0:segs=7b; 1:seg

23、s=7b; 2:segs=7b; 3:segs=7b; 4:segs=7b; 5:segs=7b; 6:segs=7b; 7:segs=7b; 8:segs=7b; 9:segs=7b; default:segs=7b; endcase endend/译码显示endmodule仿真图模块仿真图五,顶层电路程序module top(rest,clk,key1,key2,key3,clk_in,se,segs,led,dp,en,yichu); input rest,clk,clk_in,key1,key2,key3; output dp,led,en,yichu; output 3:1 se ;

24、 output7:1 segs; wire 4:1out1,out2,out3,out4,out5,out6; wire 2:1ff; wire gate_out1;count count(.clk(clk),.rest(rest),.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.clk_1khz(clk_1khz);/分频器 chose chose(.rest(rest),.clk_1khz(clk_1khz),.clk_10hz(clk_10hz),.clk_100hz(clk_100hz),.ky1(key1),.key10(key2),.key10

25、0(key3), .gate_out1(gate_out1),.ff(ff),.clk_latch(clk_latch),.clk_cear(clk_clear);/时基选择模块 counter counter(.start(gate_out1),.rest(rest),.clk_in(clk_in),.cnt1(out1), .yichu(yichu) ,.cnt2(out2),.cnt3(out3),.cnt4(out4),.cnt5(out5),.cnt6(out6),.clk_clear(clk_clear);/计数器器 v138 v138(.rest(rest),.clk_1khz(

26、clk_1khz),.se(se), .led(led),.in1(out1),.in2(out2),.in3(out3),.in4(out4), .in5(out5),.in6(out6),.segs(segs),.ff(ff),.en(en),.dp(dp),.clk_latch(clk_latch);endmodule/译码显示顶层电路图生成的各个模块按要求连线,形成顶层原理图,如下3 分配引脚和下载实现根据XC3S200A I/O口对应管脚参考分配引脚。引脚分配完毕后双击“Generate programming”对所有程序进行综合,改正综合过程中提示的错误和警告,然后运行“Confi

27、gure Device”把程序下载到电路板上。4 结果测试在成功下载并运行后,评估该设计系统的实际测量效果,作对比试验,选用频率可调的函数发生器生成测试信号。当闸门时间为1s时,测得结果如下:序号输入(Hz)输出(KHz)11000.001210000.010 31000000.100410000001.000 5010.0006100.0007200.0008300.0009400.00010500.00011600.00012700.00013800.00014899.99515919.99416959.99517999.99618999.99919溢出十、误差分析由上表可以看出实验测量中

28、存在误差,误差一方面来源于闸门时间T,另一方面来源于计数器计得的数。由计数器频率计算公式fx=N/T以及误差合成方法可得: (2)其中,第一项是数字化仪器所特有的误差,而第二项是闸门时间的相对误差,这项误差决定于石英振荡器所提供的标准频率的准确度。(a)、误差在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间T接近甚至等于被测信号周期Tx的整数倍N时,此项的误差最大,如下图:NTxTx(a)T0(b)趋近于0 趋近于0若主门开启时刻为,而第1个计数脉冲出现在,上图(a)中示

29、出了的情况(),这时计数器计得N个数(图中N=5);现在再来看图(b),即趋近于0,这就有两种可能的计数结果:若第一个计数脉冲和第六个计数脉冲都能通过主门,则计数为N+1=6个;也可能这两个脉冲都没有进入主门,则只能计得N1=4个数。由此可知,最大计数误差为个数。所以考虑到公式(1),可写成 (3) 式中T为闸门时间,为被测频率。由公式(3)可知,不管计数值N多少,其最大误差总是个计数单位,故称“个字误差”。而且fx一定时,增大闸门时间T。可减少误差对测频误差影响。(b)、标准频率误差闸门时间T准不准,主要取决于有石英振荡器提供的标准频率的准确度,若石英振荡器的频率为fc,分频系数为K,则而所以可见,闸门时间的准确度在数值上等于标准频率的准确度。由以上公式可知:当输入频率值为HZ时,输出频率值为959.995kHZ,误差为:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁