Verilog上机实验(二):多功能计数器
文章目录
- 目录
- 实验要求
- 第一步:
- 第二步
- 工程结构
- 核心代码
- 计数器模块
- 顶层模块
- 刷新电路
- 多工器
- 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上机实验(二):多功能计数器相关推荐
- 计算机在材料科学中的应用上机二,计算机在材料科学中的应用-上机实验二.doc...
计算机在材料科学中的应用-上机实验二 实验二 Office使用技巧 ? 1 Word工具栏的增删与了解其主要作用 (1) ? 把"常用"和"格式"工具栏打开(一 ...
- 合肥工业大学2021汇编语言程序设计上机实验二
实验二 高级汇编程序设计 实验目的 1. 掌握中断服务子程序的编写. 2. 汇编语言与高级语言的混编. 实验内容 1.挂接1CH中断,正计时90秒后退出.要求屏幕显示0-89的秒数. 2.VC++中 ...
- 【Java程序设计】Java上机实验(二)
实验二.数组 一.实验目的: 1.学会使用一维与二维数组管理简单数据. 2.学会编写简单的菜单驱动(命令行式)的Java程序 二.实验环境: BLUEJ 三.实验内容: (写出主要的内容) 1 ...
- 林子雨—大数据技术原理与应用—上机实验二
题目:熟悉常用的HDFS操作 实验环境: 操作系统:ubuntu16.04 hadoop版本:1.2.1 JDK版本:1.8 Eclipse 3 ...
- 【FPGA Verilog】实验二:key按键基础实验
只说一下经验和教训 1 必须按照设计流程走 不要因为实验简单,就直接进行综合,比如按照 设计 编码 RTL优化 仿真 综合 管脚分配,实现 下载 一定要按照这个步骤来. 2 必须先查看开发板说明文档 ...
- C++上机实验二第2题
第2题 函数的默认参数 #include<iostream> #include<cstring> using namespace std;int display(string ...
- 大连理工大学操作系统上机实验二
编写一个多进程并发执行程序.父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制 ps 命令总在 ls 命令之前执行. #include<sys/types.h> ...
- 定时器计数器实验C语言程序,实验二 单片机定时器和计数器编程
仲恺农业工程学院实验报告纸 信息学院 (院.系)专业班组单片机原理及接口技术课实验二单片机定时器/计数器编程 一.实验目的 1.掌握单片机定时器/计数器的工作方式: 2.掌握单片机定时器/计数器的编程 ...
- 合肥工业大学2021汇编语言程序设计上机实验一
实验一 基本汇编程序设计 实验目的 1.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程: 2.掌握基本汇编语言程序设计方法. 3.熟悉DOSBOX下运行dos程序方法 ...
- 【SQL Server 上机实验题 】
SQL Server 上机实验题 上机实验题1 创建数据库 创建四张表 插入四张表的数据 上机实验题2 上机实验题4 上机实验题5 上机实验题7 上机实验题1 创建数据库 create databas ...
最新文章
- 宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
- s9 Linux 进程管理命令
- Unity3d烘焙常见黑斑解决方法(适用5.x、2017、2018、2019版)
- 【转】Apache 配置虚拟主机三种方式
- 阿里巴巴在宁成立江苏总部
- 网信办:2021年全国受理网络违法和不良信息举报1.66亿件
- java 反射 field get方法_JAVA学习之反射getDeclaredField()方法与getField()方法的区别
- C++_类和对象_C++多态_案例2_制作饮品---C++语言工作笔记073
- Web页面自动化执行,Java+Selenium3.0-Mac OS环境搭建
- java项目开发经验总结
- 好友管理系统--python
- php给超链接添加图标,怎么给一个PHP密码访问页面加超链接
- Java换行输出的5种方式
- python泰坦尼克号数据分析_Python实战—泰坦尼克号生还者数据分析
- 大蟒蛇python头像_Python微信好友头像大拼图案例
- 超赞!每个设计师都应该了解的IOS编年史
- CSS 文字下划线间距
- 原神—薄樱初绽时(html+css+js仿原神2.5首页,前端课设)
- University's Little_Mess Note(more) [李园7舍_404]
- go导入包错误 Cloning into ‘xxx‘... fatal: could not read Username