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;//23'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;elseif(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;//23'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 endend 
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.mzph.cn/news/213474.shtml

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

相关文章

gRPC .net学习

学习helloworld server用.net client有.net的控制台 和 unity server端 直接使用vs2022创建(需自行看有无装asp.net哦),搜索gPRC,使用6.0吧&#xff0c;创建工程后直接F5跑起来,服务端到此完成 .net控制台client,创建新的控制台,使用NuGet,然后导入server端的Protos文件夹 学…

基于Jedis来探讨池化技术

为什么需要池化技术 系统运行时必然是需要数据库连接、线程等一些重量级对象&#xff0c;频繁的创建这种对象对性能有着不小的开销&#xff0c;所以为了减少没必要的创建和开销&#xff0c;我们就用到了池化技术。 通过创建一个资源池来保存这些资源便于后续的复用&#xff0c…

【C++初阶】七、内存管理(C/C++内存分布、C++内存管理方式、operator new / delete 函数、定位new表达式)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【C初阶】六、类和对象&#xff08;初始化列表、static成员、友元、内部类&#xff09;-CSDN博客 目录 一 . C/C内存分布 C/C中程序内存区域划分&#xff1a; 二 . C内存管理方式 …

16.Java程序设计-基于SSM框架的android餐厅在线点单系统App设计与实现

摘要&#xff1a; 本研究旨在设计并实现一款基于SSM框架的Android餐厅在线点单系统&#xff0c;致力于提升餐厅点餐流程的效率和用户体验。通过整合Android移动应用和SSM框架的优势&#xff0c;该系统涵盖了用户管理、菜单浏览与点单、订单管理、支付与结算等多个功能模块&…

用户登录权限

文章目录 [TOC](文章目录) 前言一、 Cookie与session1.HTTP无状态2.cookie 和 session 的生命周期2.1 cookie 生命周期影响因素2.2 session 生命周期影响因素 3.cookie 和 session 的区别4.工作原理3 用户登录Node.js和Express验证session 二、JSON Web Token1. JWT 介绍2. JWT…

C#使用Matrix类对Dicom图像的放缩

C#使用Matrix类对Dicom图像的放缩&#xff0c;使用Matrix 1.同时操作水平、垂直同时放缩 // 创建一个 Matrix 对象 Matrix m_Matrix new Matrix();//放缩参数 float inputZoom1.2f; m_Matrix.Scale(inputZoom, inputZoom, MatrixOrder.Append); 2.操作水平&#xff08;X轴…

前端使用插件预览pdf、docx、xlsx、pptx格式文件

PDF预览 H5页面pdf预览 插件&#xff1a;pdfh5 版本&#xff1a;“pdfh5”: “^1.4.7” npm install pdfh5 import PdfH5 from "pdfh5"; import "pdfh5/css/pdfh5.css";// methods this.$nextTick(() > {this.pdfH5 new PdfH5("#pdf", {pd…

【算法系列篇】递归、搜索和回溯(二)

文章目录 前言1. 两两交换链表中的节点1.1 题目要求1.2 做题思路1.3 代码实现 2. Pow(X,N)2.1 题目要求2.2 做题思路2.3 代码实现 3. 计算布尔二叉树的值3.1 题目要求3.2 做题思路3.3 代码实现 4. 求根节点到叶结点数字之和4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面为大…

计算机毕业设计springboot+ssm停车场车位预约系统java

管理员不可以注册账号 停车位包括车位所在楼层、车位编号、车位类型(全时间开放/高峰期开放)、预定状态等 用户预约时要求支付预约时间段的停车费用 违规行为&#xff1a;1.停车超过预约时间段 2.预约未使用 于系统的基本要求 &#xff08;1&#xff09;功能要求&am…

6G来袭,真的有必要吗?

6G来袭&#xff0c;6G标准将在2025年完成制定&#xff0c;2030年商用。当5G都还没玩明白的时候&#xff0c;6G又来了。 这次6G又提出了三个全新高大上场景&#xff0c;感知通信、人工智能通信、天地一体泛在物联&#xff0c;精英们还说&#xff0c;未来要连接很多机器人、元宇宙…

PHP基础 - 循环与条件语句

循环语句 1)for循环: 重复执行一个代码块指定的次数。 for ($i = 0; $i < 5; $i++) { // 初始化 $i 为 0,每次循环后将 $i 值增加 1,当 $i 小于 5 时执行循环echo "The number is: $i \n"; // 输出当前 $i 的值并换行 }// 循环输出结果为: // The number …

mysql字段设计规范:使用unsigned(无符号的)存储非负值

如果一个字段存储的是数值&#xff0c;并且是非负数&#xff0c;要设置为unsigned&#xff08;无符号的&#xff09;。 例如&#xff1a; 备注&#xff1a;对于类型是 FLOAT、 DOUBLE和 DECIMAL的&#xff0c;UNSIGNED属性已经废弃了&#xff0c;可能在mysql的未来某个版本去…

mysql分别在windows和linux下的备份策略

嗟乎&#xff01; 一、概述 mysql数据库该怎么备份呢&#xff1f; 数据库备份有几个概念&#xff1a;全量备份、增量备份、差异备份。当然啦&#xff0c;数据库备份又有冷备份和热备份&#xff0c;即物理备份和逻辑备份之分。冷备份就是将mysql停了&#xff0c;然后直接拷贝…

Python入门第2篇

pip包管理器 包管理器类似.NET下的nuget&#xff0c;主要用于管理引用依赖项。 安装Python的时候&#xff0c;已经默认安装了pip包管理器&#xff0c;因此无需单独安装 cmd&#xff0c;输入&#xff1a;pip --version 显示pip版本号信息&#xff0c;即代表pip安装成功&…

前端知识笔记(四十二)———http和https详细解析

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在计算机网络中传输超文本的协议。它是一个客户端-服务器协议&#xff0c;用于从 Web 服务器传输超文本到本地浏览器。HTTP 使用 TCP/IP 协议作为底层传输协议&#xff0c;并使用默认端口号80。 HTTPS&…

8-tornado中模板的使用(通过字符串返回、通过模板Template返回、通过模板render返回)、模板案例

1 Template 1.1 通过字符串返回 import tornado class IndexHandler(web.RequestHandler):def get(self):arg Templateself.finish(f<h1>Hello {arg}!!</h1>)1.2 通过模板Template返回 tornado.template 一个简单的模板系统&#xff0c;将模板编译为Python代码。…

c 一,二,三维数组的定义和赋值

1. 定义数组必须指定数组的大小&#xff0c;也就是用多少存储空间来存储此数组 2.定义数组必须用数组的标准格式定义&#xff1a;数组名下标的形式 3.只有字符串可以用指针来定义 4.可以把c 中一切数和struct 理解为char 数组 比如int 就是4字节的char数组 #include <…

编程语言的演进历程与未来发展趋势

第一代 编程语言的发展历程起源于早期的机器语言阶段&#xff0c;这是一种由二进制代码构成的计算机能够直接解读并执行的语言。然而&#xff0c;鉴于其过于复杂且难以理解&#xff0c;故这一时代的语言并不常为人类所采纳。 第二代 紧接着产生的第二代语言旨在简化编程过程…

1001 害死人不偿命的(3n+1)猜想

卡拉兹(Callatz)猜想&#xff1a; 对任何一个正整数 n&#xff0c;如果它是偶数&#xff0c;那么把它砍掉一半&#xff1b;如果它是奇数&#xff0c;那么把 (3n1) 砍掉一半。这样一直反复砍下去&#xff0c;最后一定在某一步得到 n1。卡拉兹在 1950 年的世界数学家大会上公布了…

C++ //习题2.5 请写出下列表达式的值。

C程序设计 &#xff08;第三版&#xff09; 谭浩强 习题2.5 习题2.5 请写出下列表达式的值。 (1) 3.5 * 3 2 * 7 - ‘a’ (2) 26 / 3 34 % 3 2.5 (3) 45 / 2 (int)3.14159 / 2 (4) a b (c a 6) 设a的初值为3 (5) a 3 * 5, a b 3 * 2 (6) (int)(a 6.5) % 2 …