EDA 数字时钟

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

文章目录

  • 前言
  • 一、数字时钟是什么?
  • 二、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.实验效果

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

社交媒体图像识别与情感分析

社交媒体图像识别与情感分析是当前人工智能领域的一个研究热点。通过对社交媒体上大量的图像和文本数据进行深度学习和情感分析&#xff0c;可以提取出图像中的情感信息&#xff0c;从而为社交媒体用户提供更加个性化和精准的内容推荐和服务。 在社交媒体图像识别方面&#xff…

祝贺 年citation突破100

有好多年&#xff0c;写不出1篇论文了&#xff0c;也没有思路&#xff0c;觉得做的内容非常浅&#xff0c;一直忙于实际应用项目&#xff0c;偏技术突破。 2018出国访学后&#xff0c;重新看文献&#xff0c;整理思路&#xff0c;拓展思维&#xff0c;逐步写了几篇论文&#x…

Selenium自动化(上)

Selenium 安装 环境准备 第一种方式 Python 自带的 pip 工具安装。 pip install selenium4.12.0安装完成后&#xff0c;查看安装的 Selenium 版本号。 pip show selenium第二种方式 安装 Selenium 的前提是拥有 Python 开发环境&#xff08;推荐使用 PyCharm&#xff09;。…

外贸企业邮箱推荐:高抵达率的邮件解决方案

外贸邮箱用哪个企业邮箱邮件抵达率高&#xff1f; 在邮件到达率方面&#xff0c;Zoho Mail企业邮箱具有以下优势&#xff1a; 高效率的反垃圾邮件功能&#xff1a;Zoho Mail配备了前沿的反垃圾邮件过滤技术&#xff0c;能准确识别和拦截垃圾邮件&#xff0c;保证重要邮件能按时…

恢复图片?这4个方法别错过!

“我保存在电脑里的很多照片不知道是被误删了还是其他什么原因&#xff0c;莫名其妙就消失了。我应该通过什么方法找回这些丢失的图片呢&#xff1f;请大家帮帮我吧&#xff01;” 在这个信息时代&#xff0c;图片已经成为我们记录生活、分享经验、沟通交流的重要工具。有时候&…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中&#xff0c;有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块&#xff0c;但它的安装可能会因为各种原因而失败&#xff0c;导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

【算法题】连续字母长度(js)

我自己的解法: 难点就在于如何使其计算重复的值&#xff0c;以及最后一次结果别忘记添加进对象里。 function solution(str, index) {const arr str.split("");let currentChar arr[0];let time 1;const obj {};for (let i 1; i < arr.length; i) {if (arr[i…

国内大厂机器人赛道产品

大疆 大疆无人机自然不必说&#xff0c;除此之外大疆搞机甲大师&#xff0c;教育机器人。 字节 当前字节在机器人领域只是初步探索阶段&#xff0c;目前尚未发布相关产品&#xff08;截止至23.12&#xff09;。 管理层想法&#xff1a; 跟已有业务做结合&#xff0c;服务好…

附录:已实现的多品种回测收益

声明&#xff1a; 本人不进行任何投资建议&#xff0c;也不出售任何包括策略、算法的程序代码。 仅作为个人的2023年开发心路总结&#xff0c;有任何异议可以在评论区留言&#xff0c;可以讨论&#xff0c;如果你杠&#xff0c;那就是你对。 这世上有很多条路&#xff0c;每个…

5键键盘的输出 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 有一个特殊的 5键键盘&#xff0c;上面有 a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键。 a 键在屏幕上输出一个字母 a; ctrl-c 将当前选择的字母复制到剪贴板; ctrl-x 将当前选择的 字母复制到剪贴板&#xff0c;并清空选择…

科研试剂2913223-17-1激酶抑制剂 KWCN-41

KWCN-41 激酶抑制剂 2913223-17-1&#xff08;源自星戈瑞&#xff09; EFdA-TP 核苷逆转录酶抑制剂 950913-56-1 (RT) 3-O-Methylviridicatin TNF-α的抑制剂 6152-57-4 Zidebactam sodium salt β-内酰胺酶抑制剂 1706777-46-9 Triacsin C 酰基辅酶A合成酶抑制剂 76896-80…

JVM虚拟机:命令行查看JVM垃圾回收器的执行信息

在eclipse中打开命令行窗口 window->show view->Terminal 这样就打开了Terminal窗口&#xff0c;效果如下所示&#xff1a; java -XX:PrintCommandLineFlags -version 这个命令可以查看一些配置信息&#xff0c;其中最重要的配置信息就是&#xff0c;当前使用的G1回收器…

操作系统笔记——储存系统、文件系统(王道408)

文章目录 前言储存系统地址转换内存扩展覆盖交换 储存器分配——连续分配固定大小分区动态分区分配动态分区分配算法 储存器分配——非连续分配页式管理基本思想地址变换硬件快表&#xff08;TLB&#xff09;多级页表 段式管理段页式管理 虚拟储存器——基于交换的内存扩充技术…

期待已久:K8S终于迎来交换内存Beta支持!

关注【云原生百宝箱】公众号&#xff0c;获取更多云原生消息 Kubernetes 1.22 版本开始支持在 Linux 节点上使用交换内存的 Alpha 特性&#xff0c;而在 1.28 版本中升级为 Beta 版本并进行了许多改进。之前版本的 Kubernetes 不支持 Linux 系统上的交换内存&#xff0c;但随着…

中伟视界:AI算法+巡检机器人——闸刀开关状态实时精准识别技术助力智慧电网建设

随着智慧电网建设的不断深入&#xff0c;电力设备的安全和稳定运行变得尤为重要。而闸刀开关作为电网系统中的重要组成部分&#xff0c;其状态的实时监测和识别对于确保电力系统的正常运行至关重要。为了解决传统人工巡检效率低、准确性差等问题&#xff0c;近年来&#xff0c;…

PHP基础 - 数组遍历与排序

介绍 在PHP中,数组遍历和排序是常见的操作,用于对数组中的元素进行访问和排序 数组遍历 1)数值数组的遍历 使用 foreach 循环遍历数组:foreach 循环是最常用的遍历数组的方法,它可以遍历索引数组和关联数组。例如:$fruits = array("apple", "banana&q…

Mysql dumpling 导入导出sql文件

一&#xff1a;导出命令 mysqldump -u root -p saishi > saishi.sql mysqldump -u root -p saishi > saishi.sql root是用户名 saishi是数据库名 saishi.sql导出文件名 二&#xff1a;选择导入的数据库 cd到安装mysql的文件下&#xff08;找不到可以用&#xff1a;wh…

将数组的行列结构调整为m行、n列ndarray.reshape(m,n)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组的行列结构 调整为m行、n列 ndarray.reshape(m,n) 选择题 以下代码的输出结果为&#xff1f; import numpy as np arr np.array([[1,2,3],[4,5,6]]) print("【显示】arr\n"…

XML映射文件(第二种方式执行SQL语句)

第一种方式是注解的方式在下面&#xff1a; 注解操作SQL语句https://blog.csdn.net/m0_71149935/article/details/134908856?spm1001.2014.3001.5501 要想使用XML&#xff0c;需要遵守三项规范&#xff1a; XML映射文件的名称与Mapper接口名称一致&#xff0c;并且将XML映射…

深入学习Redis:从入门到实战

Redis快速入门 1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端1.4.1.R…