Skip to content

ZhiYi-R/DigitalCircuitCourseDesign_MultiFunctionalClock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

数字电子技术基础课程设计——多功能数字时钟

项目介绍

本项目来自于本人的数电课设:多功能数字时钟,设计要求如下:

  • 进行正常的时、分、秒计数
  • 利用按键实现“校时”“校分”功能:
    • 按下“校时”键时,计数器迅速递增,并按24小时循环
    • 按下“校分”键时,计数器迅速递增,并按60分钟循环
    • 按下“清零”键时,计时器全部清零
  • 利用扬声器做整点报时,报时五声
  • 实现闹时功能,可用:
    1. 预置固定的闹时时间的方法
    2. 利用输入数据随时设定闹时时间

以上要求均已实现,但存在以下已知问题:

  • 整点报时功能会额外输出一个系统时钟周期的高电平
  • 如果调节时间到第二天,大概率导致当天闹钟失效(原因见下方)

[!note] 关于闹钟失效的原因 本系统为了节省LUT,采用时钟输出直接比较的方法实现闹时功能,并通过时钟核心模块在23:59:59时输出的DayChanged信号来复位闹钟已响标识位。但调时跨天时,极大概率不会经过23:59:59,导致DayChanged信号无法生成,从而导致闹钟模块误以为闹钟已响,从而无法正常响铃。

项目结构

本项目由Verilog编写源码和Testbench,使用iVerilog作为仿真器,使用Python自动化编译和仿真过程,自动生成波形文件。

源码结构

源码结构如下:

├── hdl
├     ├── core
├     ├     ├── ClockCore.v
├     ├     ├── modules
├     ├     ├     ├── ClockDivider.v
├     ├     ├     ├── TimeCounter.v
├     ├── extensions
├     ├     ├── Alarm.v
├     ├     ├── Chime.v
├     ├── MultiFunctionalClock.v
├── tests
├     ├── Integration
├     ├     ├── TestBench_ClockCore.v
├     ├     ├── TestBench_MultiFunctionalClock.v
├     ├── Unit
├     ├     ├── TestBench_Alarm.v
├     ├     ├── TestBench_Chime.v
├     ├     ├── TestBench_ClockDivider.v
├     ├     ├── TestBench_TimeCounter.v
├     ├── RunTests.py

各个文件功能如下:

  • hdl/core/modules/ClockDivider.v: 时钟分频模块, 将输入时钟信号分频到输出时钟信号,这是一个参数化的模块,可以通过参数设置时钟分频的倍数。
  • hdl/core/modules/TimeCounter.v: 时间计数器模块, 实际上就是一个模N计数器,这是一个参数化的模块,可以通过参数设置计数器的模值。
  • hdl/core/ClockCore.v: 时钟核心模块, 包含时钟预分频和时、分、秒计数器,这也是一个参数化的模块,可以通过参数设置系统时钟频率以确保计时正确。
  • hdl/extensions/Alarm.v: 闹钟模块,包含一个每天都响一次的闹钟,可以通过外部输入配置闹钟时间, 带有一个StopAlarm输入用于停止闹钟。
  • hdl/extensions/Chime.v: 整点报时模块,包含一个五声报时功能,可以通过外部输入配置报时脉冲数。
  • hdl/MultiFunctionalClock.v: 多功能数字时钟的顶层模块,包含时钟核心模块、闹钟模块和整点报时模块,以及输入和蜂鸣器输出。
  • tests/RunTests.py: 测试脚本,用于自动编译和仿真指定Testbench,生成波形文件。
  • tests/Unit/TestBench_ClockDivider.v: 时钟分频模块的测试用例,测试时钟分频模块的参数设置和时钟输出。
  • tests/Unit/TestBench_TimeCounter.v: 时间计数器模块的测试用例,测试时间计数器模块的参数设置和计数输出。
  • tests/Unit/TestBench_Alarm.v: 闹钟模块的测试用例,测试闹钟模块的参数设置和闹钟输出。
  • tests/Unit/TestBench_Chime.v: 整点报时模块的测试用例,测试整点报时模块的参数设置和报时输出。
  • tests/Integration/TestBench_MultiFunctionalClock.v: 多功能数字时钟的测试用例,测试多功能数字时钟的参数设置和功能输出。
  • tests/Integration/TestBench_ClockCore.v: 时钟核心模块的测试用例,测试时钟核心模块的参数设置和计时输出。

About

Verilog实现的多功能数字时钟课设

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors