1、南昌航空大学学士学位论文绪 论1.1 研究意义作为大型平板显示设备的一种,LED显示屏以其使用寿命长、维护费用低、功耗低等特点在显示领域占有重要的位置。特别在近年,带有红、绿、蓝三基色以及灰度显示效果的全彩LED显示屏,以其丰富多彩的显示效果而倍受业界关注,成为LED显示屏市场近年增长幅度比较大的产品。寿命、单位面积亮度、三基色的偏差程度、点距、对比度、灰度等级(包括灰度级数和线性度)、扫描频率等指标性能是衡量或横向比较大型显示设备好坏的标准。而这些指标性能的优劣,很大程度上决定于扫描控制器的性能。因此对大屏幕全彩LED显示扫描控制方法的研究有着重要的意义。随着显示屏尺寸的扩大、亮度要求的增加
2、,数据传输和控制的时间也会增加,如果仍然采用单片机作为控制器,将会影响显示效果,严重时可能无法正常工作,然而,这时若采用可编程逻辑器件作为控制器,则可解决这一难题。一方面,随着微电子技术的发展和生产工艺的提高,器件的性能大有很大的提高,出现了高性能的现场可编程逻辑器件(FPGA),FPGA具有处理速度高、可靠性高、高容量和集成度高等特点,在大屏幕显示系统设计中使用FPGA可以满足现在的LED大屏幕系统对于处理视频数据的高速要求,同时改善电路的性能,缩小系统的体积。设计中使用硬件描述语言进行电路设计,可以随时根据设计需要进行修改,而不必对硬件进行修改,它使系统的设计和调试非常方便,大大的缩短了产
3、品的开发周期,降低了开发成本,也方便以后的系统升级。1.2 研究现状LED照明发展非常迅速,年增长率超过60%,随着LED发光效率的不断提升,封装技术不断改进,驱动陆能和寿命的增加,LED照明技术在未来5年内会逐渐进入千家万户。在世界各国环保议题日渐重视的趋势下,LED照明产业将扮演极重要的角色,其主要应用在于室内、室外照明以及街灯等高功率产品。据悉,2009年全球照明市场约1219亿美元,LED仅占0.5%,显见其未来潜力之可观。其中,以亚太地区的市场规模为最大、约占全球33.7%之比例,居次为北美的30.1%和欧洲之27.4%。以应用产品来讨论,户外照明约占12%,则具有相当大的成长空间,
4、尤其以占有全球38%户外照明的中国市场为最。此外,值得关注的部分是受政府政策及推广影响较为直接且快速的街灯应用可望成为照明产业中快速成长的第一棒。预估在欧美优先领起的趋势中,2010年全球可达到450万盏LED街灯的水平,并且承于国际加紧节能减碳的脚步,一但路灯标准规格普及,中国市场可望占有世界50%以上的规模。LED驱动器技术的发展体现在两个方面:第一,离线式高功率因数校正可调光LED驱动器可替代卤素灯、白炽灯和荧光灯;第二,LED驱动器能高效替代低压卤素灯。以上两种应用需要为LED提供电能及热能保护,以增加其耐用性。其他发展趋势还包括优化驱动器以提供最佳功效,并非将电流最大化。基于FPGA
5、芯片控制全彩LED大屏幕图像显示系统系统设计随着数字技术的飞速发展,各种数字显示屏也随即涌现出来有LED、LCD、DLP等,各种数字大屏幕的控制系统多种多样,有用ARM+FPGA脱机控制系统,也有用PC+DVI接口解码芯片+FPGA芯片联机控制系统。尽管大尺寸液晶显示在未来的几年还有相当大的市场份额,但针对大尺寸直下式背光源的驱动和控制芯片的开发才刚刚有几年的历史。针对LED背光源的特点,可以将复杂的控制技术和信号处理技术融合到背光源技术中,目前的做法是采用FPGA,各家均有不同的算法和控制方法。随着背光技术和数字电视技术的发展,背光的控制算法及驱动方法的规范化,为了降低成本,将背光控制单元、
6、屏显控制和电视的机芯微处理器由一个微处理器统一实现将是一种技术趋势1314。 目前,美国和中国台湾地区逻辑电路设计和制造厂家大都以Verilog HDL为主,中国大陆地区目前学习使用Verilog HDL已经超过VHDL。从使用的角度看,对于集成电路(ASIC)设计人员来说,多是掌握verilog,因为在IC设计领域,90以上的公司都是采用verilog进行IC设计。而对于PLD/FPGA设计者而言,两种语言没有太大差别。1.3 研究内容本课题为基于Altera公司FPGA芯片的电子显示屏的研究,配备相应的PC机软件,可实现合拢、开帘、上下左右移动等显示形式,并可显示时钟。具体内容:1.FPG
7、A系统设计;2.显示接口电路的设计;3.时钟接口电路的设计;4. FPGA系统与PC机通讯接口(RS232)的设计。第二章 系统组成及工作原理2.1 系统组成本设计要求使用Altera公司的FPGA芯片完成32*16点阵式LED点阵显示屏的显示,配备相应的PC机软件,实现上位机与下位机的通信,下位机实现合拢、开帘、上下左右移动等显示形式,并可显示时钟。基于FPGA的LED点阵显示屏的系统框图如图2-1所示:时钟模块串口通信 点阵显示模块FPGA控制系统上位机图2.1 系统总体框图图2-1 系统总体框图FPGA控制模块控制时钟模块、点阵显示模块、上位机通信模块的协同工作,并分析、处理接收的数据。
8、时钟模块完成对时钟芯片的读写,包括时钟初始化和时钟信息读取,最终用数码管显示时钟。 点阵显示模块实现LED点阵的驱动和显示功能。驱动部分使用移位寄存器74HC595和移位寄存器 74HC164 组成,74HC595 负责列扫描数据,74HC164 负责行扫描数据。行扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。LED点阵是由8个大小为 32mm*32mm 的 8*8 共阳点阵组成32*16 点阵,可以显示两个汉字,点阵屏可拆装,采用圆孔铜排针,连接性能非常好。串口通信部分通过RS232串口实现。用户可以通过上位机软件发送待显示的数据给FPGA控制系统。2.2 工作原理 本设计的工作原理
9、为:采用FPGA为核心控制模块,通过接收上位机数据控制LED点阵显示信息。同时通过键盘来控制显示方式,并且在数码管上显示实时时钟。软件部分根据各芯片的时序图进行模块编程,消除了竞争和冒险。第三章 基于FPGA的LED点阵硬件设计3.1 方案论证与比较3.1.1 FPGA芯片选择当今主要设计和生产厂家有Xilinx、Altera、Lattice、Atmel等公司。其中Xilinx、Altera规模最大,市场占有率也最高。其中Altera更适合教学使用,对于初学者来说入门门槛比较低。同时,Altera公司给学习者提供很好的服务和支持。工艺方面,Xilinx和Altera生产的FPGA都是基于SRA
10、M的工艺的,需要在使用时外接一个片外存储以保存程序。上电时,FPGA将外部存储器中的数据读入片内RAM,完成配置后,进入工作状态;掉电后恢复为白片,内部逻辑消失。这样不仅能反复使用,还无需专门的FPGA编程器,只需通用的EPROM、PROM编程器即可。本设计采用较为普遍的Altera公司的EP2C8Q208C芯片。这块芯片不仅内部资源丰富,而且支持NIOS,无论在性价比还是将来进行功能拓展上都占据优势。3.1.2 串行通信模块输入接口模块提供PC上位机到FPGA核心板传输数据的接口。输入接口是通过串口即RS232以及JTAG下载线来实现从PC上位机传输数据至下位机。上位机使用字模提取工具将待显
11、示的数据发送至下位机, JTAG下载线实现PC和Nios系统间的通信。FPGA核心板与LED显示模块之间的通信也是通过RS232串口实现的。3.1.3 LED点阵屏及驱动电路本设计采用3216LED点阵屏由8块88LED点阵拼接而成,每一块点阵都有8行8 列,因此总共有16根行控制线和32根列控制线。方案一:在LED点阵驱动电路中,采用1片4线/16线译码器74HC154作为行驱动,选用2片74HC154占用15个FPGA的I/O口(包括两个enable端)。方案二:使用两个移位寄存器74HC595(带存储器) 和两个移位寄存器 74HC164 驱动16*16的点阵,74HC595 负责列扫描
12、数据,74HC164 负责行扫描数据。行扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。最终只需要制作两块同样的板子拼凑成32*16LED点阵。 方案比较及确定:首先,考虑占用I/O口数量,方案一使用了15个I/O口,而方案二只使用了5个。其次,考虑制作成本,一片74HC154大约四元,而74HC595和74HC164只需0.7元。再次,考虑软件编程,采用译码方式(方案一)驱动可以简化代码,而采用移位方式(方案二)驱动可拓展性更强。最后,考虑功耗,两种方案使用的是coms芯片功耗已经非常小。综合以上分析,本设计采用方案二,不仅大大的减少了I/O资源的占用,而且缩减了制作成本。3.1.4时
13、钟芯片DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM。同时,可以提供秒分时、日期、年月信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM指示决定采用24或12小时格式。 3.2 FPGA控制模块 该部分电路是系统控制和数据处理的核心,主要由电源接口及开关及相应的时钟振荡电路和复位电路组成。3.2.1 电源接口及开关电路图 3-1 电源接口及开关电路 如图3-1所示,其中F1为限流1.1A的F110保险管,在电源的保护上起到了很大的作用。3.2.2 复位电路如图3-2所示,该复位电路可以实现对系统的初始化作用。当没有按下时,KEY
14、读取到高电平。按下键时,KEY拉低。一次复位后产生一脉冲信号,下降沿时触发芯片复位。 图3-2 复位电路3.2.3 时钟振荡电路 如图3-3所示,X1为20MHz的有源晶振。 图3-3 时钟振荡电路3.3 串行通信电路串行通信电路由RS232串口电路和JTAG接口电路组成。RS232串口用于上位机与下位机的数据传输,JTAG接口用于程序下载与调试。3.3.1 RS232串口电路FPGA的电平为TTL电平(即:高电平 +3.3V,低电平 0V),而计算机串口电平为RS232电平(即:高电平 -12V,低电平 +12V),所以,计算机与单片机之间进行通讯时需要加电平转换芯片。RS232串口电路如图
15、3-4所示:图3-4 RS232串口电路图3-4中,RS232串口电路使用MAX232CPE作为电平转换芯片,通过串口线连接到计算机的COM口(9针D形口),用于FPGA与上位机通信以及和其他串口设备的数据交互。3.3.2 JTAG下载接口JTAG下载接口电路如图3-5所示,用于调试FPGA。JTAG下载不仅下载速度快,而且支持SignalTAP,但是,不能编程EPCS芯片,掉电后数据丢失。使用JTAG时需要配合USB Blaster进行下载调试。 图3-5 JTAG下载接口电路 图3-5 JTAG下载接口电路3.4 LED点阵及驱动电路 3.4.1 LED点阵点阵屏分为共阳和共阴两种,本设计
16、使用共阳型,如下图3-6所示。8*8点阵屏显示原理是利用行列导通其中的LED来控制64个LED的亮灭。使用4块8*8LED点阵屏就可以组成16*16的点阵屏,可以显示一个汉字。图3-6 8*8点阵原理 3.4.2 LED点阵驱动电路驱动部分使用两个带存储器的移位寄存器 74HC595和两个移位寄存器 74HC164 组成,74HC595负责列扫描数据,74HC164负责行扫描数据。列扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。主要IC (1)74HC595:硅结构的 CMOS 集成电路, 兼容低电压 TTL 电路。74HC595 是具有 8 位移位寄存器和一个存储器,三态输出功能。
17、如图3-7所示,移位寄存器和存储器是不同的时钟输入。数据在 SRCLK的上升沿移位,在 RCLK 的上升沿进入存储寄存器;异步复位端/SRCLK,低电平有效,电路中不使用复位端所以将此脚接VCC。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲,电路中,将两个时钟分开 图3-7引脚图 控制,目的是先移好位,再存储数据,这样在移位的过程中, 可以保持输出的数据。移位寄存器有一个串行移位输入(SER),和一个串行输出(QH),电路将其接入下一个 IC 的输入(SER)组成 16 位移位存储。移位寄存器有一个具备三态的总线并行 8 位输出,当给/G端送低电平时,存储寄存器的数据输出到总线
18、,电路中直接将此脚接 GND,表示直接输出。(2)74HC164 :74HC164 是简单的 8 位移位寄存器。 如图3-8所示:输入 A、B 在 SCK 时钟脉冲作用下移入寄存器。A、B 是两个输入端,电路将其合并成一个输入,移位寄存器的最后一位输出 QH 接入下一个 74HC164 的输入 AB,组成 16 位移位寄存器,每一位的输出经过三极管放大电流加到点阵共阳端,即作为点阵的行控制。图3-8 74HC164引脚图 (3)三极管8550 8550三极管是PNP型三极管,如图3-9所示,当74HC164发出低电平时,三极管Q导通,LED_H输出高电平。此时I/O口只需要提供几毫安的灌电流即
19、可控制其通断。图3-9 放大电路3.5 时钟模块时钟模块包括时钟芯片和时钟显示模块。3.5.1时钟芯片电路DS1302实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图3-10所示及内部结构如图3-11所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。图3-10 DS1302的外部引脚分配图3-11 DS1
20、302的内部结构1.各引脚的功能为: Vcc1:主电源;Vcc2:备份电源。当Vcc2Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2 Vcc1时,由Vcc1向DS1302供电。 SCLK:串行时钟,输入; I/O:三线接口时的双向数据线; CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。DS1302有下列几组寄存器:(1) DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h8Dh,写时80h8Ch),存放的数据格式为BCD码形式,如图3-12所示。
21、图3-12 DS1302有关日历、时间的寄存器 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。(2)DS1302
22、有关RAM的地址DS1302中附加31字节静态RAM的地址如图3-13所示。图3-13 静态RAM2.读写时序说明DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302的控制字如图3-14。图3-14 控制字(即地址及命令字节)控制字的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6:如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4A0):指示操作单元的地址;位0(最低有效位):如为0,表示要进行写操作,为1表示进行读操作。控制字
23、总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。数据读写时序如图3-15所示。图3-15 数据读写时序图3-15 数据读写时序3.RTC时钟电路图3-16 时钟电路3.5.2时钟显示电路 本设计主要采用六位独立的数码管分别显示时钟。电路如图3-16所示。数码管可分为共阳和共阴。本设计采用共阳数码管。每一个数码管通过一个9012三极管放大电流。9012为PNP型三极管,当SEL端出现低电平时,数码管被选通
24、。反之,当SEL拉高时,数码管不显示。图3-17 数码管显示 第四章 基于FPGA的LED点阵显示的软件设计4.1 Verilog HDL编程语言及编译器概述4.1.1 Verilog HDL语言综述FPGA的编程语言常用的有二种,一种是VHDL,一种是Verilog HDL。Verilog HDL是一种非常容易掌握的硬件描述语言,而VHDL语言是一个规模庞大的语言,在使用它之前完全学会它是很难的。Verilog是专门为复杂数字系统的设计仿真而开发的,本身就非常适合复杂数字逻辑电路和系统的仿真和综合。由于Verilog在其门级描述的底层,也就是在晶体管开关的描述方面比VHDL有更强的功能,所以
25、,即使是VHDL的设计环境,在底层实质上也是由Verilog HDL描述的器件库所支持的1。Verilog适合系统级(system)、算法级(alogrithem)、寄存器传输级(RTL)、逻辑级(logic)、门级(gata)、电路开关级(switch)设计,而SystemVerilog 是Verilog语言的扩展和延伸,更适用于可重用的可综合IP和可重用的验证用IP设计,以及特大型(千万门级以上)基于IP的系统级设计和验证。Verilog HDL作为一种高级的硬件描述编程语言,与C语言的风格有许多类似之处。其中有许多语句,如if语句、case语句和C语言中的对应语句十分相似。 4.1.2
26、Quartus II 软件综述 Altera公司的Quartus II设计软件提供了完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境。Quartus II软件含有FPGA和CPLD设计所有阶段的解决方案,如图4-1所示。图4-1 Quartus II设计流程Quartus II设计工具支持基于VHDL、Verilog HDL和图形的设计,其内部嵌有VHDL、Verilog HDL逻辑综合器。Quartus II 可以利用第三方的综合工具进行逻辑综合,也可以利用第三方的仿真工具(如Modelsim)进行仿真。此外Quartus II与MATLAB和D
27、SP Builder 结合,可以进行基于FPGA的DSP系统开发。使用Quartus II内嵌的SOPC Builder,配合Nios II IDE集成开发环境,可以开发Nios II嵌入式软核处理器2。4.1.3 ModelSim 仿真软件综述ModelSim由Mentor Graphics 公司的子公司Model Tech公司开发,是业界最优秀的HDL语言仿真器。它提供最友好的调试环境,是唯一的单内核支持VHDL和Verilog混合仿真的仿真器,是进行FPGA/SOPC设计的RTL级和门级电路仿真的首选。ModelSim最大的特点是其强大的调试功能,先进的数据流窗口,可以迅速地追踪到产生不
28、定或者错误状态的原因;性能分析工具帮助分析性能瓶颈,加速仿真;代码覆盖率检查确保测试的完备;多种模式的波形比较功能;可以实现与Matlab的Simulink的联合仿真。图4-2 系统软件总体模块结构4.2 系统软件总体结构4.3 LED点阵显示模块4.3.1 LED点阵显示驱动 LED点阵显示模块完成对行扫描和列选择。将16位的行数据移位进入74HC164的寄存器中,将32位的列数据移位进入74HC595中。当完成一行的扫描输出一个脉冲信号isdone。由于人眼暂留时间,只有当画面刷新频率大于50Hz时才不会出现闪烁现象。更新行数据最大周期Tmax=1/50/16=1.25ms。程序中利用计数
29、器cnt作为行移位标志,当计数器计数到19999时移位一次,T=(19999+1)/20000000=1ms,(系统使用20MHz晶振),所以本设计刷新周期为1ms。以下代码为LED显示模块的端口例化程序:module displ_led(input clk,input rst, input 15:0 row_data,input 31:0 data,output rclk,output sclk,output ser,output AB,output s_clk,output isdone); 图4-3 点阵显示驱动仿真波形 AB,s_clk用于驱动74HC164;ser,sclk,rclk
30、用于驱动74HC595。当输入 data=32h55_55_F0_0A、row_data=16b1111_1111_1111_1110时功能仿真波形如图4-3所示,相隔8个时钟周期ser更新一次数据,并且sclk产生一脉冲将列数据移位一次。移完所有32位数据时,rclk产生一脉冲信号将列数据锁存。同时isdone产生一脉冲用于与其他模块进行交互。4.3.2 行数据控制模块行数据控制模块主要实现控制显示的上下移位功能。以下程序为此模块的例化程序:module row_control(input clk,input rst,input key_up, input key_down,input ke
31、y_stop, output 15:0 row_data);其中,key_up表示上键标志信号,key_down表示下键标志信号,key_stop为停止移位标志信号,row_data为行数据输出。静态显示时,只要进行逐行扫描,第i位出现0时,则选通第i行。所以当按下停止键时,则直接输出16b1111_1111_1111_1110。当有其他键按下时则触发移位。移位时,首先启动计数器,当每计满9,999,999(即0.5s)时,行数据移位一次。如图4-4所示,仿真key_up键按下时,row_data每0.5s循环右移一次。图4-4 行数据控制仿真波形4.3.3 列数据控制模块 列数据控制模块主要
32、实现左右移动、开帘、合拢四种显示方式的控制。以下为模块的例化程序: module column_control(input clk,input rst,input key_left,input key_right,input key_stop,input 31:0 rdata,output 31:0 data); 其中,key_left表示左键标志信号,key_right表示右键标志信号,key_stop为停止移位标志信号,在没有读取到按键时显示方式为循环开帘和合拢。rdata为原列数据,data为移动后的列数据。移位速度为1/20s,如图4-5所示,当key_left键按下时,rdata=3
33、2h05_05_A0_A0,每0.05s循环移位一次。图4-5 列数据左移仿真波形4.4 按键模块 一位按键模块debounce如图4-6所示,模块包括电平检查模块和延迟模块。 图4-6 一位按键模块设计思路:(1)一旦检测到有按键按下(高电平到低电平变化),电平检查模块就会拉高 H2L_Sig电平,然后拉低。 (2)10ms延迟模块检测到H2L_Sig为高电平时,就会利用10ms过滤H2L_Sig,拉高 输出。 (3)当按键被释放时,电平检测模块会拉高L2H_Sig,然后拉低。 (4)10ms延迟模块检查到L2H_Sig为高电平时,就会利用10ms过滤H2L_Sig,然后拉低输出。 组合按键
34、则是组合五个独立按键模块,如图4-7所示。图4-7 组合按键模块 以下为五位组合按键模块的实例化程序:module key_interface( input CLK, input RSTn, input 4:0Key_In, output 4:0Key_Out);其中,五位Key_In输入连接至I/O端口,五位Key_Out主要传输给行列控制模块。4.5 串口通信模块4.5.1 串口接收模块 图4-8 串口接收模块 如图4-8所示,串口接收模块由电平检测模块、波特率定时模块和接收控制模块组成。 其中,detect_module模块的输入是连接至引脚rx,它主要检测一帧数据的第0位,也就是起始位
35、,然后产生一个高脉冲经 H2L_Sig 给 rx_control_module模块 ,以表示一帧数据接收工作已经开始。 rx_bps_module模块是产生波特率定时的功能模块。它是配置波特率的模块。当rx_control_module模块拉高Count_Sig, bps_module模块经BPS_CLK对rx_control_module模块产生定时。本设计使用9600bps传输速率。传输一位数据的周期是 0.000104166666666667s 。以20Mhz时钟频率要得到上述的定时需要设置的计数次数N: N = 0.000104166666666667 / ( 1 / 20Mhz )
36、= 2083如果从零开始算起 2083 - 1 亦即 2082 个计数。然而,采集数据要求“在周期的中间”,那么结果是 2082 / 2 ,结果等于 1041。基本上 rx_bps_module模块只有在 Count_Sig拉高的时候,模块才会开始计数。 rx_control_module模块是核心控制模块。针对串口的配置主要是1帧11位的数据,重视八位数据位,无视起始位、校验位和结束位。当RX_En_Sig拉高,这个模块就开始工作,它将采集来自RX_Pin_In的数据,当完成一帧数据接收的时候,就会产生一个高脉冲给 RX_Done_Sig。 4.5.2 串口接收接口模块RTL图如图4-9所示
37、。 图4-9 串口接收接口 此控制模块一开始就开启串口接收模块,当串口接收模块完成一次性的读取操作以后,就会反馈数据 RX_Data 和完成信号RX_Done_Sig。当串口接收顶层控制模块接收到串口接收模块反馈的完成信号,就会关闭串口接收模块。然后该控制模块就会将经RX_Data反馈回来的数据缓冲至FIFO模块。 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某
38、个指定的地址。FIFO的一些重要参数 FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它指的是FIFO一次读写操作的数据位。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存储多少个N位的数据(如果宽度为N)。如一个8位的FIFO,若深度为8,它可以存储8个8位的数据,深度为12 ,就可以存储12个8位的数据。 满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow)。 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成
39、无效数据的读出(underflow)。 读指针:指向下一个读出地址。读完后自动加1。 写指针:指向下一个要写入的地址的,写完自动加1。4.5.3 串口接收数据处理此模块处理串口接收的十六进制数据,取模之后作LED点阵的列驱动,接收的数据显示在0-9之间。以下是数据处理模块的端口实例化程序:module address (input CLK,input RSTn,input 7:0 FIFO_Write_Data ,output 15:0 write_data,input isdone); 其中,输入保存在FIFO中上位机发送的数据,上位机使用串口小助手发送数据,发送数据类型为十六进制,每次发送
40、8位数据位。isdone为行扫描更新标志位,由LED点阵驱动模块提供。write_data输出作为点阵列驱动。程序设计思路: (1)读取高四位,使用case语句判断BCD值,当接收到行扫完毕标志后(isdone),送显相应BCD值的列数据,循环逐行送显; (2)读取低四位,使用case语句判断BCD值,当接收到行扫完毕标志后(isdone),送显相应BCD值的列数据,循环逐行送显。 4.6 时钟模块 时钟模块主要实现读写时钟芯片DS1302和驱动数码管显示时钟。如图4-10所示,inter_face完成对时钟初始化和读取时钟以及作为smg模块与ds1302的接口。图4-10 时钟模块RTL图4
41、.6.1 读写时钟芯片 如图4-10所示,该模块由命令控制模块和函数模块组成。 图4-11 时钟芯片读写模块 _function模块端口实例化程序:module _function(input CLK,input RSTn,input 1:0 start,output done,input 7:0 addr,input 7:0 write_data,output 7:0 read_data,output rst,output sclk,inout SIO); 其中,两位的start为读写选择信号,当start1为1的时候进行写操作,当start0为1的时候进行读操作;addr为操作码;writ
42、e_data为待写数据;read_data保存了读取到的时钟数据;rst驱动DS1302复位引脚;sclk为DS1302的提供时钟信号;SIO为输入输出口,驱动DS1302数据端口。 编程思路:(1)根据start判断进行读操作还是写操作;(2)读操作或写操作都需要先发送一个字节操作码;(3) 读操作时,使SIO作为输入,依次读取DS1302输入的8位数据保存于read_data;(4)写操作时,使SIO作为输出口,依次发送write_data的八位数据;(5)操作完毕时向外界发送一脉冲信号done。control模块端口实例化程序:module control( input CLK, inp
43、ut RSTn, input 7:0 cmd, output done_sig, input 7:0 wrtime, output 7:0 rdtime, output 1:0 start, input done, output 7:0 addr, input 7:0 read_data, output 7:0 write_data ); 其中,cmd为8位命令;wrtime保存待写数据;rdtime保存读取的时钟;start控制_function模块读写操作选择;done为_function完成一次操作后的触发信号;done_sig完成一次时钟操作的标志信号;其他信号都是用于联络_function模块。Control模块主要实现对位命令的功能化,具体命令分