EDA技术及应用 课件 第8单元 综合设计_第1页
EDA技术及应用 课件 第8单元 综合设计_第2页
EDA技术及应用 课件 第8单元 综合设计_第3页
EDA技术及应用 课件 第8单元 综合设计_第4页
EDA技术及应用 课件 第8单元 综合设计_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

EDA技术及应用高等职业教育本科精品教材PART01单元1EDA概述PART02单元2VerilogHDL结构与要素PART03单元3VerilogHDL描述语句PART05单元5常用模块电路的VerilogHDL设计PART06单元6基础设计PART07单元7IP核的应用目录CONTENTSPART04单元4QuartusPrime设计基础PART08单元8综合设计PART08单元8综合设计8.1

DS18B20数字温度传感器设计8.2频率计设计8.3键盘扫描电路设计8.4液晶驱动电路设计8.5数字钟设计8.6函数信号发生器设计8.7数字电压表设计8.1DS18B20数字温度传感器设计8.1DS18B20数字温度传感器设计8.1.1设计原理DS18B20是一种用于数字温度测量的传感器,具有体积小巧、硬件成本低、抗干扰能力强以及测量精度高等特点。多样化的封装形式使其能够灵活适应各种狭小空间的设备,广泛应用于数字测温与控制领域。DS18B20的测温范围为-55℃~+125℃,并具备±0.5℃的高精度特性。该传感器采用单总线数字传输方式,能够直接将现场实时温度以数字信号的形式输出,显著提升了系统的抗干扰能力,适用于复杂环境下的温度监测需求。DS18B20支持通过简单的编程配置,实现9~12位的数字温度读数,用户可根据实际需求灵活调整分辨率和测量精度。此外,DS18B20的工作电压范围为3~5.5V,兼容性强,且提供多种封装形式,如TO-92、SOIC等,为系统设计提供了极大的灵活性和便利性。传感器内部集成的EEPROM存储器可存储用户设定的分辨率和报警温度,即使在掉电情况下,这些数据仍能完好保存,确保系统在重新启动后能够快速恢复工作状态。这些特性使得DS18B20在工业控制、环境监测、农业温控等领域具有广泛的应用价值。其内部结构框图如图81所示。8.1DS18B20数字温度传感器设计8.1DS18B20数字温度传感器设计DS18B20有两种供电方式:寄生电源供电和外部电源供电。寄生电源供电时DS18B20的GND和VDD引脚都接地,DS18B20从数据线DQ上汲取能量:在信号线处于高电平期间把能量存储在内部电容,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源供电。采用这种电路供电时,要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,否则会导致无法转换温度或者温度误差极大。寄生电源供电方式如图83所示。8.1DS18B20数字温度传感器设计在DS18B20的供电方式中,外部电源供电是一种稳定可靠且抗干扰能力强的供电方式,能够满足高精度温度监测的需求,同时支持多传感器扩展。在外部电源供电方式下,DS18B20的工作电源通过VDD引脚接入,由外部电源直接供电,不存在电源电流不足的问题;单总线可以挂接任意多个DS18B20传感器,满足多节点温度监测的需求;DS18B20的GND引脚必须可靠接地,不能悬空,否则将无法正常完成温度转换。外部电源供电方式如图84所示。8.1DS18B20数字温度传感器设计8.1.2程序设计FPGA控制DS18B20采集温度数据,并将温度数据转换成十进制数显示在数码管上。系统功能框图如图85所示。8.1DS18B20数字温度传感器设计程序中各模块端口及信号连接如图86所示。8.1DS18B20数字温度传感器设计FPGA顶层例化了两个模块:DS18B20驱动模块ds18b20_dri和数码管动态显示模块seg_led,实现各模块间信号的交互。DS18B20驱动模块搭建单总线通信协议与DS18B20进行通信,并控制DS18B20采集温度,进而对温度值进行处理与输出。数码管动态显示模块将采集到的温度值显示在数码管上。8.1DS18B20数字温度传感器设计DS18B20驱动模块的状态转移图如图87所示。8.1DS18B20数字温度传感器设计DS18B20驱动模块使用三段式状态机实现温度的读取,从图87可以看出每个状态实现的功能以及跳转到下一个状态的条件。首先初始化,初始化完成后,由于单总线上只有一个DS18B20,因此可以跳过DS18B20的身份识别,即发送跳过ROM命令,进入写字节状态;发送完该命令后发送温度转换命令进行温度转换,状态机再次进入写字节状态;写完温度转换命令后,为了兼容寄生电源供电,进入延时状态,延时结束后,进入初始化状态,初始化完成后发送跳过ROM命令,进入写字节状态;写完跳过ROM命令后,发送读取温度命令,从DS18B20中读取温度数据,读取完温度数据后,再次进入初始化状态,循环操作。8.1DS18B20数字温度传感器设计代码综合后的状态机如图88所示,与设计要求相符。8.2频率计设计8.2频率计设计8.2.1设计原理频率计的实现通常有以下几种方案:方案一:直接测频法。利用频率测量的定义,在确定的闸门时间内用计数器记录待测信号通过的周期数,从而计算出待测信号的频率。此方案对低频信号测量的精度很低,适合高频信号的测量。方案二:测周法。即以待测信号为门限,用计数器记录在此门限内的高频标准时钟脉冲数,从而确定待测信号的频率。当选定高频时钟脉冲而被测信号频率较低时可以获得很高的精度,而被测信号频率过高时由于测量时间过短,会出现精度不够的问题,因此适用于低频信号的测量。方案三:相关计数测频法(等精度测频法)。这种方法和测周法相似,不同的是测周法测量时间为被测信号的一个周期,不是固定值,测较高频率时测量时间过短,会导致精度不够;而等精度测频法的测量时间并不是被测信号的一个周期,而是人为设定的一段时间。闸门的开启和闭合由被测信号的上升沿控制,测量精度与被测信号频率无关,因此可以保证在整个测量频段内的测量精度保持不变。本设计采用方案三,即设计一个等精度频率计来测量频率。等精度测频法的测频时序如图89所示。由待测信号fx和预置门来控制精确门,预置门内的第一个fx的上升沿到来时精确门开启,预置门结束后的第一个fx的上升沿时刻,精确门关闭。在精确门内,分别对待测信号fx和标准脉冲fm计数,计数值分别为M和N,则被测频率fx=MN×fm。8.2频率计设计8.2频率计设计与直接测频法不同的是,计数器真正开始计数的时刻不是预置门的开始时刻,而是预置门打开后被测信号的第一个上升沿出发的精确门的开始时刻。对待测脉冲计数的计数器由待测信号上升沿控制,计数值M为整数,不存在计数误差。对频标信号计数的计数器,由于精确门的启闭时刻对频标信号来说是随机的,N为非整数,因此会存在±1的误差。系统的相对误差如式81所示。8.2频率计设计8.2.2程序设计本设计任务是将50MHz的时钟进行分频,产生500kHz频率的信号,作为被测时钟,再用Verilog编写的等精度测量模块测量被测时钟,并通过数码管显示。首先设计一个测试时钟模块用于生成被测的时钟,然后用等精度频率计模块测量被测时钟的频率,并将测得的时钟频率值送入数码管显示模块进行显示。系统的功能框图如图810所示。8.2频率计设计FPGA包括4个模块:顶层模块、等精度频率计模块、时钟产生模块以及数码管显示模块。顶层模块完成对其他3个模块的例化,实现各模块之间的数据交互。时钟产生模块产生被测时钟输出,并从外部接入至等精度频率计模块,以进行频率测量,然后将测量结果传输至数码管显示模块进行显示。顶层模块的原理图如图811所示。8.2频率计设计等精度测频时需要一个闸门信号(门控信号),并且该闸门信号需要同步到被测时钟域下,为了操作方便,用被测时钟控制闸门信号的产生,避免了同步化处理。门控时间由参数GATE_TIME设置,此处设为5000,该值越大测得的被测时钟频率值越精确,但测量时间也会相应变慢。因为闸门信号是由被测时钟产生的,所以当测量频率较高的信号或者信号频率大于10kHz时不会有问题;但在测量低频信号(如频率为几Hz)时,如果门控时间设置较大,测量时间会非常长。此时可将门控时间修改为被测时钟频率的5~10倍。对于几十kHz及以上的时钟信号,门控时间对测量速度的影响较小,且频率越高影响越小,但对测量精度影响较大,因此在测量频率较高的信号时,可以增大门控时间。代码中为了防止复位对测量造成的干扰,门控信号在复位后延迟了10个被测信号的周期。计算被测信号频率是在基准时钟下的门控信号为低电平时进行的。建立了门控信号之后,通过门控信号分别使能基准时钟和被测时钟的计数。因为门控信号对基准时钟而言是异步信号,所以对门控信号进行了两次打拍处理得到基准频率下的门控信号gate_fs。在门控信号的下降沿将计数值寄存并清零计数寄存器。在取得数值后,计算被测信号的频率值,由于在计算周期内数值已不再发生变化,而且保留了足够的计算时间,因此不用FIFO进行异步处理。计算之后,将结果赋给寄存器变量data_fx,单位为Hz。数码管显示部分内容参考例6.9。8.3键盘扫描电路设计8.3键盘扫描电路设计8.3.1设计原理1.单列式键盘键盘是数字系统中常见的输入装置,根据按键的排列方式分为单列式键盘和矩阵式键盘两种。单列式键盘的结构较为简单直观,它是将多个按键按照一定顺序依次排列在一条线路上,每个按键都有对应的引脚,通过这些引脚与外部电路连接,实现信号的传输和相应的操作功能。单列式键盘分为共地和共阳两种连接方式,如图812所示。8.3键盘扫描电路设计若带有4个按键的共地连接的单列式键盘与FPGA相连的数据端定义为data,端口可描述如下:8.3键盘扫描电路设计4个按键Key0、Key1、Key2、Key3的键值编码依次为0、1、2、3,则可采用以下代码获得键值,并用key存储。8.3键盘扫描电路设计2.矩阵式键盘矩阵式键盘采用行列交叉的结构形式。多个按键分布在这些行和列的交叉点上,通过扫描行线和列线的电平变化确定按键是否被按下。例如,常见的4×4矩阵式键盘,有4条行线和4条列线,总共可以放置16个按键,通过对行线输出电平信号,然后检测列线的电平变化,或者反之,就能准确判断是哪一个交叉点上的按键被按下。矩阵式键盘接口示意图如图813所示。8.3键盘扫描电路设计8.3键盘扫描电路设计可以采用逐行或逐列扫描查询法获得所按键的键值。这里给出用行信号进行扫描的基本原理和流程。矩阵式键盘与FPGA相连的引脚分别命名为keyrow[3:0]和keycol[3:0],其中keyrow[3:0]为行引脚,对应“行4行3行2行1”;keycol[3:0]为列引脚,对应“列4列3列2列1”。所谓行扫描,即逐行给出低电平,同时读取键盘列信号,低电平的行信号与低电平的列信号交叉点处的按键即为按下的按键。例如,当行扫描信号keyrow输出1011时,表示正在扫描行3,若此时读入的列信号keycol值为1111,则表示行3上没有按键被按下;若keycol为1101,列2为低电平,则表示行3与列2交叉处的按键9被按下,导致列2为低电平。列扫描就是逐列给出低电平,同时读取键盘行信号,低电平的列信号与低电平的行信号交叉点处的按键即为按下的按键。扫描信号也可以为高电平,以列扫描为例,keycol依次输出0001、0010、0100、1000,同时读取行信号,高电平的列信号与高电平的行信号交叉点处的按键即为被按下的按键。当列扫描信号keycol输出0010时,表示正在扫描列2,若此时读入的行信号keyrow值为0100,则表示列2与行3交叉处的按键9被按下,导致行3为高电平。若扫描信号采用低电平,则行扫描方式下的Verilog代码如下,由状态机输出行扫描信号。8.3键盘扫描电路设计8.3键盘扫描电路设计3.键盘消抖原理当按下或松开键盘上的按键时,从电路层面看,按键的机械结构特性会导致其产生抖动现象。按键内部通过金属簧片等结构实现接触导通,在按下瞬间,簧片并非立刻稳定接触,会在短时间内进行接触、断开、再接触这样的反复动作,松开按键时同样如此。这种抖动会导致电路中相应的电信号出现多次快速的高低电平变化,并非一次稳定的电平转换。例如,在一个单片机控制电路中,若连接了一个按键作为输入,原本希望按下按键时电平从高变低且保持稳定,但实际由于抖动,可能会在短时间内出现多个高低电平变化的脉冲信号,时间通常在5~10ms。如果不对这种抖动进行处理,控制电路就可能误判为多次按键按下操作,从而导致后续功能执行出现错误,例如按一次按键让LED灯亮,却因为抖动误判成多次按下按键,灯可能闪烁多次。按键抖动示意图如图814所示。因此在设计键盘扫描电路时,需要进行按键消抖,以获取波形稳定、长度合适的键盘反馈信号。由于按键抖动时间一般为5~10ms,因此可以采用延迟一段时间再采样的方法,以获得准确的按键值。按键消抖的流程如图815所示。其中x为重新采样的次数,可以根据具体情况确定。8.3键盘扫描电路设计8.3键盘扫描电路设计8.3.2设计实现以矩阵式键盘为例介绍键盘与FPGA的接口设计。FPGA与4×4矩阵式键盘的接口电路如图816所示。键盘的4条行线和4条列线分别与FPGA的I/O口相连。键值获取流程如图817所示。8.3键盘扫描电路设计8.3.2设计实现以矩阵式键盘为例介绍键盘与FPGA的接口设计。FPGA与4×4矩阵式键盘的接口电路如图816所示。键盘的4条行线和4条列线分别与FPGA的I/O口相连。键值获取流程如图817所示。8.3键盘扫描电路设计8.3.3综合仿真仿真波形如图818所示。clk为系统时钟,clk_scan为键盘扫描的时钟信号,clk_xd为消抖时钟信号,可以看出当输出的扫描信号为1011、键盘输入的信号为0111时,采集的键值为1011,即B号按键;当输出的扫描信号为0111、键盘输入的信号为0111时,采集的键值为1111,即F号按键;当输出的扫描信号为1110、键盘输入的信号为0111时,采集的键值为0011,即3号按键;当输出的扫描信号为1101、键盘输入的信号为0111时,采集的键值为0111,即7号按键。8.4液晶驱动电路设计8.4液晶驱动电路设计8.4.1设计原理1.液晶显示器工作原理液晶显示模块(LCDModule)是将液晶显示器件、连接件、控制与驱动等外围电路、PCB电路板、背光源、结构件等装配在一起构成的。其工作原理基于液晶材料的电光效应,并通过控制电路实现图像显示。液晶显示模块按功能可分为笔段式和点阵式。笔段式液晶显示模块由多个独立的线段或图形块组成,每个线段对应一个特定的显示内容,如数字、字母、符号。点阵式液晶显示模块由多行多列的像素点组成,通过控制每个点的亮灭组合形成字符、图形或图像点阵式液晶显示模块包含字符型点阵和图形型点阵两种。字符型点阵常见有16×2、20×4等格式,每行16/20个字符,共2/4行,每个字符由5×7或5×10点阵组成。图形型点阵的像素密度更高,如128×64、240×320,可显示任意图形或图像。下面以一款较为简单的字符点阵式LCM1602为例,介绍其驱动电路的VerilogHDL设计。LCM1602采用标准的16脚接口,各引脚情况见表81。显示屏能同时显示16×2个字符,字符类型有160种,包括常用的英文字母、日文字符、希腊字母以及各种标点符号,还能自行编写8个自定义符号,同时带有显示背光。8.4液晶驱动电路设计8.4液晶驱动电路设计从外部引脚可知,此LCM有8条数据线DB7~DB0,3条控制线E、R/W、RS,其中使能端E由高电平跳变到低电平时,液晶模块执行命令,R/W为读写控制信号,RS为寄存器选择信号。LCM1602的基本操作见表82。8.4液晶驱动电路设计每次对控制器进行读写操作之前,必须进行读写检测,确保液晶模块的忙标识BF为低电平,BF值由读状态命令获得,为状态字的最高位。LCM1602中的存储器有3种:CGROM、CGRAM、DDRAM。CGROM保存了厂家生产时固化在LCM1602中的160个不同的点阵字符图形,字符代码与字符图形的对应关系见表83,每个字符都有一个固定的代码,比如大写的英文字母A的代码是01000001,即0x41,显示时模块把0x41对应的点阵字符图形显示出来即为字母A。其中,绝大多数的字符代码和字符的ASCII码一致,例如字母和数字。8.4液晶驱动电路设计8.4液晶驱动电路设计8.4液晶驱动电路设计LCM1602内嵌了通用显示驱动芯片HD44780,共有11条指令,指令格式见表84。8.4液晶驱动电路设计各指令的功能如下:(1)清屏。将屏幕上的内容全部清除,同时把光标移到屏幕左上角DDRAM地址00H处,使屏幕处于初始空白状态。(2)光标复位。把光标移到屏幕左上角DDRAM地址00H处,但不改变屏幕上已有的内容。(3)输入方式设置。当I/D=1时,光标和显示内容整体向右移动;当I/D=0时,光标和显示内容整体向左移动。当S=1时,写操作后整屏显示内容向左或向右滚动;当S=0时,写操作后显示内容不滚动。(4)显示开关控制。D=1时,开启整体显示功能;D=0时,关闭显示功能,屏幕无显示内容。C=1时,显示光标;C=0时,不显示光标。B=1时,光标所在位置的字符会闪烁;B=0时,字符不闪烁。(5)光标移位。S/C=1时,移动显示内容,相当于整屏滚动;S/C=0时,移动光标位置。R/L=1时,向右移动,显示内容右移或光标右移;R/L=0时,向左移动,显示内容左移或光标左移。8.4液晶驱动电路设计S/C=1时,移动显示内容,相当于整屏滚动;S/C=0时,移动光标位置。R/L=1时,向右移动,显示内容右移或光标右移;R/L=0时,向左移动,显示内容左移或光标左移。(6)功能设置。DL=1时,数据总线为8位;DL=0时,数据总线为4位。N=1时,显示为两行;N=0时,显示为一行。F=1时,字符为5×10点阵;F=0时,字符为5×7点阵。(7)设置CGRAM地址。设置字符发生器RAM(CGRAM)的地址,后续对CGRAM的读写操作都基于此设定地址进行,用于自定义字符的存储和调用。(8)设置DDRAM地址。设置显示数据RAM(DDRAM)的地址,后续对DDRAM的读写操作就在此设定地址位置进行,用于控制显示字符在屏幕上的具体位置。(9)读忙标志及地址计数器。BF=1时,表示LCM1602正处于忙碌状态,不能接收新指令或数据;BF=0时,表示其处于空闲状态,可以接收指令和数据。地址计数器(AC)的值反映当前操作的地址位置,可用于了解当前操作在DDRAM或CGRAM中的地址情况。8.4液晶驱动电路设计CGRAM中的地址情况。(10)写DDRAM或CGRAM。向指定的显示数据RAM(DDRAM)或字符发生器RAM(CGRAM)地址写入数据,DDRAM写入用于显示字符,CGRAM写入用于自定义字符。(11)读DDRAM或CGRAM。从指定的显示数据RAM(DDRAM)或字符发生器RAM(CGRAM)地址读出数据,可用于获取已写入的显示字符数据或自定义字符数据。2.液晶模块的初始化液晶模块使用前必须进行初始化,即通过FPGA输入一组初始化命令,否则模块无法正常显示。液晶模块初始化流程如图819所示。8.4液晶驱动电路设计8.4液晶驱动电路设计8.4.2设计实现FPGA与液晶模块的接口电路如图820所示。其中,D0~D7为数据信号;R/W为读写控制信号,当R/W=1时为读操作,当R/W=0时为写操作;RS为数据/命令寄存器选择信号,为1时选择数据寄存器,为0时选择命令寄存器。8.5数字钟设计8.5数字钟设计数字钟是一种典型的数字系统,其设计与实现途径多样。从结构上看,数字钟主要由各类进制计数器组成,例如六十进制计数器用于实现秒与分的计数,十二进制或二十四进制计数器用于完成小时计数。在此基础上,搭配如时间校正电路、复位电路、报警电路等逻辑控制电路,便构成了具备实用价值的数字钟。时间校正电路方便用户对时间进行精准调整;复位电路可使数字钟恢复初始状态;报警电路则能在设定时刻发出提醒。8.5.1设计要求利用VerilogHDL设计一个数字钟,使其具有以下基本功能:(1)能够实现时、分、秒计时并以数字形式显示,时、分、秒各占2位。(2)小时为二十四进制,分和秒为六十进制。(3)能够通过按键调整时间和复位。(4)可以进行整点报时。(5)能够输出用6位数码管动态扫描显示的控制信息。8.5数字钟设计8.5.2设计方案数字钟是对标准的秒信号(1Hz)进行计数并显示的电路。数字钟系统组成框图如图822所示。8.5数字钟设计8.5.3设计实现1.秒计数模块秒计数模块外部接口电路如图823所示,其实质上是一个六十进制计数器。clk为秒计数模块的输入时钟信号,reset为复位端口,bcd1和bcd10分别为秒计数器的个位和十位BCD码输出端口,co为进位端,向分计数器提供计数脉冲。8.5数字钟设计2.分计数模块分计数模块和秒计数模块均为六十进制计数器,参考程序如秒计数模块。秒/分计数模块的仿真波形如图824所示。可以看出,当计数值到达59之后,再来一个时钟上升沿,计数器便从0重新开始计数,并且co输出一个上升沿,为分/小时计数器提供时钟脉冲。任何时刻,只要复位信号reset有效,计数器即归0。8.5数字钟设计3.小时计数模块小时计数模块实质上是一个二十四进制的计数器。clk为小时计数模块的脉冲输入端,reset为复位端口,bcd1和bcd10为小时计数器的个位和十位输出端口.小时计数模块的仿真波形如图825所示。可以看出,当计数值到达23之后,再来一个时钟的上升沿,便重新从0开始计数。8.5数字钟设计4.译码扫描显示模块根据系统显示的要求,本设计需要6个数码管。数码管一般分为共阴和共阳两种基本类型。显示方式一般分为静态显示和动态扫描显示。静态显示是指显示某一字符时,数码管的相应段恒定导通或截止。静态显示时,较小的驱动电流就可以获得较高的显示亮度,但每个数码管都需要一个七段译码器来驱动,这种方式占用的I/O资源比较多,因此在数码管较多时常采用动态扫描显示方式。动态扫描显示是指轮流点亮各个数码管。即将所有数码管的段输入信号连接在一起,通过位控信号选通其中一个数码管并把段数据写入,因此每一时刻只有一个数码管是点亮的。为了持续显示内容,必须对数码管进行扫描,即循环点亮各个数码管,基于人眼的视觉暂留及发光器件的余晖效应,人们便可在合适的扫描频率下看到多个数码管同时点亮。扫描显示模块接口电路如图826所示。其中clk为动态扫描信号,din0、din1、din2、din3、din4、din5分别为秒计数器、分计数器和小时计数器的个位与十位BCD码输入信号,sg为数码管的输出信号,bt为数码管的位控信号。8.5数字钟设计4.译码扫描显示模块根据系统显示的要求,本设计需要6个数码管。数码管一般分为共阴和共阳两种基本类型。显示方式一般分为静态显示和动态扫描显示。静态显示是指显示某一字符时,数码管的相应段恒定导通或截止。静态显示时,较小的驱动电流就可以获得较高的显示亮度,但每个数码管都需要一个七段译码器来驱动,这种方式占用的I/O资源比较多,因此在数码管较多时常采用动态扫描显示方式。动态扫描显示是指轮流点亮各个数码管。即将所有数码管的段输入信号连接在一起,通过位控信号选通其中一个数码管并把段数据写入,因此每一时刻只有一个数码管是点亮的。为了持续显示内容,必须对数码管进行扫描,即循环点亮各个数码管,基于人眼的视觉暂留及发光器件的余晖效应,人们便可在合适的扫描频率下看到多个数码管同时点亮。扫描显示模块接口电路如图826所示。其中clk为动态扫描信号,din0、din1、din2、din3、din4、din5分别为秒计数器、分计数器和小时计数器的个位与十位BCD码输入信号,sg为数码管的输出信号,bt为数码管的位控信号。8.5数字钟设计扫描显示模块的仿真波形如图827所示。可以看出,当动态扫描信号频率为1kHz时,若将时间设定为19

47

32,那么位控端口bt按111110→111101→111011→110111→101111→011111变化,段控端口sg依次输出“2”“3”“7”“4”“9”“1”的7段显示码,经过6个时钟信号后循环进行,所有的数码管都点亮。8.5数字钟设计5.校时模块由计数器的计数过程可知,正常计数时,当秒计数器计数到59时,再来一个脉冲,秒计数器清零,而进位信号作为分计数器的计数脉冲,使分计数器计数加1。若将秒进位脉冲和1Hz的秒脉冲信号通过一个2选1选择器,以sel选择输出信号,那么,当sel为高电平时,输出秒进位脉冲,那么数字钟正常计时;当sel为低电平时,输出1Hz的秒脉冲,那么分计数器就对1Hz的脉冲进行计数,由此构成分校时电路。小时校时电路的原理与分校时电路相同。校时模块接口电路如图828所示。8.5数字钟设计7.报时模块当时钟到达整点时,扬声器发出报警信号。该电路为一个与门电路,当分进位输出脉冲为高电平1时,扬声器响起。8.顶层模块设计将上述各底层模块按图830所示连接构成顶层模块,完成数字钟电路的设计。8.6函数信号发生器设计8.6函数信号发生器设计函数信号发生器能够产生多种波形的电信号(如正弦波、方波、三角波),还可以在一定范围内调节信号的频率、幅度以及相位等参数,为电子电路的测试、调试等工作提供所需的激励信号。函数信号发生器分为模拟式和数字式两种。模拟式函数信号发生器通常利用电容充放电等电子电路原理来产生不同波形。例如,对电容进行恒流充电和放电可以产生三角波,再经过比较器等电路转换就能得到方波,然后利用波形变换电路可从方波或三角波进一步生成正弦波等其他波形。数字式函数信号发生器一般是先将所需波形的离散数字样本存储在存储器中,然后按照设定的频率等参数,通过数模转换器将数字信号转换为模拟信号输出,进而产生各种波形。8.6.1设计要求设计一个函数信号发生器,能够以稳定的频率产生正弦波、三角波、锯齿波和方波,并能够通过按键选择输出4种不同种类的函数波形,同时具有系统复位功能。8.6函数信号发生器设计8.6.2设计方案函数信号发生器主要由两部分电路组成,即函数信号发生电路和函数信号选择电路。其中函数信号发生电路包括产生正弦波、三角波、锯齿波和方波的模块。函数信号发生器组成框图如图831所示。8.6函数信号发生器设计8.6.3设计实现1.正弦波产生模块正弦波可用图832所示电路产生,其中XHQ_Cout是LPM计数器(配置为8位加法计数器),XHQ_ROM是只读存储器。ROM中保存正弦波信号的数据,其地址由XHQ_Cout提供。在时钟信号的控制下,计数器输出q[7..0]在0000000~1111111范围内循环变化,使ROM输出周期性变化的正弦波形信号数据。因此,需要先设计计数器XHQ_Cout和只读存储器XHQ_ROM。8.6函数信号发生器设计(1)定制LPM计数器。新建工程后,选择菜单Tools→IPCatalog,在IPCatalog栏中输入LPM,双击选择Arithmetic分支下的LPM_COUNTER(计数器),如图833所示。8.6函数信号发生器设计在弹出的SaveIPVariation对话框中选择输出文件的类型并确定文件存储的路径及文件名,文件命名为XHQ_Cout,如图834所示。8.6函数信号发生器设计单击【OK】按钮,在图835所示的界面设置计数器的q输出位宽为8bits,时钟输入clock为上升沿(Uponly)有效。8.6函数信号发生器设计单击【Next】按钮,在图836所示的界面选择计数器类型为二进制(Plainbinary),其他输入/输出端口如时钟使能(ClockEnable)、计数使能(CountEnable)、进位输入(Carry-in)、进位输出(Carry-out)均不设置。8.6函数信号发生器设计单击【Next】按钮,在图837所示的界面为计数器添加同步或异步输入控制端,本例需要添加同步清零输入端。8.6函数信号发生器设计单击【Next】按钮,在图838所示的界面设置SimulationLibraries(仿真库)及Timingandresourceestimation(时序和资源估计)。使用生成的设计文件进行仿真时,需调用LPM宏功能仿真库中的相关模型来准确模拟计数器功能。勾选“Generatenetlist”可生成用于时序和资源估计的网表,且有助于了解计数器设计在目标FPGA芯片的资源占用情况(如逻辑单元数量),以及信号传播延迟等时序特性。注意,设计规模越大、系统速度越快,生成网表耗时可能越长。可使用第三方EDA综合工具对此网表进行设计优化,但不是所有第三方综合工具都支持该功能,可向工具供应商确认。8.6函数信号发生器设计8.6函数信号发生器设计单击【Next】按钮,弹出图839所示的界面。XHQ_Cout.v是Verilog语言编写的计数器功能实现文件,包含计数器的具体逻辑代码,是核心功能文件,建议勾选生成。XHQ_Cout.inc是AHDL包含文件,项目中使用AHDL语言且需要调用计数器相关功能时会用到,若项目不涉及AHDL,可不生成。XHQ_Cout.cmp是VHDL语言的组件声明文件,用于在VHDL项目中声明该计数器组件,若项目使用VHDL,建议生成,以便在其他VHDL模块中调用该计数器组件。XHQ_Cout.bsf是QuartusPrime的符号文件,生成后可在QuartusPrime图形编辑界面中以图形符号形式调用该计数器模块,方便进行图形化设计,若有图形化设计需求,建议生成。XHQ_Cout_inst.v是Verilog语言的实例化模板文件,为在其他Verilog代码中实例化该计数器模块提供模板,有助于快速编写和调用代码,建议生成。XHQ_Cout_bb.v是Verilog语言的黑盒文件,可在不暴露计数器内部逻辑细节的情况下进行模块调用,常用于需要保护知识产权或简化设计层次的情况,可按需生成。8.6函数信号发生器设计8.6函数信号发生器设计单击【Finish】按钮,完成8位加法计数器的定制。(2)建立存储器初值设定文件。为了将正弦波波形的数据装入ROM中,在定制ROM之前,应建立一个存储器初值设定文件。选择菜单File→New,在弹出的New对话框中选择MemoryFiles分支中的MemoryInitializationFile(存储器初值设定文件)。单击【OK】按钮,弹出图840所示的存储器参数设置对话框,输入存储器的字数(Numberofwords)为256,字长(Wordsize)为8。8.6函数信号发生器设计单击【OK】按钮,弹出图841所示的存储器初值设定文件界面。新建的存储器初值设定文件中的数据全部为0,将正弦波波形的数据加入该文件(可由MATLAB或C语言编程生成数据),并将该文件以.mif类型保存于工程文件夹中。8.6函数信号发生器设计(3)定制ROM存储器。选择菜单Tools→IPCatalog,在OnChipMemory中双击ROM:1-PORT,在弹出的对话框中输入存储路径及文件名XHQ_ROM。单击【OK】按钮,在弹出的存储器参数设置界面设置存储器的q输出位宽为8bits,字数为256words,采用单时钟控制方式,如图842所示。单击【Next】按钮,弹出存储器控制端设置界面,如图843所示。8.6函数信号发生器设计8.6函数信号发生器设计8.6函数信号发生器设计本例不用设置存储器控制端,直接单击【Next】按钮,弹出初始化数据文件设置界面,如图844所示。选中“Yes,usethisfileforthememorycontentdata”,可通过指定的文件(十六进制格式文件[.hex]或存储器初始化文件[.mif])初始化ROM内容。在Filename栏输入初始化数据文件名XHQ_Sin.mif。选中AllowIn-SystemMemory…,可使用在线系统存储器内容编辑器,能在系统运行时独立于系统时钟捕获和更新ROM内容,方便调试和动态修改数据。8.6函数信号发生器设计8.6函数信号发生器设计单击【Next】按钮,进入EDA配置界面,如图845所示。8.6函数信号发生器设计单击【Next】按钮,进入文件设置界面,如图846所示。单击【Finish】按钮,完成只读存储器的定制。8.6函数信号发生器设计(4)设计正弦波产生模块的顶层模块。在工程中新建一个BlockDiagram/SchematicFile文件,在编辑器中加入定制的计数器XHQ_Cout.bsf和只读存储器XHQ_ROM.bsf元件,再加入输入/输出端口CLK、CLR和Q[7..0],并按图832所示连线,保存为“XHQ_Sin.bdf”,即可完成正弦波产生模块的设计,如图847所示。8.6函数信号发生器设计2.三角波产生模块三角波在前半周期内线性递增到最大值,后半周期内线性递减到最小值,因此可用加法计数器和减法计数器实现。为了使其与前面设计的正弦波周期大致相同,前半周可用加2操作完成(从0加到254),而后半周可用减2操作完成(从255减到1)。3.锯齿波产生模块锯齿波在整个周期内呈线性递增,由最小值00000000到最大值11111111,相当于三角波的前半周,可用加1操作完成。4.方波产生模块方波的前后半周都是水平直线,输出分别为00000000和11111111。5.波形选择模块波形选择模块是一个简单的4选1数据选择电路.6.顶层模块顶层模块定义了智能函数信号发生器的输入、输出信号,并实例化正弦波发生器模块、三角波发生器模块、锯齿波发生器模块、方波发生器模块和函数信号选择模块.7.仿真代码设计为了验证智能函数信号发生器的功能是否正确,需要搭建仿真环境对设计模块电路进行测试,8.6函数信号发生器设计8.6.4仿真分析正弦波产生模块的仿真波形如图848所示,可以看出,在复位清零信号无效时,每个时钟周期从ROM中读出一个波形数据。8.6函数信号发生器设计通过逻辑分析仪SignalTapⅡ实际监测的XHQ_Sin波形如图849所示。可以看出,每256个时钟周期能够输出一个完整的正弦波形。8.6函数信号发生器设计图850、图851、图852分别为三角波、锯齿波和方波产生模块的仿真波形。可以看出,包括正弦波模块在内均能实现相应功能。8.6函数信号发生器设计图850、图851、图852分别为三角波、锯齿波和方波产生模块的仿真波形。可以看出,包括正弦波模块在内均能实现相应功能。8.6函数信号发生器设计波形选择模块的仿真波形如图853所示,可以看出,选择信号分别为01、00、10和11时,输出信号Q分别取输入信号D1、D0、D2和D3的值。使用上述4个波形产生模块和一个波形选择模块的例化元件,按照系统框图连接即可构建一个完整的函数信号发生器,函数信号发生器顶层电路图如图854所示,其中CLK和CLR分别为系统时钟信号和清零复位信号。8.6函数信号发生器设计8.6函数信号发生器设计如图855所示为函数信号发生器的仿真波形,可以看出,在复位信号无效的情况下,波形选择信号分别为0、1、2、3时,输出信号分别为正弦波、三角波、锯齿波和方波

温馨提示

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

评论

0/150

提交评论