【FPGA Modsim】数字时钟

实验题目:  数字时钟设计                                  

实验目的:  掌握数字时钟的工作原理;掌握使用数字逻辑设计集成开发环境分模块设计数字时钟的方法。                         

实验内容:

1、创建一个数字时钟工程,使用六位数码管实时显示时/分/秒。

3、时钟应具有稳定的计时功能,能够连续运行并准确显示时间。

实验步骤:

1、明确实验要求,确定系统功能,设计整体方案。

2、按照实现功能将数字时钟设计系统划分为时钟基准、显示驱动、按键控制等模块。

3、使用 Verilog HDL 编写各模块的逻辑代码。

4、在仿真环境中测试各模块的功能。

实验数据记录:

分模块写出编写的Verilog HDL源程序。

1、时钟顶层模块:

Module Clocktime(

    input  clk,   

    input rst_n,

    output [5:0] seconds,

    output  [5:0] minutes,

    output  [5:0] hours,

 output [7:0] seg,

    output [3:0] digit,

 output clk_base1

);

clk_base Uclk_base(

.clk(clk),

.rst_n(rst_n),

.clk_in(clk_base1)   //生成基准时钟

);

clock_generator Uclock_generator(     //根据基准时钟进行计数

.clk(clk_base1),

.rst_n(rst_n),

.seconds(seconds),

.minutes(minutes),

.hours(hours)

);

display_driver Udisplay_driver  (

.seconds(seconds),

.minutes(minutes),

.hours(hours),

.seg(seg),

.digit(digit)

);

endmodule

endmodule

2、显示驱动模块(Display Driver):

module display_driver (

    input wire [5:0] seconds,

    input wire [5:0] minutes,

    input wire [5:0] hours,

    output reg [7:0] seg,

    output reg [3:0] digit

);

always @(*) begin

    case ({hours, minutes, seconds})

        6'b000000: begin seg = 8'b11111100; digit = 4'b0000; end// 0

        6'b000001: begin seg = 8'b01100000; digit = 4'b0001; end// 1

        6'b000010: begin seg = 8'b11011011; digit = 4'b0010; end// 2

        6'b000011: begin seg = 8'b11110010; digit = 4'b0011; end// 3

        6'b000100: begin seg = 8'b01100111; digit = 4'b0100; end// 4

        6'b000101: begin seg = 8'b10110110; digit = 4'b0101; end// 5

        6'b000110: begin seg = 8'b10111111; digit = 4'b0110; end// 6

        6'b000111: begin seg = 8'b11100001; digit = 4'b0111; end// 7

        6'b001000: begin seg = 8'b11111111; digit = 4'b1000; end// 8

        6'b001001: begin seg = 8'b11110111; digit = 4'b1001; end// 9

        default: begin seg = 8'b00000000; digit = 4'b0000; end// Error

    endcase

end

Endmodule

3.时间基准模块

module clk_base

(

input clk,

input rst_n,

//分频后的时钟

output reg clk_in

//输出时钟

);

reg [25:0]ct ;

//时钟分频计数

//时钟分频,生成500KHz的测试时钟

always@(posedge clk or negedge rst_n) begin

if(rst_n== 1 'b0) begin

ct<= 0;

clk_in<= 0 ;

end

else begin

if(ct==26'd24999999) begin

ct<= 26'd0;

clk_in<=~clk_in;

 end

else

ct<=ct + 1'b1 ;

end

end

endmodule

4.时钟参考信号

module clock_generator (

    input wire clk,

    input wire rst_n,

    output reg [5:0] seconds,

    output reg [5:0] minutes,

    output reg [5:0] hours

);

always @(posedge clk or negedge rst_n) begin

    if (~rst_n) begin

        seconds <= 6'd0;

        minutes <= 6'd0;

        hours <= 6'd0;

    end else begin

        seconds <= seconds + 6'd1;

        if (seconds == 6'd60) begin // 一分钟的秒数

            seconds <= 6'd0;

            minutes <= minutes + 6'd1;

        end

        if (minutes == 6'd60) begin // 一小时的分钟数

            minutes <= 6'd0;

            hours <= hours + 6'd1;

        end

    end

end

Endmodule

  1. 测试文件

`timescale 1ns/ 1ps

module Clocktime_tb() ;

reg clk;

reg rst_n;

wire[7:0] seg;

wire[3:0] digit;

wire [5:0]  sec;

wire [5:0]  min;

wire [5:0]  hour;

wire clk_base1;

Clocktime u2(

.clk(clk),

.rst_n(rst_n),

.seg(seg),

.digit(digit),

.seconds(sec),

.minutes(min),

.hours(hour),

.clk_base1(clk_base1)

);

initial begin

clk=0 ;

rst_n=0 ;

#10 rst_n=1 ;

end

always #10 clk=~clk;

endmodule

仿真截图:

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

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

相关文章

【开发板资料】ESP32-S2-MINI-1开发板(源地工作室开发板)

最近买的开发板实在是太多了&#xff0c;一个一个盘算一下。 开发板为源地工作室售卖的源地ESP32-S2核心板&#xff0c;兼容ESP32-S2-DevKitM-1。 ESP32-S2-DevKitM-1 资料 引脚分布&#xff1a; 来源&#xff1a;ESP32-S2-DevKitM-1(U) - ESP32-S2 - — ESP-IDF Programmin…

第二百六十九回

文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容&#xff0c;本章回中将介绍国际化设置.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作&#xff0c;这样可以让不同国家的…

x-cmd pkg | nping - 网络测试工具

目录 简介用户首次快速实验指南灵活性和可定制性提供多种网络模式功能强大满足各类网络测试需求相关作品竞品进一步探索 简介 Nping 是一个网络测试工具&#xff0c;用于生成网络数据包、分析响应以及测量响应时间。Nping 允许用户生成各种协议的网络数据包&#xff0c;用户可…

MySQL 从零开始:06 数据检索

文章目录 1、数据准备2、限制结果3、完全限定名4、排序检索 所谓数据检索&#xff0c;就是前面所讲的”增删改查“的”查“。 注&#xff1a;本文使用的“行”指数据表中的“记录”&#xff0c;“列”指数据表中的“字段”。 在第四节《表的增删改查》中已经介绍了 select 查询…

kafka之java客户端实战

1. kafka的客户端 Kafka提供了两套客户端API&#xff0c;HighLevel API和LowLevel API。 HighLevel API封装了kafka的运行细节&#xff0c;使用起来比较简单&#xff0c;是企业开发过程中最常用的客户端API。 而LowLevel API则需要客户端自己管理Kafka的运行细节&#xff0c;Pa…

Vim一键配置指南,打造高效率C++开发环境

文章目录 前言安装与卸载功能演示gcc/g升级问题 前言 Vim作为当下最受欢迎的文本编译器之一&#xff0c;不仅具有强大的文本编辑功能&#xff0c;还提供了高度的可定制性。用户可以根据自己的喜好自定义配置&#xff0c;并且通过自己编写插件或者使用现有的插件来扩展Vim的功能…

Queue at the School-codeforces

题目链接&#xff1a;Problem - 266B - Codeforces 题目&#xff1a; 解题思路&#xff1a; 大概意思就是一个队伍里有男生女生&#xff0c;男生会不好意思排在女生前而跟后面的女生换位置&#xff0c;一个时间段里换过的男女生就不能再换了&#xff0c;下个时间段再继续判断…

vite和webpack的区别

1 构建原理 Webpack 是一个静态模块打包器&#xff0c;通过对项目中的 JavaScript、CSS、图片等文件进行分析&#xff0c;生成对应的静态资源&#xff0c;并且可以通过一些插件和加载器来实现各种功能。Webpack 的主要特点是支持各种复杂的构建场景&#xff0c;例如代码分割、…

自动化测试框架pytest系列之8个常用的装饰器函数

自动化测试框架pytest系列之基础概念介绍(一)-CSDN博客 自动化测试框架pytest系列之21个命令行参数介绍(二)-CSDN博客 自动化测试框架pytest系列之强大的fixture功能&#xff0c;为什么fixture强大&#xff1f;一文拆解它的功能参数。(三)-CSDN博客 接上文 3.5 pytest的8…

Elasticsearch:聊天机器人教程(二)

这是继上一篇文章 “Elasticsearch&#xff1a;聊天机器人教程&#xff08;一&#xff09;”的续篇。本教程的这一部分讨论聊天机器人实现中最有趣的方面&#xff0c;以帮助你理解它并对其进行自定义。 数据摄入 在此应用程序中&#xff0c;所有示例文档的摄取都是通过 flask …

C#判断输入的数字是否符合货币格式

目录 一、用正则表达式判断输入是否符合货币格式 二、用double.TryParse()判断输入是否符合货币格式 一、用正则表达式判断输入是否符合货币格式 // 判断输入是否货币合格 using System.Text.RegularExpressions; namespace IsCurrency_Format {partial class Program{stati…

Python进程池multiprocessing.Pool

环境&#xff1a; 鲲鹏920:192核心 内存&#xff1a;756G python&#xff1a;3.9 python单进程的耗时 在做单纯的cpu计算的场景&#xff0c;使用单进程核多进程的耗时做如下测试&#xff1a; 单进程情况下cpu的占用了如下&#xff0c;占用一半的核心数&#xff1a; 每一步…