您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于FPGA的数字频率计--2012021750--陈嘉明
1华南师范大学课程论文题目:基于FPGA的数字频率计院(系):物理与电信工程学院专业:电子与通信工程学生姓名:陈嘉明学号:2012021750指导老师:周卫星2基于FPGA的数字频率计摘要介绍了一种运用FPGA开发软件QuartusⅡ设计的数字频率计。使用VerilogHDL硬件描述语言编程,该数字频率计能够准确的测量1Hz~50MHz脉冲信号,测量误差较小。关键词:数字频率计FPGAVerilogHDL引言频率测量是电子测量领域里的一项重要内容,而高精度频率计的应用尤为广泛。目前,宽范围、高精度数字式频率计的设计方法大都采用单片机加高速、专用计数器芯片来实现。本文设计的高精度频率计除了对被测信号的整形部分、键输入和最后的数码显示部分必须用硬件实现以外,其余全部采用VerilogHDL编程设计,并下载在一片FPGA(FieldProgrammableGatesArray——现场可编程门阵列)芯片上,整个系统非常精简,并能够达到同样的技术指标。根据不同的需要还可以重新编程下载,进行升级。FPGA器件作为系统控制的核心,其灵活的现场可更改性,可再配置能力,对系统的各种改进非常方便,在不更改硬件电路的基础上还可以进一步提高系统的性能。具有高速、精确、可靠、抗干扰性强和现场可编程等优点。设计原理本文设计了一个数字频率计的模型,其接口信号如图1所示。图1数字频率计模型方框图数字频率计设计框图如图1所示,主要由分频器、测量频率控制电路、十进制计数器、寄存器、液晶驱动等六个模块组成。当系统正常工作时,系统时钟经分频得到1Hz;标准方50M时钟分频测量控制电路计数器寄存器液晶LCD1602显示驱动液晶模块待测信号3波信号,作为频率测量控制电路的输人信号,用1S的时间使能计数器计数,将结果保存到锁存器,就可以保证输出显示稳定。将计数值转换为ASCII码,采用LCD1602显示待测信号的频率。设计内容一)源程序1.分频计数模块本模块主要是把50M的信号分频为1hz和1/1.2khz。。分频计数的模块的功能结构框图如图1-1所示。clkrstclk_1sclk_1ms2jishuinst图1-1分频模块的结构框图在Altera公司的软件工具QuartusⅡ中编译和波形仿真后得到的波形如图1-2所示:图1-2待测信号输入计数的仿真波形2.门限控制模块本模块根据所给定的计数基时钟,提供输出相应的计数器计数值的清除脉冲与锁存器锁存脉冲与使能信号。门限控制模块的功能结构框图如图2-1所示:f1hzLatch_ENCounter_ClrCounter_ENgate_controlinst8图2-1门限控制模块的功能结构框图3.待测信号输入计数模块本模块主要是将待测信号输入,然后对待测信号进行计数,门限信号使用,能对数据的采集更稳定,更准确。待测信号输入计数模块的功能结构框图如图3-1所示:4clk_1srstfm_inENCLRclkfm_count[26..0]count_1_out[31..0]count_2_out[31..0]fm_jishuinst9图3-1待测信号输入计数模块的功能结构框图在Altera公司的软件工具QuartusⅡ中编译和波形仿真后得到的波形如图3-2所示:图3-2待测信号输入计数的仿真波形4.门闩缓存模块本模块为所采集到的数据进行缓存处理,防止由于采集数据过快而导致数据丢失或者前一个数据被后一个数据所覆盖等问题。门闩缓存模块的功能结构框图如图4-1所示:clkA[26..0]A_1[31..0]A_2[31..0]Q[26..0]Q_1[31..0]Q_2[31..0]flip_latchinst10图4-1门闩缓存模块的功能结构框图5.核心模块本模块为SOPC片上系统构建,系统时钟为100MHz。核心模块的功能结构框图如图5-1所示。5clkreset_nin_port_to_the_DATA_INPUT[26..0]in_port_to_the_KEYin_port_to_the_count_1[31..0]in_port_to_the_count_2[31..0]LCD_E_from_the_LCDLCD_RS_from_the_LCDLCD_RW_from_the_LCDzs_addr_from_the_sdram[11..0]zs_ba_from_the_sdram[1..0]zs_cas_n_from_the_sdramzs_cke_from_the_sdramzs_cs_n_from_the_sdramzs_dqm_from_the_sdram[1..0]zs_ras_n_from_the_sdramzs_we_n_from_the_sdramLCD_data_to_and_from_the_LCD[7..0]zs_dq_to_and_from_the_sdram[15..0]KERNELinst图5-1核心模块SOPC的功能结构图该模块定义输入输出端口如图5-2所示:图5-2SOPC内部构建6.设计数字频率计电路VerilogHDL具有行为描述和结构描述功能。行为描述是对设计电路的逻辑功能的描述,并不用关心设计电路使用哪些元件及这些元件之间的连接关系。而结构描述是对设计电路的结构进行描述,即描述设计电路使用的元件及这些元件之间的连接关系。本文用行为描述和结构描述分别实现电路系统。顶层文件如下图6-1所示,实现的功能是将检测出的频率显示出来。6PIN_N2VCCCLOCKINPUTPIN_G26VCCKEY[0]INPUTPIN_K26VCCGPIO_B[37]INPUTPIN_T6PIN_V4PIN_V3PIN_W2PIN_W1PIN_U6PIN_U7PIN_U5PIN_W4PIN_W3PIN_Y1PIN_V5S_A[11..0]OUTPUTPIN_AE2PIN_AE3S_BA[1..0]OUTPUTPIN_AB3S_nCASOUTPUTPIN_AA6S_CKEOUTPUTPIN_AB4S_nRASOUTPUTPIN_AD3S_nWEOUTPUTPIN_AC3S_nCSOUTPUTPIN_Y5PIN_AD2S_DQM[1..0]OUTPUTPIN_AA7S_CLKOUTPUTPIN_K3LCD_EOUTPUTPIN_K1LCD_RSOUTPUTPIN_K4LCD_RWOUTPUTPIN_L4LCD_ONOUTPUTPIN_K2LCD_BLONOUTPUTPIN_V6PIN_AA2PIN_AA1PIN_Y3PIN_Y4PIN_R8PIN_T8PIN_V7PIN_W6PIN_AB2PIN_AB1PIN_AA4PIN_AA3PIN_AC2PIN_AC1PIN_AA5VCCS_DB[15..0]BIDIRPIN_H3PIN_H4PIN_J3PIN_J4PIN_H2PIN_H1PIN_J2PIN_J1VCCLCD[7..0]BIDIRCycloneIIinclk0frequency:50.000MHzOperationMode:NormalClkRatioPh(dg)DC(%)c02/10.0050.00c12/1-75.0050.00inclk0c0c1PLLinst1VCCclkreset_nin_port_to_the_DATA_INPUT[26..0]in_port_to_the_KEYin_port_to_the_count_1[31..0]in_port_to_the_count_2[31..0]LCD_E_from_the_LCDLCD_RS_from_the_LCDLCD_RW_from_the_LCDzs_addr_from_the_sdram[11..0]zs_ba_from_the_sdram[1..0]zs_cas_n_from_the_sdramzs_cke_from_the_sdramzs_cs_n_from_the_sdramzs_dqm_from_the_sdram[1..0]zs_ras_n_from_the_sdramzs_we_n_from_the_sdramLCD_data_to_and_from_the_LCD[7..0]zs_dq_to_and_from_the_sdram[15..0]KERNELinstclkrstclk_1sclk_1ms2jishuinst3VCCVCCVCCf1hzLatch_ENCounter_ClrCounter_ENgate_controlinst8clk_1srstfm_inENCLRclkfm_count[26..0]count_1_out[31..0]count_2_out[31..0]fm_jishuinst9clkA[26..0]A_1[31..0]A_2[31..0]Q[26..0]Q_1[31..0]Q_2[31..0]flip_latchinst10图6-1频率计顶层设计图二)硬件实现1.引脚锁定对数字频率计进行实验验证时,需要确定用开发板的哪些输入/输出端口(PI/O)来表示设计电路的输入输出。根据CycloneIIEP2C35F672C6N开发板的管脚。数字频率计与EP2C35F672C6N中的目标芯片引脚连接的全部关系见表1-1。表1-1频率计与目标芯片引脚连接关系表(部分如下所示)7三)软件实现系统显示部分使用niosⅡ实现,由于LCD1602显示器直接使用SOPC固件库里的lcd1602固件,所以在niosⅡ上无需像以往单片机控制LCD1602那样,得写时序。主要功能函数如下所示:/*******************定义控制函数***********************/#defineLCD_Write_CMD(data)IOWR(LCD_BASE_1602,0,data)#defineLCD_Write_Data(data)IOWR(LCD_BASE_1602,2,data)#defineLCD_Read_Data()IORD(LCD_BASE_1602,3)从公式中可看出,niosⅡ里的LCD1602是直接对寄存器进行操作的。在niosⅡ里通过定义结构体函数,从而对寄存器的各数据位进行读写操作。端口的结构体函数如下所示:/*--------------------------PIO-------------------------------*/typedefstruct{unsignedlongintDATA;unsignedlongintDIRECTION;unsignedlongintINTERRUPT_MASK;unsignedlongintEDGE_CAPTURE;}PIO_STR;系统设计可以显示一个8位的数据,由于在LCD1602上显示的是ASCII码,故需要8对所采集到的数据的每一位进行分离,各位数字分离算法如下:LCD_SetPos(1,4);LCD_Write_Data(0x30+data/10000000);LCD_SetPos(1,5);LCD_Write_Data(0x30+(data/1000000)%10);LCD_SetPos(1,6);LCD_Write_Data(0x30+(data/100000)%100%10);LCD_SetPos(1,7);LCD_Write_Data(0x30+(data/10000)%1000%100%10);LCD_SetPos(1,8);LCD_Write_Data(0x30+(data/1000)%10000%1000%100%10);LCD_SetPos(1,9);LCD_Write_Data(0x30+(data/100)%100000%10000%1000%100%10);LCD_SetPos(1,10);LCD_Write_Data(0x30+(data/10)%1000000%100000%10000%1000%100%10);LCD_SetPos(1,11);LCD_Write_Data(0x30+data%1
本文标题:基于FPGA的数字频率计--2012021750--陈嘉明
链接地址:https://www.777doc.com/doc-2569677 .html