文章目录

  • 目录
  • 实验要求
    • 第一步:
    • 第二步
  • 工程结构
  • 核心代码
    • 计数器模块
    • 顶层模块
    • 刷新电路
    • 多工器
    • Binary-to-BCD译码器
    • BCD-to-7-Segment
  • 综合结果
    • Refresh
    • Counter计数模块
    • MUX模块:
    • 七位译码器模块:
    • BCD译码器是如下图相同结构的八层迭代
  • 管脚约束文件

目录

实验要求

第一步:

设计一个加减计数器,将其与实验一中的Binary-to-BCD译码器、和交替显示控制电路结合

如图:
计数器输入:Clk,Up,Down,Rst,Enable
8bits输出:Cnt7~Cnt0
Rst=1 ,计数器清零
Rst=0,Enable=1 ,则每个时钟上跳沿或下跳沿加一(Up=1)或减一(Down=1)

第二步

将计数器输入改成按键控制:
Basy3电路板(xc7a35tcpg236-1)
按上键代表Up加计数
下键代表Down减计数
中间键代表Enable表示暂停
计数器初始处于空闲状态
若捕捉到下键则开始减计数,之后又捕捉到上键改为加计数,一旦中间键按下,则计数过程暂停;若又捕捉到上键或者下键,则从暂停前的计数继续开始计数

工程结构

核心代码

计数器模块

最重要的模块,剩下的模块都是借鉴上一个实验的:

module Counter(Clk,Up_set,Down_set,Rst_set,Enable_set,Cnt);input Clk;input Up_set;input Down_set;input Rst_set;input Enable_set;output reg [7:0] Cnt;reg [15:0] cnt_first;reg [15:0] cnt_second;reg CLK;reg [3:0]Chg;initial beginCnt<=8'b00000000;Chg<=4'b0000;cnt_first<=16'b0;cnt_second<=16'b0;endalways@(posedge Clk)beginif(cnt_first==16'd5000)cnt_first<=16'd0;else cnt_first<=cnt_first+1'b1;endalways@(posedge Clk)beginif(cnt_first==16'd5000) cnt_second<=cnt_second+1'b1;if(cnt_second==16'd5000) begincnt_second<=0;CLK=~CLK;endendalways@(posedge Up_set or posedge Down_set or posedge Enable_set or posedge Rst_set)beginif(Rst_set==1) Chg<=4'b0000;else if(Up_set==1)  Chg<=4'b1001;else if(Down_set==1) Chg<=4'b1010;else if(Enable_set==1) Chg[3]<=~Chg[3];endalways@(posedge CLK)begincase(Chg)4'b0000:Cnt<=8'b0;4'b1001:Cnt<=Cnt+1'b1;4'b1010:Cnt<=Cnt-1'b1;endcaseendendmodule

其中:

always@(posedge Up_set or posedge Down_set or posedge Enable_set or posedge Rst_set)beginif(Rst_set==1) Chg<=4'b0000;else if(Up_set==1)  Chg<=4'b1001;else if(Down_set==1) Chg<=4'b1010;else if(Enable_set==1) Chg[3]<=~Chg[3];end

这一部分代码在实现implementation的时候会报错:

[Designutils 20-970] Unrecognized or unsupported command 'set_property IOSTANDARD LVCMOS33 [get_ports {Enable]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[2]}]
set_property IOSTANDARD LVCMO ... (truncated) ' found in constraint file. ["C:/Users/18000/For_Ba_Counter/For_Ba_Counter.srcs/constrs_1/new/Constr.xdc":27]

在约束文件中加入

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets Enable_IBUF]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets Up_IBUF]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets Down_IBUF]

即可解决问题

或者将这一段代码改为:

always@(posedge CLK)beginif(Rst_set==1) Chg<=4'b0000;else if(Up_set==1)  Chg<=4'b1001;else if(Down_set==1) Chg<=4'b1010;else if(Enable_set==1) Chg[3]<=~Chg[3];end

这是一种更好的方式,符合Verilog硬件编程的原则

顶层模块

module Top_module(Clk,Up,Down,SegSel_n,A,B,C,D,E,F,G,Enable,Rst);input Clk;input Up;input Down;input Enable;input Rst;output [3:0]SegSel_n;output A;output B;output C;output D;output E;output F;output G;wire [7:0] Cnt;wire [3:0]SegSel;Counter C1(.Clk(Clk),.Up_set(Up),.Down_set(Down),.Rst_set(Rst),.Enable_set(Enable),.Cnt(Cnt));wire [3:0]Hrs;wire [3:0]Tens;wire [3:0]Ones;binary_to_BCD B1(.SW(Cnt),.Hrs(Hrs),.Tens(Tens),.Ones(Ones));Refresh Refresh(.Clk(Clk),.Rst(1'b0),.SegSel(SegSel));wire [3:0]Dval;MUX MUX(.Refresh(SegSel),.Dval(Dval),.Hrs(Hrs),.Tens(Tens),.Ones(Ones));wire [6:0]L;BCD_to_7_segment S1(.X(Dval),.Lights(L));assign {A,B,C,D,E,F,G}=~L;assign SegSel_n=~SegSel;
endmodule

刷新电路

module Refresh(Clk,Rst,SegSel);input Clk,Rst;output reg [3:0]SegSel;initial beginSegSel=4'b0001;endreg [7:0] count_fst;reg[3:0]count_second;always@(posedge Clk)beginif(Rst==1) begincount_fst<=8'b00000000;SegSel<=4'b0000;endelse beginif(count_fst==8'b11111111)begincount_fst<=4'b00000000;count_second<=count_second+1'b1;if(count_second==4'b1111)begincount_second<=4'b0000;case(SegSel)4'b0000:SegSel<=4'b0001;4'b0001:SegSel<=4'b0010;4'b0010:SegSel<=4'b0100;4'b0100:SegSel<=4'b1000;4'b1000:SegSel<=4'b0001;default:SegSel<=4'b0000;endcaseendendelse count_fst<=count_fst+8'b00000001;endend
endmodule

多工器

module MUX(Refresh,Dval,Hrs,Tens,Ones);input [3:0] Refresh;input [3:0]Tens;input [3:0]Hrs;input [3:0]Ones;output reg [3:0]Dval;always@(*) begincase(Refresh)4'b0000:Dval=4'b0000;4'b0001:Dval=Ones;4'b0010:Dval=Tens;4'b0100:Dval=Hrs;default:Dval=4'b0000;endcaseendendmodule

Binary-to-BCD译码器

module binary_to_BCD(SW,Hrs,Tens,Ones);input [7:0] SW;output [3:0]Hrs;output [3:0]Tens;output [3:0]Ones;reg [17:0] Z;always@(SW)beginZ=18'b0;Z[7:0]=SW;repeat(8)beginif(Z[11:8]>4)Z[11:8]=Z[11:8]+2'b11;if(Z[15:12]>4)Z[15:12]=Z[15:12]+2'b11;Z[17:1]=Z[16:0];endendassign Hrs=Z[17:16];assign Tens=Z[15:12];assign Ones=Z[11:8];endmodule

BCD-to-7-Segment

module BCD_to_7_segment(X,Lights);
input [3:0] X;
output reg [6:0] Lights;
reg X3,X2,X1,X0;
reg A,B,C,D,E,F,G;
always @(X)begin{X3,X2,X1,X0}=X;case({X3,X2,X1,X0})4'd0:{A,B,C,D,E,F,G}=7'b1111110;4'd1:{A,B,C,D,E,F,G}=7'b0110000;4'd2:{A,B,C,D,E,F,G}=7'b1101101;4'd3:{A,B,C,D,E,F,G}=7'b1111001;4'd4:{A,B,C,D,E,F,G}=7'b0110011;4'd5:{A,B,C,D,E,F,G}=7'b1011011;4'd6:{A,B,C,D,E,F,G}=7'b1011111;4'd7:{A,B,C,D,E,F,G}=7'b1110000;4'd8:{A,B,C,D,E,F,G}=7'b1111111;4'd9:{A,B,C,D,E,F,G}=7'b1111011;default {A,B,C,D,E,F,G}=7'b0000000;endcaseLights={A,B,C,D,E,F,G};end
endmodule

综合结果


该结构和实验要求中给出的逻辑图几乎完全一致

Refresh

Counter计数模块

MUX模块:

七位译码器模块:

BCD译码器是如下图相同结构的八层迭代

管脚约束文件

set_property PACKAGE_PIN W6 [get_ports B]
set_property PACKAGE_PIN U8 [get_ports C]
set_property PACKAGE_PIN V8 [get_ports D]
set_property PACKAGE_PIN U5 [get_ports E]
set_property PACKAGE_PIN U7 [get_ports G]
set_property PACKAGE_PIN T18 [get_ports Up]
set_property IOSTANDARD LVCMOS33 [get_ports A]
set_property IOSTANDARD LVCMOS33 [get_ports B]
set_property IOSTANDARD LVCMOS33 [get_ports C]
set_property IOSTANDARD LVCMOS33 [get_ports Clk]
set_property IOSTANDARD LVCMOS33 [get_ports D]
set_property IOSTANDARD LVCMOS33 [get_ports Down]
set_property IOSTANDARD LVCMOS33 [get_ports E]
set_property IOSTANDARD LVCMOS33 [get_ports F]
set_property IOSTANDARD LVCMOS33 [get_ports G]
set_property IOSTANDARD LVCMOS33 [get_ports Up]
set_property PACKAGE_PIN W5 [get_ports Clk]
set_property PACKAGE_PIN U17 [get_ports Down]
set_property PACKAGE_PIN W7 [get_ports A]
set_property PACKAGE_PIN V5 [get_ports F]
set_property IOSTANDARD LVCMOS33 [get_ports Enable]
set_property PACKAGE_PIN W4 [get_ports {SegSel_n[3]}]
set_property PACKAGE_PIN V4 [get_ports {SegSel_n[2]}]
set_property PACKAGE_PIN U4 [get_ports {SegSel_n[1]}]
set_property PACKAGE_PIN U18 [get_ports Enable]
set_property PACKAGE_PIN U2 [get_ports {SegSel_n[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {SegSel_n[0]}]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets Enable_IBUF]set_property IOSTANDARD LVCMOS33 [get_ports Rst]
set_property PACKAGE_PIN W19 [get_ports Rst]

Verilog上机实验(二):多功能计数器相关推荐

  1. 计算机在材料科学中的应用上机二,计算机在材料科学中的应用-上机实验二.doc...

    计算机在材料科学中的应用-上机实验二 实验二 Office使用技巧 ? 1 Word工具栏的增删与了解其主要作用 (1) ? 把"常用"和"格式"工具栏打开(一 ...

  2. 合肥工业大学2021汇编语言程序设计上机实验二

    实验二  高级汇编程序设计 实验目的 1. 掌握中断服务子程序的编写. 2. 汇编语言与高级语言的混编. 实验内容 1.挂接1CH中断,正计时90秒后退出.要求屏幕显示0-89的秒数. 2.VC++中 ...

  3. 【Java程序设计】Java上机实验(二)

    实验二.数组     一.实验目的: 1.学会使用一维与二维数组管理简单数据. 2.学会编写简单的菜单驱动(命令行式)的Java程序 二.实验环境: BLUEJ 三.实验内容: (写出主要的内容) 1 ...

  4. 林子雨—大数据技术原理与应用—上机实验二

    题目:熟悉常用的HDFS操作 实验环境:        操作系统:ubuntu16.04        hadoop版本:1.2.1        JDK版本:1.8        Eclipse 3 ...

  5. 【FPGA Verilog】实验二:key按键基础实验

    只说一下经验和教训 1 必须按照设计流程走 不要因为实验简单,就直接进行综合,比如按照 设计 编码 RTL优化 仿真 综合 管脚分配,实现 下载 一定要按照这个步骤来. 2 必须先查看开发板说明文档 ...

  6. C++上机实验二第2题

    第2题 函数的默认参数 #include<iostream> #include<cstring> using namespace std;int display(string ...

  7. 大连理工大学操作系统上机实验二

    编写一个多进程并发执行程序.父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制 ps 命令总在 ls 命令之前执行. #include<sys/types.h> ...

  8. 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程

    仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...

  9. 合肥工业大学2021汇编语言程序设计上机实验一

    实验一  基本汇编程序设计 实验目的 1.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程: 2.掌握基本汇编语言程序设计方法. 3.熟悉DOSBOX下运行dos程序方法 ...

  10. 【SQL Server 上机实验题 】

    SQL Server 上机实验题 上机实验题1 创建数据库 创建四张表 插入四张表的数据 上机实验题2 上机实验题4 上机实验题5 上机实验题7 上机实验题1 创建数据库 create databas ...

最新文章

  1. 宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
  2. s9 Linux 进程管理命令
  3. Unity3d烘焙常见黑斑解决方法(适用5.x、2017、2018、2019版)
  4. 【转】Apache 配置虚拟主机三种方式
  5. 阿里巴巴在宁成立江苏总部
  6. 网信办:2021年全国受理网络违法和不良信息举报1.66亿件
  7. java 反射 field get方法_JAVA学习之反射getDeclaredField()方法与getField()方法的区别
  8. C++_类和对象_C++多态_案例2_制作饮品---C++语言工作笔记073
  9. Web页面自动化执行,Java+Selenium3.0-Mac OS环境搭建
  10. java项目开发经验总结
  11. 好友管理系统--python
  12. php给超链接添加图标,怎么给一个PHP密码访问页面加超链接
  13. Java换行输出的5种方式
  14. python泰坦尼克号数据分析_Python实战—泰坦尼克号生还者数据分析
  15. 大蟒蛇python头像_Python微信好友头像大拼图案例
  16. 超赞!每个设计师都应该了解的IOS编年史
  17. CSS 文字下划线间距
  18. 原神—薄樱初绽时(html+css+js仿原神2.5首页,前端课设)
  19. University's Little_Mess Note(more) [李园7舍_404]
  20. go导入包错误 Cloning into ‘xxx‘... fatal: could not read Username

热门文章

  1. supervisor 使用文档
  2. linux解压文件并命名,linux命名压缩解压文件
  3. Linux压缩与解压缩文件或文件夹命令
  4. 解决OneNote无法联网
  5. CSL:圆形平滑标签的任意方向目标检测
  6. 苹果电脑忘记开机密码重设教程
  7. STM32 FSMC 地址
  8. STM32旋转立方体
  9. 微信隐藏代码功能大汇总-你不知道的微信命令行.doc
  10. 适合高要求应用的高性能MEMS IMU解决方案