《基于FPGA方向的大型屏幕显示系统设计毕业设计.doc》由会员分享,可在线阅读,更多相关《基于FPGA方向的大型屏幕显示系统设计毕业设计.doc(30页珍藏版)》请在三一办公上搜索。
1、摘 要主要研究基于Altera公司FPGA芯片的电子显示屏的研究,配备相应的PC机软件,可实现合拢、开帘、上下左右移动等显示形式,并可显示时钟。具体内容:1.FPGA系统设计;2.显示接口电路的设计;3.时钟接口电路的设计;4. FPGA系统与PC机通讯接口(RS232)的设计。FPGA控制模块控制时钟模块、点阵显示模块、上位机通信模块的协同工作,并分析、处理接收的数据。时钟模块完成对时钟芯片的读写,包括时钟初始化和时钟信息读取,最终用数码管显示时钟。点阵显示模块实现LED点阵的驱动和显示功能。驱动部分使用移位寄存器74HC595和移位寄存器 74HC164 组成,74HC595 负责列扫描数
2、据,74HC164 负责行扫描数据。行扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。LED点阵是由16个大小为 32mm*32mm 的8*8共阳点阵组成16*64 点阵,可以显示四个汉字,点阵屏可拆装,采用圆孔铜排针,连接性能非常好。串口通信部分通过RS232串口实现。用户可以通过上位机软件发送待显示的数据给FPGA控制系统。采用FPGA为核心控制模块,通过接收上位机数据控制LED点阵显示信息,同时通过键盘来控制显示方式,并且在数码管上显示实时时钟。软件部分根据各芯片的时序图进行模块编程,消除了竞争和冒险。通过编程、调试、仿真、下载正确地实现了合拢、开帘、上下左右移动等显示形式,其硬件
3、系统的实验验证也获得了与软件模拟仿真结论相吻合的结果。 关键词:FPGA控制模块,串行通信电路,LED点阵及驱动电路 ,时钟模块ABSTRACTThe main research based on Alteras FPGA chip electronic display, a PC equipped with the appropriate software, can be realized together and open the curtains, move around the display in the form, and can display the clock. Specif
4、ic content: 1.FPGA system design; 2 shows the design of the interface circuit; 3 clock interface circuit design; FPGA system and PC, the design of the communication interface (RS232). FPGA control module controls the clock module, dot matrix display module, the PC communication module to work togeth
5、er and to analyze and process the received data. The clock module clock chip to read and write, including clock initialization and clock information read the final clock with digital display. Dot-matrix display module LED dot matrix drive and display functions. Drive using a shift register 74HC595 s
6、hift register 74HC164 74HC595 is responsible for column scan data, the 74HC164 is responsible for the line scan data. Line scan using current transistor amplifier to increase the scanning strength, improve dot matrix screen brightness. LED dot matrix 16 size 32mm * 32mm 8 * 8 common anode dot matrix
7、 composed of 16 * 64 dot matrix, you can display four characters, dot matrix screen is removable, round hole copper pin connection performance good. Serial communications through the RS232 serial interface. Users can use the software to send data to be displayed to the the FPGA control systems. Usin
8、g FPGA as the core control module, LED dot matrix display is controlled by the host computer receives data through the keyboard at the same time to control the display and digital display real-time clock. Software are based in part on the timing diagram of each chip module programming, eliminating t
9、he competition and adventure.Programming, debugging, simulation, download the correct close, open curtain, move around the display in the form of the experimental verification of the hardware system is also consistent with the conclusions of software simulation results. Keywords: FPGA control module
10、, serial communication circuit, LED dot matrix drive circuit, clock module第1章 绪 论 1.1研究现状 LED照明就像是近年来高速发展的交通,迅速崛起,近几年来年增长率几近超过60%,而随着LED发光效率的不断提升,封装技术的不断改进,驱动能力和寿命的增加,LED照明技术在未来几年内会逐渐进入千家万户。随着世界各国环保议题逐渐重视,LED照明产业页将扮演愈来愈重要的角色,其主要产品是应用于室内、室外照明以及街灯等高功率产品。据悉,2009年全球照明市场约1219亿美元,而LED就占了其中的0.5%,可见其有一个很好的发
11、展前景。其中,又以亚太地区的市场规模最大,约占全球比例的33.7%,其次是北美和欧洲,分别占30.1%和27.4%。在应用产品中,户外照明约占总比重的12%,具有相当大的发展空间,而在此当中中国市场占据了全球市场的38%,成为户外照明中占有率最高的。此外,在受政府政策及推广影响下的街灯应用有望成为照明产业中成长最快的。在欧美优先领起的趋势下,2010年全球达到450万盏LED街灯的水平,并且伴随着国际加紧节能减碳的节奏,一旦路灯标准规格普及,中国市场有望突破占有世界50%以上的比例。LED驱动器技术的发展主要体现在两方面:一方面,日常生活中常用的卤素灯、白炽灯和荧光灯将被离线式高功率因数校正可
12、调光LED驱动器替代;另一方面,低压卤素灯也将被LED驱动器能高效替代。在为LED提供电能及热能保护的前提下,以增加其耐用性。当然,优化驱动器以提供最佳功效也成为一大发展趋势。随着数字技术的快速发展,基于FPGA芯片控制全彩LED大屏幕图像显示系统设计,各种数字显示屏也像雨后春笋随即涌现出来,像LCD、LED、DLP都是其中最典型的代表,而各种数字大屏幕的控制系统也多种多样,有用PC+DVI接口解码芯片+FPGA芯片联机控制系统的,也有用ARM+FPGA脱机控制系统的。尽管大尺寸液晶显示在未来的几年还有相当大的市场份额,但针对大尺寸直下式背光源的驱动和控制芯片的开发的历史并不悠久。针对LED背
13、光源的特点,可以将信号处理技术和复杂的控制技术融合到背光源技术中,目前的做法主要是采用FPGA,各厂家均有自家不同的控制方法和算法。随着数字电视技术和背光技术的发展,背光的控制方法及驱动方法越来越规范化,为了降低成本,将屏显控制、背光控制单元和电视的机芯微处理器由一个微处理器统一实现也将是一种技术发展的趋势。 如今,Verilog HDL设计成为中国台湾地区和美国逻辑电路设计和制造厂家的一大设计主流,而中国大陆地区目前学习使用Verilog HDL也已超过了VHDL。从使用的角度看,对于集成电路(ASIC)设计人员来说,更多的是掌握verilog,因为在IC设计领域,有90以上的公司采用ver
14、ilog进行IC设计。而对于PLD/FPGA设计者而言,两种语言区别不是很大。 1.2 研究意义 随着社会的快速发展,LED显示屏作为一种大型平板显示设备,以其功耗低、使用寿命长、维护费用低等特点在显示屏领域占据着非常重要的位置。特别是在近年,带有红、蓝、绿三基色以及灰度显示效果的全彩LED显示屏,以其丰富多彩的显示效果而倍受业界关注,成为LED显示屏市场近年增长幅度较大的产品之一。单位面积亮度、寿命、三基色的偏差程度、对比度、点距、灰度等级(包括灰度级数和线性度)、扫描频率等性能指标是衡量或横向比较大型显示设备优劣的标准。而这些性能指标的优劣,很大程度决定于扫描控制器的一个性能。因此对大屏幕
15、全彩LED显示扫描控制方法的研究有着重要的意义。随着显示亮度要求的增加、屏尺寸的扩大,数据传输和控制的时间也会增加,如果仍然采用简单的单片机作为控制器,将会影响画面显示的效果,严重时可能导致无法正常工作,然而,如果控制器采用可编程逻辑器件,则可解决这一难题。一方面,随着生产工艺的提高和微电子技术的发展,器件的性能会有很大的提高,从而出现了高性能的现场可编程逻辑器件(FPGA),FPGA具有处理速度高、高容量、可靠性高和集成度高等特点,在大屏幕显示系统设计中使用FPGA可以满足现在的LED大屏幕系统对于处理视频数据的高速要求,同时改善电路的性能,缩小系统的体积。设计中使用硬件描述语言进行电路设计
16、,可以随时根据设计需要进行修改,而不必对硬件进行修改,它使系统的设计和调试非常方便,不仅大大的缩短了产品的开发周期,降低了开发成本,也方便以后的系统升级。1.3 研究内容本课题为基于Altera公司FPGA芯片的电子显示屏的研究设计,并配备相应的PC机软件,从而实现开帘、合拢、上下、左右移动等多种显示形式,并可显示相应的时钟。具体内容为:1.FPGA整体系统的设计;2.时钟接口电路的设计;3.显示接口电路的设计; 4. FPGA系统与PC机通讯接口(RS232)的设计。第2章 系统组成及工作原理2.1 系统组成本设计要求使用Altera公司的FPGA芯片完成64*16点阵式LED点阵显示屏的显
17、示,配备相应的PC机软件,实现上位机与下位机的通信,下位机实现开帘、合拢、上下、左右移动等多种显示形式,并且能够显示时钟。基于FPGA的LED点阵显示屏的系统框图如下图2.1所示:时钟模块串口通信 点阵显示模块FPGA控制系统上位机图2.1 系统总体框图FPGA控制模块控制点阵显示模块、时钟模块及上位机通信模块的协同工作,并分析、处理接收相应的数据。时钟模块完成对时钟芯片的读写,包括对时钟的初始化和时钟信息的读取,并最终在数码管上显示出来。 点阵显示模块实现的是LED点阵的驱动及其显示功能。驱动部分使用移位寄存器74HC595和移位寄存器 74HC164 组成,74HC595 主要负责列扫描数
18、据,74HC164 主要负责行扫描数据。行扫描采用三极管进行电流放大,加大扫描强度,从而提高点阵屏亮度。LED点阵是由16个大小为 32mm*32mm 的 8*8 共阳点阵组成64*16 点阵,可以同时显示四个汉字或者八个字母,点阵屏可拆装,采用的是圆孔铜排针,连接性能非常好。串口通信部分通过RS232串口实现。用户可以通过上位机软件发送需要显示的数据给FPGA控制系统。2.2 工作原理 本设计的工作原理为:采用以FPGA为核心控制模块,通过接收上位机数据控制LED点阵显示系统。同时通过键盘来控制几种显示方式,并在数码管上显示实时时钟。软件部分根据各芯片的时序图进行相应的模块编程,从而消除竞争
19、和冒险。第3章 基于FPGA的LED点阵硬件设计3.1 方案论证与比较3.1.1 FPGA芯片选择当今FPGA芯片的主要设计和生产厂家有Altera、Atmel、Xilinx、Lattice等公司。其中以Xilinx、Altera公司规模最大,他们的市场占有率也是最高的。相对于Xilinx而言, Altera更适合于教学使用,因为对于初学者来说,他的入门门槛较低,学起来简单。更重要的是,Altera公司还给学习者提供很好的后续服务和支持。而在工艺方面,Xilinx公司和Altera公司生产的FPGA都是基于SRAM的工艺的,需要在使用时外接一个片外存储器用以保存程序。上电时,FPGA将外部存储
20、器中的数据读入片内RAM,完成配置后,进入正常工作状态;掉电后,恢复为白片,内部逻辑消失。这样的好处在于不仅能够反复使用,还不需要专门的FPGA编程器,只需通用的PROM、EPROM编程器即可。本设计采用较为普遍的Altera公司的EP2C8Q208C芯片。这块芯片不仅内部资源丰富,而且支持NIOS,无论在性价比还是将来进行功能拓展上都占据着绝对的优势。3.1.2 LED点阵屏及驱动电路本设计采用64*16LED点阵屏由16块8*8LED点阵拼接而成,每一块点阵都有8行8 列,因此总共有16根行控制线和64根列控制线。方案一:在LED点阵驱动电路中,采用1片4线/16线译码器74HC154作为
21、行驱动,选用4片74HC154占用15个FPGA的I/O口(包括两个enable端)。方案二:使用四个移位寄存器74HC595(带存储器) 和两个移位寄存器 74HC164 驱动16*16的点阵,74HC595 主要负责列扫描数据,而74HC164 主要负责行扫描数据。行扫描采用三极管放大电流,加大扫描强度,从而提高点阵屏亮度。最终只需要制作四块同样的板子拼凑成64*16LED点阵。方案比较及确定:首先,考虑I/O口数量的占用,方案一使用了15个I/O口,而方案二只使用了5个,相对而言方案二使用了更少的I/O口。其次,考虑软件编程,采用译码方式(方案一)驱动可以使代码简化,而采用移位方式(方案
22、二)驱动的可使他的拓展性更强。再次,考虑到一个制作成本,一片74HC154芯片大约四元,而一片74HC595芯片和74HC164芯片只需0.7元。最后,考虑功率损耗,两种方案使用的coms芯片功耗都非常小。所以,综上所得,本设计宜采用方案二,不仅能够大大的减少I/O资源的占用量,而且还能使制作成本缩减。3.1.3时钟芯片DALLAS公司推出的DS1302芯片是一种涓流充电的时钟芯片,内部含有31字节静态RAM和一个实时时钟/日历。同时,可以提供时分秒、日期、年月等信息,更重要的是,每月的天数和闰年的天数都可相应的自动调整。时钟操作可通过AM/PM指示决定是采用24小时制式还是采用12小时制式。
23、3.1.4 串行通信模块输入接口模块提供的是PC上位机到FPGA核心板传输数据的接口。输入接口通过RS232以及JTAG下载线来实现从PC上位机传输数据到下位机。上位机使用相应的字模提取工具,将下一步需要显示的数据发送至下位机,而PC和Nios系统间的通信是通过JTAG下载线来实现的。而RS232串口连接也实现了FPGA核心板与LED显示模块之间的通信。3.2 FPGA控制模块 FPGA控制模块的电路是系统控制和数据处理的核心,该部分电路主要由电源接口、开关、相应的时钟振荡电路和复位电路组成。3.2.1 电源接口及开关电路图 3.1 电源接口及开关电路 如图3.1所示,其中F1为限流1.1A的
24、F110保险管,主要目的在于保护电源。3.2.2 复位电路如图3.2所示,该复位电路主要实现的是对系统进行初始化。在没有按下按键的情况下,KEY读取到的是高电平。而在按下键之后,KEY拉低。整个过程当中,一次复位后产生一脉冲信号,触发芯片在下降沿时进行复位。 图3.2 复位电路3.2.3 时钟振荡电路 如图3.3所示,X1为20MHz的有源晶振。 图3.3 时钟振荡电路3.3 LED点阵及驱动电路 3.3.1 LED点阵点阵屏可分为共阳式点阵屏和共阴式点阵屏两种,本次毕业设计采用的是共阳型的点阵屏,如图3.4所示。8*8点阵屏显示的原理是利用其行列导通其中的LED进而控制64个LED的亮灭。使
25、用4块8*8LED点阵屏就可以组成一个16*16的点阵屏,它能够显示一个汉字或者是两个字母。图3.4 8*8点阵原理图 3.3.2 LED点阵驱动电路驱动部分使用四个带存储器的移位寄存器 74HC595和两个移位寄存器 74HC164 组成,74HC595负责列扫描数据,74HC164负责行扫描数据。列扫描采用三极管放大电流,加大扫描强度,提高点阵屏亮度。3.4 时钟模块时钟模块包括时钟芯片和时钟显示模块。3.4.1时钟芯片电路DS1302实时时钟可提供秒、分、时、日、星期、月和年等时间,如果一个月的天数小于31天时还可以进行自动调整,同时还具有闰年补偿功能。工作电压宽度为2.55.5V。采用
26、的是双电源供电,在有主电源的情况下还配备一个备用电源,用户可设置备用电源充电方式,以便提供对后背电源进行涓细电流充电。DS1302的外部引脚分配如图3.5所示,内部结构如图3.6所示。DS1302主要用于数据记录,特别是在对某些具有特殊意义的数据点的记录上,能够实现同步计时,因此测量系统中应用非常广泛。图3.5 DS1302的外部引脚分配图3.6 DS1302的内部结构3.4.2时钟显示电路本设计主要采用六位独立的数码管分别显示时钟。电路如图3.7所示。数码管可分为共阳极数码管和共阴极数码管。本次设计采用的是共阳极数码管。每一个数码管通过一个9012三极管进行电流放大。9012为PNP型三极管
27、,当SEL端出现低电平时,数码管被选通。反之,当SEL拉高时,数码管不显示。图3.7 数码管显示 3.5 串行通信电路串行通信电路由RS232串口电路和JTAG接口电路共同组成。RS232串口用于上位机与下位机的数据传输,而JTAG接口用于程序下载与调试。3.5.1 RS232串口电路FPGA的电平为TTL电平(即:高电平 +3.3V,低电平 0V),而计算机串口电平为RS232电平(即:高电平 -12V,低电平 +12V),所以,计算机与FPGA芯片之间进行通讯时需要加电平转换芯片。RS232串口电路如图3.8所示:图3.8 RS232串口电路图3.8中,RS232串口电路中使用MAX232
28、CPE作为电平转换芯片,通过串口线连接到计算机的COM口(9针D形口),用于FPGA与上位机通信以及和其他串口设备的数据交互。3.5.2 JTAG下载接口JTAG下载接口电路如下图3.9所示,用于调试FPGA。JTAG下载不仅下载速度快,而且支持SignalTAP,但是,不能编程EPCS芯片,掉电后会造成数据丢失。使用JTAG时需要配合USB Blaster进行下载调试。 图3.9 JTAG下载接口电路 图3-5 JTAG下载接口电路第4章 基于FPGA的LED点阵显示的软件设计4.1 Verilog HDL编程语言及编译器概述4.1.1 Verilog HDL语言综述常用的硬件描述语言有VH
29、DL、Verilog DHL和ABEL语言。常用的FPGA的编程语言有二种,一种是Verilog HDL,一种是VHDL。将Verilog HDL语言和VHDL语言进行对比,我们能够看到,Verilog HDL语言是一种非常容易掌握的硬件描述语言,较之而论VHDL语言则是一个规模庞大的语言,在使用它之前完全学会它是非常难的。Verilog是专门为复杂数字系统的设计仿真而开发的,本身就非常适合复杂数字逻辑电路和系统的仿真和综合。由于Verilog在其门级描述的底层,也就是在晶体管开关的描述方面比VHDL有更强的功能,所以,即使是VHDL的设计环境,在底层实质上也是由Verilog HDL描述的器
30、件库所支持的1。Verilog适合系统级(system)、算法级(alogrithem)、寄存器传输级(RTL)、逻辑级(logic)、门级(gata)、电路开关级(switch)设计,而SystemVerilog 是Verilog语言的扩展和延伸,更适用于可重用的可综合IP和可重用的验证用IP设计,以及特大型(千万门级以上)基于IP的系统级设计和验证。Verilog HDL作为一种高级的硬件描述编程语言,与C语言的风格有很多类似之处。其中有许多语句,如if语句、case语句和C语言中的相应语句都很相似。4.1.2 Quartus II 软件综述Altera公司的Quartus II设计软件提
31、供了完整的多平台设计环境,能够直接满足特定的设计需要,为可编程芯片系统(SOPC)提供全面的设计环境。Quartus II软件含有FPGA和CPLD设计所有阶段的解决方案,如图4.1所示。图4.1 Quartus II设计流程图Quartus II设计工具支持基于Verilog HDL、VHDL和图形的设计,其内部嵌有VHDL、Verilog HDL逻辑综合器。Quartus II 可以利用第三方的综合工具进行逻辑综合,当然也可以利用第三方的仿真工具(如Modelsim)进行仿真。此外Quartus II与MATLAB和DSP Builder 结合,可以进行基于FPGA的DSP系统开发。使用Q
32、uartus II内嵌的SOPC Builder,配合Nios II IDE集成开发环境,可以开发Nios II嵌入式软核处理器。4.1.3 ModelSim 仿真软件综述ModelSim由Mentor Graphics 公司的子公司Model Tech公司开发,是业界最优秀的Verilog HDL语言仿真器。它提供一个非常友好的调试环境,是唯一的单内核支持VHDL和Verilog混合仿真的仿真器,是进行FPGA/SOPC设计的RTL级和门级电路仿真的最佳首选。ModelSim最大的特点是其强大的调试功能,先进的数据流窗口,可以迅速地追踪到产生不定或者错误状态的原因;性能分析工具帮助分析性能瓶
33、颈,加速仿真;代码覆盖率检查确保测试的完备;多种模式的波形比较功能;可以实现与Matlab的Simulink的联合仿真。4.2 LED点阵显示模块4.2.1 LED点阵显示驱动 LED点阵显示模块完成对列选择和行扫描。将16位的行数据移位进入74HC164的寄存器中,将64位的列数据移位进入74HC595中。当完成一行的扫描输出一个脉冲信号isdone。由于人眼的暂留时间,只有当画面刷新频率大于50Hz时才不会出现闪烁现象。更新行数据最大周期Tmax=1/50/16=1.25ms。程序中利用计数器cnt作为行移位标志,当计数器计数到19999时移位一次,T=(19999+1)/20000000
34、=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);reg rAB; reg rs_clk;reg rrclk; reg rsclk;reg rser;reg risdone;reg 14:0 cnt;reg 3:0 C;always (posedge
35、clk or negedge rst)if(!rst)begin cnt=15d0; C=4d0; end else if(cnt=15d19_999) begin C=C+1b1;cnt=15d0; endelse cnt=cnt+1b1;reg 5:0 i;always (posedge clk or negedge rst)if(!rst) begin rAB=1b1;rs_clk=1b0; rrclk=1b0;rsclk=1b0; rser=1b0;i=6d0;risdone=1b0; endelse case(i)0:begin risdone=1b0; rAB=row_dataC;
36、 rs_clk=1b0; rrclk=1b0; rsclk=1b0; i=i+1b1; end 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32: if(cnt2:0=3d5)beginrsclk=1b1; i=i+1b1;endelsebegin rser=datai-1;rsclk=1b0;end33: beginrrclk=1b1;rs_clk=1b1; i=i+1b1; end34:begin if(cnt=15d0) begin risdone=1b1; i=6
37、d0;end else begin rrclk=1b0; rsclk=1b0; rs_clk=1b0; end endendcaseassign rclk=rrclk;assign sclk=rsclk;assign ser=rser;assign AB=rAB;assign s_clk=rs_clk;assign isdone=risdone;endmodule 图4.2 点阵显示驱动仿真波形 AB,s_clk用于驱动74HC164;ser,sclk,rclk用于驱动74HC595。当输入 data=32h55_55_F0_0A、row_data=16b1111_1111_1111_1110
38、时功能仿真波形如图4.2所示,相隔8个时钟周期ser更新一次数据,并且sclk产生一脉冲将列数据移位一次。移完所有64位数据时,rclk产生一脉冲信号将列数据锁存。同时isdone产生一脉冲用于与其他模块进行交互。4.2.2 行数据控制模块行数据控制模块主要实现控制显示的上下移位功能。以下程序为此模块的源程序:module row_control(input clk,input rst,input key_up, input key_down,input key_stop,/input 15:0 rdata,output 15:0 row_data);reg up_en; reg down_e
39、n;reg 15:0 rrow; always (posedge clk or negedge rst)if(!rst)beginup_en=1b0;down_en=1b0;endelse if(key_up)beginup_en=1b1; down_en=1b0;end else if(key_down) begin down_en=1b1; up_en=1b0; endelse if(key_stop)begin up_en=1b0; down_en=1b0;endreg 23:0 cnt0;reg 3:0 k;always (posedge clk or negedge rst)if(!
40、rst) begin cnt0=24d0;k=4d0;rrow=16b1111_1111_1111_1110; endelse if(down_en) begin if(cnt0=24d9_999_999)begin k=k+1b1; cnt0=24d0; end else begin cnt0=cnt0+1b1;case(k) 0:rrow=16b1111_1111_1111_1110; 1: rrow=16b1111_1111_1111_1101; 2:rrow=16b1111_1111_1111_1011;3: rrow=16b1111_1111_1111_0111;4: rrow=16
41、b1111_1111_1110_1111;5:rrow=16b1111_1111_1101_1111;6:rrow=16b1111_1111_1011_1111;7:rrow=16b1111_1111_0111_1111;8:rrow=16b1111_1110_1111_1111;9:rrow=16b1111_1101_1111_1111;10:rrow=16b1111_1011_1111_1111;11:rrow=16b1111_0111_1111_1111;12:rrow=16b1110_1111_1111_1111;13:rrow=16b1101_1111_1111_1111;14:rrow=16b1011_1111_1111_1111;15:rrow=16b0111_1111_1111_1111; endcase end endelse if(up_en) begin if(cnt0=24d9_999_999) begin k=k+1b1; cnt0=24d0; end else beg