FPGA—4位十进制频率计_第1页
FPGA—4位十进制频率计_第2页
FPGA—4位十进制频率计_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4位十进制频率计一、设计目的用Verilog HDL语言设计一个能实现自动测频的 4位十进制频率计。1)测量范围:1Hz9999Hz2)测量的数值通过4个数码管显示3)频率超过9999Hz时,溢出指示灯亮,可以作为扩大测量范围的接口。二、设计原理1、若某一信号在T秒时间里重复变化了 N次,则根据频率的定义可知该信 号的频率fs为:fs=N/T。2、当T=1s时,N就是测得的频率。3、 根据以上所提出的方法,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和 为下一测频计数周期作准备的计数器复位信号。这个复位信号可以由一个测频控制信号发

2、生器产生,即图1中的TESTCTL,它的设计要求是,TESTCTL的计数 使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器 CNT10的EN使能端进行同步控制。当 CNT_EN高电平时,允许计数;低电平 时停止计数,并保持其所计的脉冲数。在停止计数期间,每0.01ms锁存器进行一次锁存,并由数码管显示计数值。设置锁存器是为了使显示的数据稳定, 不会 由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT 对计数器进行清零,为下1秒钟的计数操作准备。图1原理图二、设计步骤1、新建cym工程文件图2建立工程由于是用VHDL语言进行设计,所以此处选择类型

3、为 HDL之后一直点击确认即可。图3芯片信息配置由于我们所采用的板子为RCXQ208_V5 FPGA开发板,所以配置如图所示2、新建各个分模块并输入代码。Hierarchy旨 cyrri2E xc3g 500e- 5 pq 2 OBilifcanil irB&iilim illfcaa-ii iiHfaiiiflmiiii-wii ii'M-iliimiiiiAiii li'i 可磊 joDuntwr。(counterJOBv)i 可 divfre (div fre.v) 勺 latch (latch.v) V| stg displa/ egdkplav) 7| tet

4、 ctl (te5t_dtl.v)图4 建立VHDL文件3、建立顶层文件为原理图型,例化各个模块并连接。图5 建立VHDL文件HVV吨 gQdu:田:E,:EElh:丄 Q-:L4、对设计进行综合,如果出现错误,根据提示改正Processes: stcpw/atcliDesign Su iritn ary/R*p o rtsDesign Ut:illti&5Uer匚口口乩厂对“第Synthesize - XST mplemerrt DesignGenerate Programming FileCanfigurrget Devi ceAnalyze Design Using ChipSc

5、.»图6综合黄色感叹符号代表有警告,有些警告可以忽略,绿色小勾表示综合成功5、建立测试文件并进行仿真,验证设计图7建立激励文件之后一直点击确认即可。为了结合我们的下载板子的时钟信号,在测试文件中设置时钟单位为10ns,精度为1ps,如图:1 'riiDescale 10ns / Ips23 (rjodule stopwatcli_t;e3t;K f 图8设置时钟单位仿真文件应验证个端口的正确性。由于时钟单位为10ns所以CLK_50M每一个仿真时间单位翻转一次即可产生一个50M的时钟信号。开始时进行一次复位,使各寄存器初值正确。control_port端为数码管位扫描端,所以

6、其值一直在 1110110110110111循环。data_out端为数码管显示的数字对应的七段数码 管的二进制数据,它的值可以与 control_port端对应到一起观察,转换为对应的 十进制数据即是1110 1101、1011、0111对应的data端的信号由09循环。对测试文件进行检查,出现绿色小勾表示无语法错误,可以进行仿真。Processes: stopwatch testISim SimulatorEehavioral C-heck SyntaxSimult Bebvioral Mpdel6、根据板子锁定引脚,并生成下载文件。下载板有两个时钟输出引脚,一个为 40M的,一个为50M

7、的。本设计采用的是50M,所以CLK_50M引脚锁定为引脚 P80,即net "CLK_50M"loc = p80。CLR复位端连接一个轻触开关, 为P57,即net "CLR" loc = p57。CARRY_OUT出 标志端用一个LED灯来表示,net "CARRY_OUTOc = p22。下载板数码管引脚图如 图所示:TUBE_EN0-71»rTUBE ENOTUBE EN1ILJU匚 EN2TUBE_EN斗TUB JUN 5TUB匚 CN6TUBE EM7TUBE_D(0 .7|TUBE_D0 TU 屹 TUEED2TUB巨口

8、3tubeZd5 nJBED6 TUBE D7132iGhlDIXiwEvr DfliTIKPU7 1TlJBb LNTii?aTUBE EW1uyTUBE EM厂YDbOn1倍P13VlUFCT OtiLTIhlPUT 0IMTUBE EN3122TUBE EN6121GND120TUBE E1J711Q0UEZERlflINFUI O«HfTR-rPi.iVLCC16D2RS询LCD16O2xun cBi6d?ELCD 1 M2f)4TUBE D4tfllPLSVtinTNFT7 DfllTKEV LISE6LtTitolrijfiL Bi诫LCD16O2TUBE DJMVLCC

9、1CO2D2ILSt ?10GLCOitsa?06TUE DG4nuni r;ni»T-7 niTimr mLCtnM-i_DST «E-D5oaKrrj i*ur5歯LCD 1602 DOTUBE ODwe一图10数码管端口图由图可知data端和control_port端的引脚应该分别锁定为:net "data_out0" loc = p102;n et "data_out1" loc = p99;n et "data_out 2" loc = p107;n et "data_out 3" l

10、oc = p109;n et "data_out 4" loc = p112;n et "data_out 5" loc = p100;n et "data_out 6" loc = p106;n et "data_out 7" loc = p108;net "control_port0" loc = p127;net "control_port1" loc = p128;net "control_port2" loc = p129;net "c

11、ontrol_port3" loc = p132;net "control_port4" loc = p120;net "control_port5" loc = p122;四、仿真结果1、时钟信号图11 验证CLK信号由图可知,CLK信号周期为20ns,时钟信号正确2、control_port 信号图 12 con trol_port信号由图可知,con trol_port信号在预料的循环之内,所以正确3、data信号图13 data信号第二个扫描周期图14 data信号 第三个扫描周期图15 data信号第四个扫描周期Name弔:时讨亠00

12、":沏专CLR123 is料什,1,- 1 .,MHIZl 15L it l iljLdil IJLill IIIin"】X1¥ 1:一炬朮乂ifTira>髓灑讓鑿理攥尊填灣礬勲鼠顏图16 data信号第五个扫描周期由上图综合可知,data信号在预料的变化之内,所以正确五、体会本次设计由于有了上一次跑表的设计,所以有了几分心得。要做得快了不少, 但还是有一定难度。把难度大的设计分为各个难度较小的模块来设计, 本就是我们自顶向下设计 的一种重要思想。该设计就用到了这种思想。在简化的同时,我们应该确保各个 模块的正确性,所以各个模块我们都应测试、仿真之后在综合到

13、一起。有时候分开各个模块都可以,但是综合在一起就有各种错误出现了。 所以我 们在综合代码的时候,一点要小心又小心,确保引脚的对应关系无误。逻辑顺序 无误。六、代码1、Verilog HDL 代码:*位十进制计数器*Fn待测频率,CLK_50M 系统时钟,CLR复位标志,CARRY_OUT溢出标志data_out数码管显示值,control_port数码管位选信号*(1) 十进制计数器模块module cou nter_10(CLK,CLR,E n, data,CO);in put CLK,CLR,E n;output reg 3:0 data;output reg CO = 1'b0;

14、always (posedge CLK or posedge CLR)beginif(CLR)begindata <= 4'b0;CO <= 1'b0;endelse if(En)beginif(data = 4'b1001)begin data <= 4'b0;CO <= 1'b1;endelsebegindata <= data + 1'b1; CO <= 1'b0;endendend en dmodule(2) 分频模块:*分频模块,用于产生测试 用的频率,以及控制信号。*module div_f

15、re(CLK_50M,CLR,F_i n,clk_1s,clk_100us);in put CLK_50M,CLR;output reg F_in ,clk_1s,clk_100us;reg 12:0 cnt,cnt1,c nt2;parameter div_num = 13'h1;/13'h1387;改变阈值即可调节F_in的频率范围always (posedge CLK_50M or posedge CLR) beginif(CLR)begincnt <= 13'h0;clk_100us <= 1'b0;endelse if(cnt = 13&#

16、39;h1387)begin clk_100us <= 1'b1; cnt <= 13'h0;endelsebegincnt <= cn t+1'b1; clk_100us <= 1'b0;endend/分频模块/每0.1ms产生个脉冲信号always (posedge clk_100us or posedge CLR) beginif(CLR)begincnt1 <= 13'h0;F_in <= 1'b0;endelse if(cnt1 = div_ num) begincnt1 <= 13'h

17、0;F_in <= F_i n;endelsecnt1 <= cnt1 + 1'b1;end always (posedge clk_100us or posedge CLR)beginif(CLR)begincnt2 <= 13'hO; clk_1s <= 1'b0; end/else if(cnt2 = 13'h1387) else if(cnt2 = 13'ha) begincnt2 <= 13'bO; clk_1s <= clk_1s; endelsecnt2 <= cnt2 + 1'b1

18、; enden dmodule(3) 测频控制模块module test_ctl(clk_1s,c nt_en, clr_c nt); in put clk_1s;/ 1HZoutput cnt_en; output clr_c nt;/ output load;reg div2clk = 0;wire cnt_en;reg clr_c nt,i;/ wire load;always (n egedge clk_1s) beginfor(i = 10;i>0;i=i-1) div2clk <= 1'bO;div2clk <= 1'b1;endalways (c

19、lk_1s or div2clk) beginif(!clk_1s && !div2clk) clr_cnt <= 1'b1;elseclr_cnt <= 1'bO;end/ assig n load = div2clk;assig n cnt_en = div2clk;en dmodule(4) 锁存器模块module latch(clk,data_ in, data_out);in put clk;in put 3:0 data_i n;output reg 3:0 data_out = 4'b0;always (posedge clk)

20、data_out <= data_ in;en dmodule(5) 数码管显示模块moduleseg_display(CLK_50M,CLR,data_in_1,data_in_2,data_in_3,data_in_4,data_out,co ntrol_port);in put CLK_50M,CLR;in put 3:0 data_in_1,data_in_2,data_in_3,data_in_4;output reg 7:0 data_out;output reg 3:0 con trol_port;reg 15:0 sca n_cnt;reg 1:0 seg;always

21、(posedge CLK_50M or posedge CLR)数码管的动态扫描显示,每1ms显示下一位beginif(CLR)beginscan_cnt <= 16'h0;seg <= 2'b00;endelsebeginif(scan_cnt = 16'hc34f)scan_cnt <= 16'h0;elsesca n_cnt <= sca n_cnt + 1;if(scan_cnt = 16'h0)beginif(seg = 2'b11)seg <= 2'b00;elseseg <= seg +

22、1'b1;endendendalways (posedge CLK_50M or posedge CLR)beginif(CLR)begindata_out <= 8'bO;con trol_port <= 4'b1110;endelsecase(seg)数码管显示选择2'b00 : control_port,data_out <= 4'b1110,seg_data(data_in_1);2'b01 : con trol_port,data_out <= 4'b1101,seg_data(data_in_2);2&

23、#39;b10 : con trol_port,data_out <= 4'b1011,seg_data(data_in_3);2'b11 : con trol_port,data_out <= 4'b0111,seg_data(data_in_4); default : con trol_port,data_out <= 12'hecO;endcase/数码管值的选择endfunction 7:0 seg_data; in put 3:0 x;case(x)0: seg_data =8'hc0;1: seg_data =8'h

24、f9;2: seg_data =8'ha4;3: seg_data =8'hb0;4: seg_data =8'h99;5: seg_data =8'h92;6: seg_data =8'h82;7: seg_data =8'hf8;8: seg_data =8'h80;9: seg_data =8'h90;default: seg_data = 8'hff; endcaseendfunctionen dmodule2、测试代码:timescale 10ns / 1psmodule cym_cym_sch_tb();/ I nputsreg CLR;reg CLK_50M;/ Outputwire CARRY_OUT;wire 7:0 data_out; wire 3:0 con trol_port;/ Bidirs/I nsta ntiate the UUTcym UUT (.CLR(CLR), CARRY_OUT(CARRY_OUT), CLK_50M(CLK_50M), .data_out(data_out), .con tro

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论