EDA 数字时钟

news2024/11/25 4:58:31

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、数字时钟是什么?
  • 二、EDA里面数码管的显示
    • 1.元件模型
    • 2.参考程序
    • 3. 实验仿真波形
    • 4.实验现象
    • 5. 仿真问题
  • 三、显示时钟
    • 1. 时钟电路模块
    • 2.参考程序
    • 3.仿真波形
    • 4.实验效果
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

前面学习了基本的数字芯片逻辑编程,学会了计数器等,这次来一个做一个综合应用。数字时钟,采用数码管显示时分秒。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数字时钟是什么?

数字时钟是一种以数字显示取代模拟表盘的钟表,它能够以数字的形式显示当前的时间,并且可以同时显示时、分、秒。此外,它通常具有对时、分、秒进行准确校准的功能。
示例:能用数码管显示 时分秒的时钟
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、EDA里面数码管的显示

目标:动态数码管显示: 12345678
时间显示的状态效:”12.20.30 12-20.30 12-20-30

1.元件模型

代码如下(示例):

在这里插入图片描述

2.参考程序

代码如下(示例):

module seg(clk,seg7,ledcom); 
input clk; // 假设系统提供的时钟 50Mhz
output[7:0] seg7; //段
output[7:0] ledcom; //位选
reg[7:0] seg7;  //alway 里面赋值要用reg数据
reg[20:0] cnt; 
reg[7:0] ledcom;
always@(posedge clk) 
begin 
 if(cnt==21'b1 1111 1111 1111 1111 1111) // 2的22减一
 cnt<=0; 
 else 
 cnt<=cnt+1; 
end 
always@(cnt) //给位选
begin 
 case(cnt[16:14])    // 14  15  16   000 ->111   前面13为 满进位
 3'b000:ledcom<=8'b00000001;//0   只有一个位选为1 只有第一位数码管选中并显示
 3'b001:ledcom<=8'b00000010;//1 
 3'b010:ledcom<=8'b00000100;//2 
 3'b011:ledcom<=8'b00001000;//3 
 3'b100:ledcom<=8'b00010000;//0 
 3'b101:ledcom<=8'b00100000;//1 
 3'b110:ledcom<=8'b01000000;//2 
 3'b111:ledcom<=8'b10000000;//3 
 endcase 
end 
always@(cnt) //段码
begin 
 case(cnt[16:14]) 
 3'b000:seg7<=8'b00000111;//0  同时给到段码 ,保证只有 第一个数码管亮 
 3'b001:seg7<=8'b11011011;//1 
 3'b010:seg7<=8'b11001111;//2
  3'b011:seg7<=8'b10100111;//3 
 3'b100:seg7<=8'b11101101;//0 
 3'b101:seg7<=8'b11111101;//1 
 3'b110:seg7<=8'b01000111;//2 
 3'b111:seg7<=8'b11111111;//3 
 endcase 
end 
endmodule

为了仿真改小了参数

module seg(clk,seg7,ledcom,cnt,en); 
input en;
input clk; // 假设系统提供的时钟 50Mhz
output[7:0] seg7; //段
output[7:0] ledcom; //位选
reg[7:0] seg7;  //alway 里面赋值要用reg数据
output reg[8:0] cnt; 
reg[7:0] ledcom;
always@(posedge clk) 
begin 
	if(!en)
	cnt<=0;
	else
		if(cnt==8'b111111111) // 2的22减一
		cnt<=0; 
		else 
		cnt<=cnt+1; 
end 
always@(cnt) //给位选
begin 
 case(cnt[7:5])    // 14  15  16   000 ->111   前面13为 满进位
 3'b000:ledcom<=8'b00000001;//0   只有一个位选为1 只有第一位数码管选中并显示
 3'b001:ledcom<=8'b00000010;//1 
 3'b010:ledcom<=8'b00000100;//2 
 3'b011:ledcom<=8'b00001000;//3 
 3'b100:ledcom<=8'b00010000;//0 
 3'b101:ledcom<=8'b00100000;//1 
 3'b110:ledcom<=8'b01000000;//2 
 3'b111:ledcom<=8'b10000000;//3 
  default:ledcom<=8'b10000000;
 endcase 
end 
always@(cnt) //段码
begin 
 case(cnt[7:5]) 
 3'b000:seg7<=8'b00000111;//0  同时给到段码 ,保证只有 第一个数码管亮 
 3'b001:seg7<=8'b11011011;//1 
 3'b010:seg7<=8'b11001111;//2
  3'b011:seg7<=8'b10100111;//3 
 3'b100:seg7<=8'b11101101;//0 
 3'b101:seg7<=8'b11111101;//1 
 3'b110:seg7<=8'b01000111;//2 
 3'b111:seg7<=8'b11111111;//3 
 default:seg7<=8'b11111111;
 endcase 
end 
endmodule

测试文件


`timescale 1 ps/ 1 ps
module seg_tb3();
// constants                                           
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
reg en;
// wires                                               
wire [8:0]  cnt;
wire [7:0]  ledcom;
wire [7:0]  seg7;

// assign statements (if any)                          
seg i1 (
// port map - connection between master ports and signals/registers   
	.clk(clk),
	.cnt(cnt),
	.en(en),
	.ledcom(ledcom),
	.seg7(seg7)
);
initial                                                
begin                                                  
// code that executes only once                        
// insert code here --> begin                          
                                                       
// --> end 
#10 clk= 0;
#100 en=0;
#10 en=1;                                           
$display("Running testbench");                       
end 

always #10 clk=~clk;                                                   
always                                                 
// optional sensitivity list                           
// @(event1 or event2 or .... eventn)                  
begin                                                  
// code executes for every event on sensitivity list   
// insert code here --> begin                          
                                                       
@eachvec;                                              
// --> end                                             
end                                                    
endmodule


实际仿真测试元件图

在这里插入图片描述

3. 实验仿真波形

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.实验现象

5. 仿真问题

在这里插入图片描述
在这里插入图片描述

三、显示时钟

1. 时钟电路模块

在这里插入图片描述

2.参考程序

module watch(clk,reset,seg_r,dig_r); 
input clk; 
input reset; 
output[7:0] seg_r; 
output[7:0] dig_r; 
reg[25:0] count; 
reg[15:0] hour; 
reg sec; 
reg[4:0] disp_dat; 
reg[7:0] seg_r; 
reg[7:0] dig_r; 
always @(posedge clk) 
begin 
 count = count + 1'b1; 
 if(count == 26'd25000000)
 begin 
 count = 26'd0; 
 sec = ~sec; 
 end 
end 
always @(posedge sec) 
begin 
if(reset==0) 
 hour[15:0]=0; 
 else 
 begin 
 hour[3:0] = hour[3:0]+1'b1; 
 if(hour[3:0] == 4'ha) 
 begin 
 hour[3:0] = 4'h0; 
 hour[7:4] = hour[7:4]+1'b1; 
 if(hour[7:4] == 4'h6) 
 begin 
 hour[7:4] = 4'h0; 
 hour[11:8] = hour[11:8] + 1'b1; 
 if(hour[11:8] ==4'ha) 
 begin 
 hour[11:8] = 4'h0; 
 hour[15:12] = hour[15:12] + 1'b1; 
 if(hour[15:12] == 4'h6) 
 hour[15:12] =4'h0; 
 end 
 end 
 end 
 end
 end 
always @(posedge clk) 
begin 
 case(count[17:15]) 
 3'd0:disp_dat = hour[3:0]; 
 3'd1:disp_dat = hour[7:4]; 
 3'd3:disp_dat = hour[11:8]; 
 3'd4:disp_dat = hour[15:12]; 
 endcase 
 case(count[17:15]) 
 3'd0:dig_r = 8'b10000000; 
 3'd1:dig_r = 8'b01000000; 
 3'd2:dig_r = 8'b00000000; 
 3'd3:dig_r = 8'b00010000; 
 3'd4:dig_r = 8'b00001000; 
 3'd5:dig_r = 8'b00000000; 
 3'd6:dig_r = 8'b00000000; 
 3'd7:dig_r = 8'b00000000; 
 endcase 
end 
always @(posedge clk) 
begin 
 case(disp_dat) 
0:seg_r=8'b01111111; 
 1:seg_r=8'b00000111; 
 2:seg_r=8'b11011011; 
 3:seg_r=8'b11001111; 
 4:seg_r=8'b10100111; 
 5:seg_r=8'b11101101;
 6:seg_r=8'b11111101; 
 7:seg_r=8'b01000111; 
 8:seg_r=8'b11111111; 
 9:seg_r=8'b11101111; 
default:seg_r = 8'hff; 
 endcase 
end 
endmodule

3.仿真波形

4.实验效果

总结

提示:这里对文章进行总结:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1301589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一些AG10K FPGA 调试的建议-Douglas

PLL AGM FPGA 在配置成功时&#xff0c;PLL 已经完成锁定&#xff0c;lock 信号已经变高&#xff1b;如果原设计中用 lock 信号输出实现系统 reset 的复位功能&#xff0c;就不能正确完成上电复位&#xff1b;同时&#xff0c;为了保证 PLL 相移的稳定&#xff0c;我们需要在 P…

Linux Component概述和高通component的使用

1 Linux为什么要引入Component框架&#xff1f; 为了让subsystem按照一定顺序初始化设备才提出来的。 subsystem中由很多设备模块&#xff0c;内核加载这些模块的时间不确定。子系统内有些模块是需要依赖其它模块先初始化才能进行自己初始化工作(例如v4l2 subdev和v4l2 video …

Java+Swing: 连接数据库并完成登录验证 整理10

1. 封装连接数据库的工具类 package com.utils;import java.sql.*;/*** Author&#xff1a;xiexu* Date&#xff1a;2023/12/11 10:13*/ // 连接数据库的工具类 public class DBUtil {private static final String URL "jdbc:mysql://localhost:3306/student_score?use…

GridBagLayout GridBagConstraints 笔记231130

实例化使用模板 GridBagLayout gbl new GridBagLayout(); // gbl.columnWidths new int[]{200,200,200}; // 用数组设置列 // gbl.rowHeights new int[]{100,100,100,100,100}; // 用数组设置行GridBagConstraints gbc new GridBagConstraints();/*** gridBagConstrain…

AMD 发布新芯片MI300,支持训练和运行大型语言模型

AMD 宣布推出 MI300 芯片&#xff0c;其 Ryzen 8040移动处理器将于2024年用于笔记本电脑。 AMD官方网站&#xff1a;AMD ׀ together we advance_AI AMD——美国半导体公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器&#xff08;CPU、GPU、主板芯片组、电…

剧本杀小程序系统开发,助力剧本杀市场创新发展

近年来&#xff0c;剧本杀发展速度非常快&#xff0c;短短几年内&#xff0c;就发展到了百亿元的市场规模&#xff01; 在互联网的发展下&#xff0c;剧本杀迎来了新的发展模式--线上剧本杀。线上剧本杀能够让玩家体验到智能化、趣味化的游戏乐趣&#xff0c;不受时间、地点限…

7+共病+PPI分析+转录调控,纯生信靠这个思路也能拿7+

今天给同学们分享一篇生信文章“Exploring the Pathogenesis of Psoriasis Complicated With Atherosclerosis via Microarray Data Analysis”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; 差异表达基因的鉴定 该研究的…

侯捷C++ (二--STL标准库)2

适配器 adapter 也可以叫做改造器&#xff0c;改造已经存在的东西 有&#xff1a;仿函数适配器、迭代器适配器、容器适配器 实现适配&#xff0c;可以使用继承、复合的两种方式实现。 共性&#xff1a;STL使用复合来实现适配 容器适配器 包括stack、queue&#xff0c;内含一…

MacOS 14.1 配置kerberos认证

MacOS 14.1 配置kerberos认证 MacOS 14.1 配置kerberos认证krb5.conf票据显示程序问题参考地址 MacOS 14.1 配置kerberos认证 原操作系统为 10.14.*&#xff0c;因安装别的软件失败&#xff0c;不想去找旧版本了&#xff0c;所以把OS直接升级到最新版的14.1啦&#xff0c;升级…

[MySQL] SQL优化之性能分析

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 1、索引是什么&#xff1a; 2、索引的数据结构&#xff1a; 3、索引种类&#xff1a; 4、sql分析&#xff08;回表查询&#xff09; 二、定位慢查询语句 1、慢查询日志 2、profile详情 3、…

嵌入式开发按怎样的路线学习较好?

嵌入式开发按怎样的路线学习较好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「嵌入式从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

一文读懂:GPU最强“辅助“HBM到底是什么?

各位ICT的小伙伴们大家好呀。 我是老猫。 今天我们聊聊GPU背后的女人&#xff0c;不对&#xff0c;是背后的大赢家-HBM。 那么&#xff0c;HBM究竟是什么呢&#xff1f;为何在AI时代如此火热&#xff1f;下面我们就一一道来。 ▉ HBM到底为何方神圣&#xff1f; HBM全称为H…

C++ Qt开发:如何使用信号与槽

在Qt中&#xff0c;信号与槽&#xff08;Signal and Slot&#xff09;是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制&#xff0c;它带来了许多优势&#xff0c;使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过QObject::connect函数完成。这样的机制使…

【LeetCode刷题-链表】-- 143.重排链表

143.重排链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ clas…

【JavaWeb笔记】单选框,结合Servlet

各个部分的作用 jsp部分 form action"..."&#xff1a;表单标签&#xff0c;供用户提交数据。内部的submit点击之后相当于是点action的URL input type"radio"&#xff1a;输入类型为单选框。把name设置为一样的&#xff0c;这样效果上就是单选&#xff…

【一周安全资讯1209】《网络安全事件报告管理办法》公开征求意见;IDC发布《大模型在网络安全领域的应用市场洞察报告》

要闻速览 1、国家互联网办公室《网络安全事件报告管理办法》公开征求意见 2、国家标准《信息安全技术 政务计算机终端核心配置规范》公开征求意见 3、IDC发布《大模型在网络安全领域的应用市场洞察报告》 4、赛迪顾问发布《2023中国私有云市场研究报告》 5、美国知名基因测试公…

C#泛型(详解)

前言 介绍C# 入门经典第8版书中的第12章《泛型》 一、泛型的含义 为引出泛型的概念&#xff0c;我们先来看看我们前面提到的 集合类https://blog.csdn.net/qq_71897293/article/details/134684612?spm1001.2014.3001.5501 这些集合是没有具体类型化的&#xff0c;所以…

电脑待机怎么设置?让你的电脑更加节能

在日常使用电脑的过程中&#xff0c;合理设置待机模式是一项省电且环保的好习惯。然而&#xff0c;许多用户对于如何设置电脑待机感到困扰。那么电脑待机怎么设置呢&#xff1f;本文将深入探讨三种常用的电脑待机设置方法&#xff0c;通过详细的步骤&#xff0c;帮助用户更好地…

想进阶JAVA高级程序员吗?多线程必学

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup

文章目录 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup151.1 背景信息151.2 前提条件151.3 语法151.4 示例151.5 从备份文件恢复数据 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup 151.1 …