Menu Close

复杂数字钟设计(6)–模块组装及硬件调试(PRA006)

经过前面几个步骤的分析与设计,目前对于各个模块的抽象,封装以及各个模块之间接口与功能的划分已经非常清晰,把修改后的功能框图以及顶层的源代码重新呈现给大家。根据这两部分内容并结合PRA006/010硬件原理图组织硬件实验与调试。

digital clock verilog structure

 

 

图1

 

1.模块组装


 

2.开发板FII-PRA006/010资源的使用

    • 数码管,如图2

7 segment schematics

图2

  • 按键资源

button schematics

图3

  • 资源与FPGA管脚映射,如表1,
顶层module信号名 网络标号 FPGA管脚 开发板上的标识 FPGA管脚电平瞄准 端口说明
inclk C10_50MCLK 91 LVCMOS33 输入时钟
sw_in_p KEY3 11 PB0 LVCMOS33 按键(+)
sw_in_m KEY2 10 PB3 LVCMOS33 按键(-)
sw_in_l KEY0 3 PB1 LVCMOS33 按键左移
sw_in_r KEY1 7 PB2 LVCMOS33 按键右移
SEAT[5] SEG_3V3_D5 124 LVCMOS33 位选信号第5位
SEAT[4] SEG_3V3_D4 127 LVCMOS33 位选信号第4位
SEAT[3] SEG_3V3_D3 129 LVCMOS33 位选信号第3位
SEAT[2] SEG_3V3_D2 141 LVCMOS33 位选信号第2位
SEAT[1] SEG_3V3_D1 142 LVCMOS33 位选信号第1位
SEAT[0] SEG_3V3_D0 136 LVCMOS33 位选信号第0位
SEVEN_SEG[6] SEG_PG 135 LVCMOS33 段选信号第7位
SEVEN_SEG[5] SEG_PF 138 LVCMOS33 段选信号第6位
SEVEN_SEG[4] SEG_PE 126 LVCMOS33 段选信号第5位
SEVEN_SEG[3] SEG_PD 125 LVCMOS33 段选信号第4位
SEVEN_SEG[2] SEG_PC 133 LVCMOS33 段选信号第3位
SEVEN_SEG[1] SEG_PB 137 LVCMOS33 段选信号第2位
SEVEN_SEG[0] SEG_PA 132 LVCMOS33 段选信号第1位
DP SEG_DP 128 LVCMOS33 小数点
  • 在工程中锁定管脚

单击Quartus II 菜单–> Assignments–>Pin Planner,打开Pin Planner 界面,按照表1进行管脚锁定,锁定后的管脚位置、所属BANK,电平标准如图4,

图4

2. 重新编译complex_counter 工程并下载,调试。

注意:先进行基础功能调试,再测试边界条件。在设置和调整时应注意边界问题,如秒,分的手动校准范围不能超过59;小时的手动校准范围不能超过23;天的手动校准范围不能超过当前月份的最大值;月的手动校准范围不能超过12。

  • 调试步骤如下:
    • 观察秒计数是否正常,分是否进位。
    • 手动调节分到59,当秒进位时,观察分是否准确进位。
    • 调节小时到23,观察是否正确进位。
    • 调节月到1月,2月,3 月,4月;日分别调节到31,28,31,30观察是否日与月正确进位。
    • 调节其它月份与日,观察进位情况。并观察日、月是否同步。
  • 如发现设计缺陷,修复并重新测试。
  • 较时到当前时间,并保持运行

3. 修改文档,设计模块划分框图,及完整代码。

模块框图最终版本如图5所示:

digital clock verilog structure

图5

代码的修改主要在计数器模块的count和counter文件。与之前的工程相比较,更新后的工程在计数器模块添加了月份计数的反馈(月份输出反馈到日)。在添加月份反馈之后,校准月份,日期的进制也会自动随之改变。比如由1月校准到4月,日期也由31进制变成30进制。

修改后的count代码如下:


 

修改后的counter代码如下所示:


 

在修改完代码之后,重新编译,下载,重复上述调试步骤,观察实验现象。

 

作业:将上述复杂数字中的设计在PRX100-D上实现。

扩展设计:

  1.  添加年份计数及显示。
  2. 添加闰年计算,调整2月的天数。
  3. 添加蜂鸣器,实现整点报时(PRX100-D),蜂鸣器的使用请参照蜂鸣器实验。
Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章