1. 实验目的

(1). 秒表的显示时间分为 6 个十进制数字,从 00:00:00-59:59:99 循环计数

(2). 包含一个同步清零信号 reset;包含一个启动信号 go,开始或暂停计数;

(3). 对 N4 实验板 100MHZ 时钟源进行分频,每 0.01s 产生一个计数脉冲。

2. 实验内容

(1)原理描述

整个停表的工作流程是这样的:首先,stopwatch 模块会根据时钟信号 clk 和 go 信号的状态进行计时,每过 0.01 秒就会在 dv2、dv1 上加 1。然后,当 dv1 加到 9 时,会将 dv1 归零,并将 dv2 加 1,当 dv2 加到 9 时,会将 dv2 归零,并将秒数 sec1 加 1。以此类推,当 sec1 加到 9 时,会将 sec1 归零,并将 sec2 加 1,以此类推,当 sec2 加到 5 时,会将 sec2 归零,并将分钟数 min1 加 1。以此类推,当 min1 加到 9 时,会将 min1 归零,并将 min2 加 1。这样就实现了停表的计时功能。

同时,scan_seg_disp 模块会根据各位数字的值和段选信号来控制七段数码管的显示。

然后,在另一个时钟下升沿(posedge)的 always 块中,会根据 dv_tick 信号的状态来更新停表各位的数值。

详细文档

(2)Verilog HDL设计源代码描述(要求:注释)

`timescale 1ns / 1psmodule stopwatch_top(input clk,go,reset,output [7:0] an,output [7:0] sseg // seven segment digital tube);/*stopwatch模块是实现停表功能的核心,它接受三个输入信号:clk、go、reset。clk 是时钟信号,go 是启动/暂停信号,reset 是复位信号。stopwatch 模块输出六个信号:min2、min1、sec2、sec1、dv2、dv1,分别表示停表显示的分钟、秒、0.01 秒。*/wire [3:0] min2,min1,sec2,sec1,dv2,dv1;scan_seg_disp uut1(.clk(clk),.reset(reset),.hex5(min2),.hex4(min1),.hex3(sec2),.hex2(sec1),.hex1(dv2),.hex0(dv1),.dp_in(6'b101011),.an(an),.sseg(sseg));/*scan_seg_disp 模块是将停表的数字显示在七段数码管上的模块,它接受八个输入信号:hex5、hex4、hex3、hex2、hex1、hex0、dp_in 和 an,分别表示各位数字、小数点和段选信号。scan_seg_disp 模块输出一个信号:sseg,表示七段数码管的段码信号。*/stopwatch uut2(.clk(clk),.go(go),.reset(reset),.min2(min2),.min1(min1),.sec2(sec2),.sec1(sec1),.dv2(dv2),.dv1(dv1));endmodule//停表模块module stopwatch(input clk,go,reset,output [3:0] min2,min1,sec2,sec1,dv2,dv1 //分,秒,0.01 秒,电子停表的分度值 division value 为 0.01 秒);localparam COUNT = 1000000;//100Mhz 的频率,计数 10^6,为0.01sreg [19:0] dv_reg;//计时器,2^20=1024*1024>10^6reg [3:0] min2_reg,min1_reg,sec2_reg,sec1_reg,dv2_reg,dv1_reg;reg dp;wire dv_tick;//生成计数器 ms_reg,10M 的计数器,每 0.01 秒生成一个脉冲always@(posedge clk)beginif(reset)dv_reg <=0;else if(go == 1)beginif(dv_reg < COUNT)dv_reg <= dv_reg + 1;elsedv_reg <= 0;endendassign dv_tick = (dv_reg == COUNT) ? 1'b1: 1'b0;//每 0.01s 产生一个标志位always@(posedge clk) beginif(reset) beginmin2_reg <=4'b0000;min1_reg <=4'b0000;sec2_reg <=4'b0000;sec1_reg <=4'b0000;dv2_reg <=4'b0000;dv1_reg <=4'b0000;endelse if(dv_tick) beginif(dv1_reg!=4'd9)dv1_reg <= dv1_reg + 1;else begindv1_reg <= 4'd0;if(dv2_reg!=4'd9)dv2_reg <= dv2_reg + 1;else begindv2_reg <= 4'd0;if(sec1_reg!=4'd9)sec1_reg <= sec1_reg + 1;else beginsec1_reg <=4'd0;if(sec2_reg!=4'd5)sec2_reg <= sec2_reg + 1;else beginsec2_reg <= 4'd0;if(min1_reg!=4'd9)min1_reg <= min1_reg + 1;else beginmin1_reg <= 0;if(min2_reg!=4'd5)min2_reg <= min2_reg + 1;elsemin2_reg <= 0;endendendendendendendassign min2 = min2_reg;assign min1 = min1_reg;assign sec2 = sec2_reg;assign sec1 = sec1_reg;assign dv2 = dv2_reg;assign dv1 = dv1_reg;endmodule//数码管扫描模块module scan_seg_disp (input clk, reset,input [3:0] hex5,hex4,hex3, hex2, hex1,hex0,input [5:0] dp_in,output reg [7:0] an,output reg [7:0] sseg);localparam N=20;reg [N-1:0] cnt;reg [3:0] hex;reg dp;always @(posedge clk)beginif(reset) begincnt <= 0;hex <= 4'd10;endelsebegincnt <= cnt + 1;case (cnt[N-1:N-3])3'b000: beginhex <= hex0;an <= 8'b11111110;dp <= dp_in[0];end3'b001: beginhex <= hex1;an <= 8'b11111101;dp <= dp_in[1];end3'b010: beginhex <= hex2;an <= 8'b11111011;dp <= dp_in[2];end3'b011: beginhex <= hex3;an <= 8'b11110111;dp <= dp_in[3];end3'b100: beginhex <= hex4;an <= 8'b11101111;dp <= dp_in[4];end3'b101: beginhex <= hex5;an <= 8'b11011111;dp <= dp_in[5];enddefault: cnt <= 0;endcaseendendalways@ (*)begincase(hex)4'h0:sseg[6:0] = 7'b0000001;4'h1:sseg[6:0] = 7'b1001111;4'h2:sseg[6:0] = 7'b0010010;4'h3:sseg[6:0] = 7'b0000110;4'h4:sseg[6:0] = 7'b1001100;4'h5:sseg[6:0] = 7'b0100100;4'h6:sseg[6:0] = 7'b0100000;4'h7:sseg[6:0] = 7'b0001111;4'h8:sseg[6:0] = 7'b0000000;4'h9:sseg[6:0] = 7'b0000100;default: sseg[6:0] = 7'b0000001;endcasesseg[7]= dp;endendmodule

(3)TestBeach仿真代码及仿真结果

`timescale 1ns / 1psmodule stopwatch_tb;// Inputsreg clk;reg go;reg reset;// Outputswire [7:0] an;wire [7:0] sseg;// Instantiate the UUTstopwatch_top uut (.clk(clk),.go(go),.reset(reset),.an(an),.sseg(sseg));// Clock period definitionparameter CLK_PERIOD = 10;// Testbench logicalways begin#(CLK_PERIOD / 2) clk = 0;#(CLK_PERIOD / 2) clk = 1;endinitial beginreset = 1;go = 0;#5 reset = 0;#5 go = 1;#50 go = 0;#5 go = 1;#50 $finish;endendmodule

(4)XDC文件配置

set_property PACKAGE_PIN E3 [get_ports clk]set_property IOSTANDARD LVCMOS18 [get_ports clk]set_property IOSTANDARD LVCMOS18 [get_ports go]set_property IOSTANDARD LVCMOS18 [get_ports {an[7]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[6]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[5]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[4]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[3]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[2]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[1]}]set_property IOSTANDARD LVCMOS18 [get_ports {an[0]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[7]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[6]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[5]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[4]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[3]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[2]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[1]}]set_property IOSTANDARD LVCMOS18 [get_ports {sseg[0]}]set_property IOSTANDARD LVCMOS18 [get_ports reset]set_property PACKAGE_PIN J17 [get_ports {an[0]}]set_property PACKAGE_PIN J18 [get_ports {an[1]}]set_property PACKAGE_PIN T9 [get_ports {an[2]}]set_property PACKAGE_PIN J14 [get_ports {an[3]}]set_property PACKAGE_PIN P14 [get_ports {an[4]}]set_property PACKAGE_PIN T14 [get_ports {an[5]}]set_property PACKAGE_PIN K2 [get_ports {an[6]}]set_property PACKAGE_PIN U13 [get_ports {an[7]}]set_property PACKAGE_PIN L18 [get_ports {sseg[0]}]set_property PACKAGE_PIN T11 [get_ports {sseg[1]}]set_property PACKAGE_PIN P15 [get_ports {sseg[2]}]set_property PACKAGE_PIN K13 [get_ports {sseg[3]}]set_property PACKAGE_PIN N17 [get_ports reset]set_property PACKAGE_PIN J15 [get_ports go]set_property PACKAGE_PIN H15 [get_ports {sseg[7]}]set_property PACKAGE_PIN K16 [get_ports {sseg[4]}]set_property PACKAGE_PIN R10 [get_ports {sseg[5]}]set_property PACKAGE_PIN T10 [get_ports {sseg[6]}]

(5)下板测试

3.实验体会

使用verilog实现一个简单的秒表,对bcd加法与n4板,数码管的动态显示应用有了更加深入的了解

4.代码链接

秒表(vivado2022.2)

实验二 同步时序方式设计_秒表相关推荐

  1. 实验二《面向对象程序设计》_实验报告

    实验二<面向对象程序设计>_实验报告 一.实验前期预习准备 Junit的安装和配置 选择File->Setting打开设置对话框,在设置对话框中选择Plugins, 单击Instal ...

  2. 基础实验二:流水灯设计实现【硬件课程设计】

    基础实验二:流水灯设计实现[硬件课程设计] 前言 推荐 基础实验二:流水灯设计实现 1.实验内容 2.实验原理图设计 3.实验仿真与仿真结果 4.遇到的问题及解决办法 V0:首先设计了从中间向俩边&l ...

  3. 编译原理 实验二 简单计算器的设计与实现

    实验二 简单计算器的设计与实现  一.实验目的   综合运行词法分析器.语法分析器等原理实现一个具有加.乘功能的简单计算器,该计算器满足乘法优先级高于加法优先级,且仅处理非负整数. 二.实验内容    ...

  4. 实验二 数据选择器的设计与vivado集成开发环境【Verilog】

    实验二 数据选择器的设计与vivado集成开发环境[Verilog] 前言 实验二 数据选择器的设计与vivado集成开发环境 一.实验目的 二.实验环境 三.实验任务 四.实验原理 五.实验步骤 六 ...

  5. 太空战机c语言实验报告,c语言课程设计_太空战机提高篇.doc

    c语言课程设计_太空战机提高篇 C语言课程设计--太空战机 一.游戏介绍 太空战机是玩家用键盘控制战机移动并发射子弹,消灭敌方的战机.敌方战机从右到左移动,同时上下浮动.同时隔一定的时间发射子弹,我方 ...

  6. 信息安全密码学实验二:序列密码的设计与实现

    序列密码的设计与实现 一.实验目的 理解线性反馈移位寄存器的基本构造,编程实现一个简单的线性反馈移位寄存器并用输出序列对给定明文实施逐比特加密. 二.实验原理 给定前一状态的输出,将该输出的线性函数再 ...

  7. 实验二 路由器配置方式及基本操作

    [实验目的] 通过对路由器设备的几种配置手段.配置模式和基本配置命令的认识,获得路由器的基本使用能力. [实验任务] 1.认识路由器的配置方式. 2.按照给出的参考拓扑图构建逻辑拓扑图. 3.按照给出 ...

  8. 同步时序电路和异步时序电路

    一. 定义 在同步时序电路中,各触发器的时钟端全部连接到同一个时钟源上,只有当时钟脉冲到来时,电路的状态才能改变.(注意不要求是同一时钟,而是同源时钟.所谓的同源时钟是指同一个时钟源衍生频率比值为2的 ...

  9. 北邮 计算机学院数据库实验报告二,北邮数据库_sql实验二报告.doc

    <北邮数据库_sql实验二报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<北邮数据库_sql实验二报告.doc>文档请在天天文库搜索. 1. ...

最新文章

  1. mysql中change用法,mysql 中alter的用法以及一些步骤
  2. 2018-11-05直播
  3. python自学需要哪些基础知识-零基础学Python应该学习哪些入门知识及学习步骤安排...
  4. 程序员年入50万,我们该如何努力达到这个目标?
  5. 卸载ncurses_linux中使用ncurses出现中文乱码解决方法
  6. 程序员们记得还是八五年PC登陆我国时候的事?
  7. 自动驾驶——模型部署的学习笔记
  8. RegistryHelper-注册表辅助类
  9. Exception in thread “main“ java.lang.ArithmeticException: / by zero
  10. 深度linux如何安装迅雷,deepin官方论坛-深度科技官网旗下网站
  11. python中3个单引号,Pyhton3中单引号、双引号、三个引号的用法和区别
  12. 定时关机软件里的锁定计算机,怎么让电脑定时关机设置大全
  13. WIN 10 FTP 不好用问题总结
  14. python提取一段字符串中的ip地址
  15. 研华微型计算机biso,研华主板bios设置方法
  16. 老刘说NLP:这几年的NLP历程回顾,以及关于NLP(知识图谱等)落地的思考
  17. 美标A537CL2钢板交货状态和执行标准
  18. php购买东西价格代码,利用ajax+php实现商品价格计算
  19. python超市进销存毕业设计-附源码211549
  20. 中兴 面试2020-09-21

热门文章

  1. php templete什么意思,PHP设计模式之模板方法模式定义与用法详解
  2. 一键装机linux_教你如何使用u盘安装Linux系统
  3. java实现超大文件断点续传
  4. ecshop 简单修改 可做淘宝客网站
  5. 服务器SSL证书和域名证书有什么区别?
  6. 现代CEO中11种失败的性格(zt)
  7. 《达利之梦》推出APP,带你走进VR超现实画作
  8. 《实用VC编程之玩转控件》第7课:ListBox 列表控件
  9. 让Android应用程序支持安装到SD卡(APP2SD)
  10. 水雨情监测系统 实时监测