ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:84.01KB ,
资源ID:7237103      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7237103.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的数字频率计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的数字频率计.docx

1、基于FPGA的数字频率计摘要介绍了一种运用FPGA开发软件Quartus 设计的数字频率计。使用Verilog HDL硬件描述语言编程,该数字频率计能够准确的测量1 H z 3MH z脉冲信号, 测量误差小。关键词: 数字频率计 fpga Verilog HDL引言频率测量是电子测量领域里的一项重要内容,而高精度频率计的应用尤为广泛。目前,宽范围、高精度数字式频率计的设计方法大都采用单片机加高速、专用计数器芯片来实现。本文设计的高精度频率计除了对被测信号的整形部分、键输入和最后的数码显示部分必须用硬件实现以外,其余全部采用Verilog HDL编程设计,并下载在一片FPGA(Field Pro

2、grammable Gates Array现场可编程门阵列)芯片上,整个系统非常精简,并能够达到同样的技术指标。根据不同的需要还可以重新编程下载,进行升级。FPGA器件作为系统控制的核心,其灵活的现场可更改性,可再配置能力,对系统的各种改进非常方便,在不更改硬件电路的基础上还可以进一步提高系统的性能。具有高速、精确、可靠、抗干扰性强和现场可编程等优点。设计原理本文设计了一个数字频率计的模型,其接口信号如图(一) 所示。 图(一)数字频率计模型方框图 数字频率计设计框图如图1 所示, 主要由分频器、测量频率控制电路、十进制计数器、寄存器、液晶驱动等六个模块组成。当系统正常工作时,系统时钟经分频得

3、到的IHZ : 标准方波信号, 作为频率测量控制电路的输人信号,用1S 的时间使能计数器计数,将结果保存到锁存器, 就可以保证输出显示稳定。将计数值转换为ASCII码, 采用LCD12864显示待测信号的频率。设计内容一)源程序1分频计数模块本模块主要是把50M的信号分频为1hz和1/1.2khz。分频计数的模块的功能结构框图如图1-1所示。图1-1 计算里程和车费模块的功能结构框图根据模块实现的功能设计Verilog HDL源代码如下:module jishu( clk,rst, clk_1s,clk_1ms2);input clk,rst;output clk_1s,clk_1ms2;re

4、g clk_1ms2;reg clk_1s;reg25:0count_1s;reg14:0count_1ms2;/parameter cen_1ms2=30000;/parameter cen_1s=50000000;always(posedge clk or negedge rst) begin if(!rst) count_1s=0; else begin if(count_1s=50000000) begin count_1s=0; clk_1s=clk_1s; end else count_1s=count_1s+1b1; end endalways(posedge clk or ne

5、gedge rst) begin if(!rst) count_1ms2=0; else begin if( count_1ms2=30000) begin count_1ms2=0; clk_1ms2= clk_1ms2; end else count_1ms2= count_1ms2+1b1; end endendmodule该模块定义输入输出端口如下: clk: 全局时钟信号,这里为50MHz的时钟。 rst: 外部复位信号。 clk_1s: 由50MHZ的信号分频得到。 clk_1ms2:由50MHZ的信号分频得到。 在Altera公司的软件工具Quartus (Windows XP环

6、境下)中编译和波形仿真后得到的波形如图2-2所示:图2-2 待测信号输入计数的仿真波形2待测信号输入计数模块本模块主要是将待测信号输入,然后对待测信号进行计数。待测信号输入计数模块的功能结构框图如图2-1所示:图2-1待测信号输入计数模块的功能结构框图根据模块实现的功能设计Verilog HDL源代码如下:module fm_jishu(clk_1s,rst,fm_in,fm_count); input fm_in,clk_1s,rst; output26:0 fm_count; reg26:0 fm_count; reg26:0 count; always(posedge fm_in or

7、negedge rst) begin if(!rst) count=0; else if(!clk_1s)count=0; else begin count=count+1b1; end end always(negedge clk_1s or negedge rst) begin if(!rst) fm_count=0; else fm_count=count; end endmodule 该程序定义输入输出端口如下: clk_1s:分频得到的输入信号1HZ。 fm_in:待测输入信号。 fm_count:输入信号的计数。 rst:外部复位信号。 在Altera公司的软件工具Quartus

8、(Windows XP环境下)中编译和波形仿真后得到的波形如图2-2所示:图2-2 待测信号输入计数的仿真波形3液晶显示模块 本模块为动态显示,时间间隔为秒。动态显示模块的功能结构框图如图3-1所示。图3-1动态显示模块的功能结构图根据模块实现的功能设计Verilog HDL源代码如下:module LCD_12864( input clk_1ms2, /1.2ms时钟 input26:0 data, /数据输入 input rst_n, /复位 output reg7:0 LCD_data,/LCD12864的数据线 output reg LCD_RS, /LCD12864的寄存器选择: H

9、:数据寄存器 L:指令寄存器 output LCD_RW, /LCD12864的读写信号线: H:读 L:写 output LCD_EN, /LCD12864的使能端:下降沿触发,锁存数据 output LCD_PSB,/LCD12864串/并选择H:并行L:串行 output LCD_RST /LCD12864复位端:低电平有效 ); /+/ LCD12864驱动部分 开始 /+ parameter init = 3d0, /初始化 写指令 write_data_1 =3d1, /第一行 写数据 write_data_2 =3d2, /第二行 写数据 write_data_3 =3d3, /

10、第三行 写数据 write_data_4 =3d4; /第四行 写数据 reg2:0 state; /状态码 reg4:0 counter; /计数 assign LCD_EN =clk_1ms2; /LCD12864的使能端:下降沿触发,锁存数据assign LCD_PSB = 1b1; /LCD12864串/并选择:H:并行 L:串行 assign LCD_RST = 1b1; /LCD12864复位端:低电平有效assign LCD_RW = 1b0; /没有读操作,R/W信号始终为低电平 always (posedge clk_1ms2 or negedge rst_n) begin

11、if(!rst_n) begin counter =0; /计数清零 state = init; /复位回到init码 end else begin case(state) init:begin /LCD12864初始化 写数据 LCD_RS = 0; counter = counter+4d1; case(counter) 1: LCD_data = 8h30;/0x30:基本指令 2: LCD_data = 8h02;/0x02:地址归位 3: LCD_data = 8h01;/0x01:清屏 4: LCD_data = 8h06;/0x06:光标右移 5: LCD_data = 8h0c

12、;/0x0c: 6: begin LCD_data = 8h80; state = write_data_1;/转移到写第一行数据 counter = 0; end default: counter = 0; endcase end write_data_1:begin /LCD12864写第一行数据 LCD_RS = 1; case(counter) 0: LCD_data = ; /空格 1: LCD_data = ; /空格 2: LCD_data = 8hD3; 3: LCD_data = 8hF1; 4: LCD_data = 8hC1; 5: LCD_data = 8hD6; 6:

13、 LCD_data = 8hCA; 7: LCD_data = 8hA6; 8: LCD_data = 8hB7; 9: LCD_data = 8hB6; 10: LCD_data = 8hD1; 11: LCD_data = 8hA7; 12: LCD_data = 8hD4; 13: LCD_data = 8hBA; 14: LCD_data = ; 15: LCD_data = ; 16: begin LCD_RS = 0; LCD_data = 8h90; end default: counter = 0; endcase if(counter = 16) begin counter

14、= 0; state = write_data_2; end else counter = counter+4d1; end write_data_2:begin /LCD12864写第二行数据 LCD_RS = 1; case(counter) 0: LCD_data = 8hB4; 1: LCD_data = 8hB4; 2: LCD_data = 8hD0; 3: LCD_data = 8hC2; 4: LCD_data = 8hBB; 5: LCD_data = 8hF9; 6: LCD_data = 8hB5; 7: LCD_data = 8hD8; 8: LCD_data =-;

15、/ 9: LCD_data =-; 10: LCD_data = F; /F 11: LCD_data = P; /P 12: LCD_data = G; /G 13: LCD_data = A; /A 14: LCD_data = !; /! 15: LCD_data = !; /! 16: begin LCD_RS = 0; LCD_data = 8h88;/写第三行数据 end default: counter = 0; endcase if(counter = 16) begin counter = 0; state = write_data_3;/转移到写第三行数据 end else

16、 counter = counter+4d1; end write_data_3:begin /LCD12864写第三行数据 LCD_RS = 1; case(counter) 0: LCD_data = F; 1: LCD_data = r; 2: LCD_data = e; 3: LCD_data = =; 4: LCD_data = 8h30+data/10000000; 5: LCD_data = 8h30+data/1000000%10; 6: LCD_data = ,; 7: LCD_data = 8h30+data/100000%10; 8: LCD_data = 8h30+da

17、ta/10000%10;9: LCD_data = 8h30+data/1000%10; 10: LCD_data = ,;11: LCD_data = 8h30+data/100%10;12: LCD_data = 8h30+data/10%10;13: LCD_data = 8h30+data%10;14: LCD_data = H;15: LCD_data = Z; 16: begin LCD_RS = 0; LCD_data = 8h98;/写第四行数据 end default: counter = 0; endcase if(counter = 16) begin counter =

18、 0; state = write_data_4;/转移到写第四行数据 end else counter = counter+4d1; end write_data_4:begin /LCD12864写第四行数据 LCD_RS = 1; case(counter) 0: LCD_data = -; 1: LCD_data = -; 2: LCD_data = -; 3: LCD_data = -; 4: LCD_data = 8hC6;/频 5: LCD_data = 8hB5; 6: LCD_data = 8hC2;/率 7: LCD_data = 8hCA; 8: LCD_data = 8

19、hBC;/计 9: LCD_data = 8hC6; 10: LCD_data = -; 11: LCD_data = -; 12: LCD_data = 8hD6; 13: LCD_data = 8hA3; 14: LCD_data = 8hD3; 15: LCD_data = 8hC2; 16: begin LCD_RS = 0; LCD_data = 8h80;/写第一行数据 end default: counter = 0; endcase if(counter = 16) begin counter = 0; state = write_data_1;/转移到写第一行数据 end e

20、lse counter = counter+4d1; end default:state = init;/默认回到init码 endcase end end endmodule该模块定义输入输出端口如下: clk_1ms2: 分频得到的信号,这里为1/1.2MHZ的时钟 data: 数据输入 rst_n: 复位 LCD_data: LCD12864的数据线 LCD_RS: LCD12864的寄存器选择:H:数据寄存器 L:指令寄存器 LCD_RW: LCD12864的读写信号线 LCD_EN: LCD12864的使能 LCD_PSB: LCD12864串/并选择 LCD_RST : LCD12

21、864复位端4设计数字频率计电路 Verilog HDL具有行为描述和结构描述功能。行为描述是对设计电路的逻辑功能的描述,并不用关心设计电路使用哪些元件及这些元件之间的连接关系。而结构描述是对设计电路的结构进行描述,即描述设计电路使用的元件及这些元件之间的连接关系。本文用行为描述和结构描述分别实现电路系统。生成的jishu、fm_jishu1和LCD_12864元件图形符号只是分别代表分立的电路设计结果,并没有形成系统。顶层设计文件就是调用jishu、fm_jishu和LCD_12864三个功能元件,将它们组装起来,成为一个完整的设计。plj.bdf是本例的顶层文件,实现的功能是将检测出的频率

22、显示出来如图4-1所示。图4-1plj顶层设计图二)硬件实现1引脚锁定对数字频率计进行实验验证时,需要确定用开发板的哪些输入/输出端口(PI/O)来表示设计电路的输入输出。根据Cyclone II EP2C8Q208C8N开发板的管脚。数字频率计与EP2C8Q208C8N中的目标芯片引脚连接的全部关系见表1-1。表1-1频率计与目标芯片引脚连接关系表2:测试数据:待测频率值/(khz)测试频率值/(khz)误差/(%)0.5200.5200 50.000 49.999 0.002 200.010200.0100 400.000 400.010 0.025 600.000600.000 0 10

23、00.001 1000.000 0.0001 1500.000 1500.015 0.001 2000.000 2000.004 0.0002 2500.000 2500.050 0.002结论 该频率计利用Quartus软件工作平台进行编译和综合仿真后, 将程序下载到一片FPGA芯片中,经实验验证, 该频率计达到了设计要求。所设计的数字频率计由于采用Verilog HDL 语言设计,用一片FPGA实现, 因而体积小、功耗低, 稍加修改就可以改变数字频率计测量范围, 拥有较高的整体性能和可靠性, 升级和维护都很方便, 而且容易生产, 造价比较低, 具有较好的市场前景。参考文献1 黄 任. AVR单片机与CPLD /FPGA 综合应用入门M . 北京: 北京航空航天大学出版社, 2004. 1 王振红. VHDL 数字电路设计与应用实践教程. 北京:机械工业出版社,2003年6月.2 江国强. EDA技术与与应用(第2版).北京:电子工业出版社,2007年4月.3 王钿 卓兴旺. 基于Verilog HDL的数字系统应用设计. 北京:国防工业出版社,2006年1月.4 延明 张亦华. 数字电路EDA技术入门. 北京:北京邮电大学出版社,2006年1月.5 王钿 卓兴旺盛. 基于Verilog HDL的数字系统应用设计. 北京:国防工业出版社,2006年1月.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1