veriloghdl数字设计实训教程第三章数字系统应用类实训项目.pptVIP

  • 1
  • 0
  • 约4.76千字
  • 约 50页
  • 2018-06-30 发布于四川
  • 举报

veriloghdl数字设计实训教程第三章数字系统应用类实训项目.ppt

veriloghdl数字设计实训教程第三章数字系统应用类实训项目

3.3 求最大公因数设计 2. 设计说明 图3-9 状态图转换模板 3.3 求最大公因数设计 2. 设计说明 图3-10求最大公约数的状态图(左)及化简后的状态图(右) 3.3 求最大公因数设计 3. 设计模块 图3-11 GCD模块端口框图 3.3 求最大公因数设计 3. 设计模块 使用4个模块实现: 模块U1为分频器,得到200Hz的频率,该频率用于U2、U3、U4等模块; 模块U2使用按键来设置参与运算的2个数据; 模块U3根据求最大公因数的算法,完成运算,并将结果转换成适宜在LCD上显示的数据; 模块U4实现将结果显示在液晶屏上。 3.3 求最大公因数设计 4. 代码说明 (1)在gcd_top模块中,可以看到调用了4个模块。模块divf_gcd为分频器,得到200Hz的频率,该频率用于key_gcd 、gcd 、lcd_gcd等模块;模块key_gcd实现求最大公因数的算法,完成运算,并将结果转换成适宜在LCD上显示的数据;模块lcd_gcd 实现将结果显示在液晶屏上。 (2)4个按键,仅用到了3个按键:2个运算数由键1和键2产生,每按一次键则使相应的运算数加1;键4则启动计算并得到计算结果。按键的处理以及使用,请参考key_gcd模块。 (3)动态数据在液晶上显示的方法,与多功能计算器中的方法类似,也由状态机来完成,请读者参照lcd_gcd模块的代码及其注释认真体会。 3.3 求最大公因数设计 5. 仿真分析 图3-12 gcd模块仿真波形图 3.3 求最大公因数设计 6. 硬件验证 图3-13 引脚锁定 3.3 求最大公因数设计 6. 扩展部分 请读者思考并实现以下扩展功能: (1)输入为0是一种异常情况,请读者在程序中添加“输入为0”的异常处理代码。 (2)尝试将输入的2个数扩展为99以内的整数,2个数仍由键1和键2产生,在液晶上的显示格式为“36G24=12”。 3.4 多功能数字钟设计 1. 设计要求 实现一个多功能数字钟(含跑表功能),如图3-14所示,具体要求如下: (1)计时功能:包括时、分、秒、百分秒的计时,可以实现一天以内精确至百分之一秒的计时,并将结果显示在液晶上。 (2)定时功能:可设定闹钟定时的小时和分钟值。 (3)校时功能:根据当前准确时间对小时、分钟能手动调整以校准时间。通过按键来修改小时、分钟值,完成对小时、分钟的校准。 (4)复位和暂停功能:这一功能是针对数字跑表的,数字钟不需要这个功能。 图3-14 多功能数字钟 3.4 多功能数字钟设计 2. 设计说明 设计将两个项目放在了一起,一个项目是数字钟,另一个项目是数字跑表,这两个项目针对不同的应用,因此设计要求也有所不同。 对于数字钟来说,需要计时、校时、闹钟等功能,针对计时功能,则要求实现括时、分、秒的计时,并且可以实现一天以内精确至1秒的计时。 对于跑表来说,需要复位清零、暂停等功能,针对计时功能,则要求实现分、秒、百分秒的计时,可以实现一小时以内精确至百分之一秒的计时。 本节仅完成设计要求中的前面3个。 3.4 多功能数字钟设计 3. 设计模块 图3-15 数字钟模块端口框图 3.4 多功能数字钟设计 3. 设计模块 4个模块的功能: 模块U1用于分频,得到100Hz和1kHz两个频率,分别为按键和液晶提供合适的工作频率; 模块U2产生工作模式以及得到时间信息、闹钟定时信息以及校时信息; 模块U3产生显示用的时、分、秒及百分秒信息; 模块U4用于实现液晶的显示控制。 3.4 多功能数字钟设计 4. 代码说明 (1)在digitalclock_top模块中调用了4个模块实现。模块divf_digitalclk用于分频,得到100Hz和1kHz两个频率,分别为按键和液晶提供合适的工作频率;模块key_digitalclk通过按键产生工作模式、设定闹钟定时、设定校准时间等,并得到时间信息、闹钟定时信息以及校时信息;模块digitalclock产生显示用的时、分、秒及百分秒信息;模块lcd_digitalclk用于实现液晶的显示控制。 (2)在key_digitalclk模块中,使用按键产生工作模式、设定闹钟定时、设定校准时间等,工作模式由变量mode来存储:mode=0,为计时模式;mode=1,为闹钟模式;mode=2,为校时模式。在校时模式下,设定校准时间后,需要将校准的小时和分钟信息传给计时用的小时和分钟,以同步更新,如“if(mode==2) hour_n=hour_adj;”“ if(mode==2) min_n=min_adj;”这两条语句所示。 (3)在数字钟

文档评论(0)

1亿VIP精品文档

相关文档