基于fpga的led点阵显示屏的设计_学士学位论文(编辑修改稿)内容摘要:
出。 静态显示时,只要进行逐行扫描,第 i位出现‘ 0’时,则选通第 i行。 所以当按下停止键时,则直接输出 1639。 b1111_1111_1111_1110。 当有其他键按下时则触发移位。 移位时,首先启动计数器 ,当每计满 9, 999, 999(即)时,行数据移位一次。 如图 44所示,仿真 key_up键按下时, row_data每 循环右移一次。 列数据控制模块 列数据控制模块主要实现左右移动、开帘、合拢四种显示方式的控制。 以下为模块的例化程序: module column_control( input clk, input rst, 图 44 行数据控制仿真波形 南昌航空大学学士学位论文 18 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,如图 45所示,当 key_left键按下时, rdata=3239。 h05_05_A0_A0,每。 按键模块 一位按键模块 debounce如图 46所示,模块包括电平检查模块和延迟模块。 设计思路: ( 1)一旦检测到有按键按下(高电平到低电平变化),电平检查模块就会拉高 H2L_Sig电平,然后拉低。 ( 2) 10ms延迟模块检测到 H2L_Sig为高电平时,就会利用 10ms过滤 H2L_Sig,拉高 输出。 ( 3)当按键被释放时,电平检测模块会拉高 L2H_Sig,然后拉低。 图 45 列数据左移仿真波形 图 46 一位按键模块 南昌航空大学学士学位论文 19 ( 4) 10ms延迟模块检查到 L2H_Sig为高电平时, 就会利用 10ms过滤 H2L_Sig,然后拉低输出。 组合按键则是组合五个独立按键模块,如图 47 所示。 以下为五位组合按键模块的实例化程序: module key_interface ( input CLK, input RSTn, input [4:0]Key_In, output [4:0]Key_Out )。 其中,五位 Key_In 输入连接至 I/O 端口,五位 Key_Out 主要传输给行列控制模块。 图 47 组合按键模块 南昌航空大学学士学位论文 20 串口通信模块 串口接收 模块 如图 48所示,串口接收模块由电平检测模块、波特率定时模块和接收控制模块组成。 其中, detect_module模块的输入是连接至引脚 rx,它主要检测一帧数据的第 0位,也就是起始位,然后产生一个高脉冲经 H2L_Sig 给 rx_control_module模块 ,以表示一帧数据接收工作已经开始。 rx_bps_module模块是产生波特率定时的功能模块。 它是配置波特率的模块。 当 rx_control_module 模块拉高 Count_Sig, bps_module 模 块经 BPS_CLK 对rx_control_module模块产生定时。 本设计使用 9600bps传输速率。 传输一位数据的周期是。 以 20Mhz时钟频率要得到上述的定时需要设置的计数次数 N: N = / ( 1 / 20Mhz ) = 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。 图 48 串口接收模块 南昌航空大学学士学位论文 21 串口接收接口 模块 RTL图如图 49所示。 此 控制模块一开始就 开启 串口接收模块 ,当串口接收模块完成一次性的读取操作以后,就会反馈数据 RX_Data 和完成信号 RX_Done_Sig。 当串口接收顶层控制模块接收到串口接收模块反馈的完成信号,就会关闭串口接收模块。 然后该控制模块就会将经 RX_Data反馈回来的数据缓冲至 FIFO模块。 FIFO是英文 First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加 1完成,不能像普通存储 器那样可以由地址线决定读取或写入某个指定的地址。 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中读出数据而造成无效数据的读出( underflow)。 读指针:指向下一个读出地址。 读完后自动加 1。 写指针:指向下一个要写入的地址的,写完自动加 1。 图 49 串口接收接口 南昌航空大学学士学位论文 22 串口接收数据处理 此模块处理串口接收的十六进制数据,取模之后作 LED 点阵的列驱动,接收的数据显示在 09之间。 以下是数据处理模块的端口实例化程序: module address ( input CLK, input RSTn, input [7:0] FIFO_Write_Data , output [15:0] write_data, input isdone )。 其中,输入保存在 FIFO 中上位机发送的数据,上位机使用串口小助手发送数据,发送数据类型为十六进制,每次发送 8 位数据位。 isdone 为行扫描更新标志位,由LED 点阵驱动模块提供。 write_data 输出作为点阵列驱动。 程序设计思路: ( 1)读取高四位,使用 case 语句判 断 BCD 值,当接收到行扫完毕标志后( isdone),送显相应 BCD 值的列数据,循环逐行送显; ( 2)读取低四位,使用 case 语句判断 BCD 值,当接收到行扫完毕标志后( isdone),送显相应 BCD 值的列数据,循环逐行送显。 时钟模块 时钟模块主要实现读写时钟芯片 DS1302 和驱动数码管显示时钟。 如图 410所示,inter_face 完成对时钟初始化和读取时钟以及作为 smg 模块与 ds1302 的接口。 图 410 时钟模块 RTL 图 南昌航空大学学士学位论文 23 读写时钟芯片 如图 410所示,该模块由 命令控制模块和函数模块组成。 _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为读写选择信号,当 start[1]为‘ 1’的时候进行写操作,当start[0]为‘ 1’的时候进行读操作; addr为操作码; write_data为待写数据; read_data保存了读取到的时钟数据; rst驱动 DS1302复位引脚; sclk为 DS1302的提供时钟信号;SIO为输入输出口,驱动 DS1302数据端口。 编程思路: ( 1)根据 start判断进行读操作还是写操作 ; ( 2)读操作或写操作都需要先发送一个字节操作码; 图 411 时钟芯片读写模块 南昌航空大学学士学位论文 24 ( 3) 读操作时,使 SIO作为输入,依次读取 DS1302输入的 8位数据保存于 read_data; ( 4)写操作时,使 SIO作为输出口,依次发送 write_data的八位数据; ( 5)操作完毕时向外界发送一脉冲信号 done。 control模块端口实例化程序: module control( input CLK, input 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模块主要实现对位命令的功能化,具体命令分配如表 41所示。 Cmd[ 7..0 ] 位命令 功能 0110_0000 变更年寄存器 0101_0000 变更月寄存器 0100_0000 变更日寄存器 0011_0000 变更时寄存器 0010_0000 变更分寄存器 0001_0000 变更秒寄存器 南昌航空大学学士学位论文 25 0000_0110 读取年寄存器 0000_0101 读取月寄存器 0000_0100 读取日寄存器 0000_0011 读取时寄存器 0000_0010 读取分寄存器 0000_0001 读取秒寄存器 表 41 功能分配 编程思路: 根据输入的不同命令 cmd依据图 312所示进行分配不同的操作码至 _function模块。 同时根据前四位为零时进行的是读操作,所以置 start为 2’ b01。 反之,后四位全为零时进行写 操作,置 start为 2’ b10。 数码管显示模块 此模块用于在数码管上显示六位十六进制数。 程序端口实例化程序为: module smg( input CLK, input RSTn, input[23:0] data, output [7:0] smg_data, output [5:0] scan)。 其中, data为显。基于fpga的led点阵显示屏的设计_学士学位论文(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。