FPGA实验四——时间基准电路和带使能的多周期计数器
来源:互联网 发布:mysql 定位慢查询 编辑:程序博客网 时间:2024/05/17 22:10
1. 设计时钟基准电路和带使能的多周期计数器
本质上是两级计数器级联的电路结构——第一级计数器为时钟基准电路,生成时钟基准信号;第二级为多周期计数器用时钟基准信号作为计数使能进行计数;
实验要求:把后级计数器的计数范围改为 0-15,把计数器的 0-15 计数值经过译码,在DE0的 HEX LED上显示成 0-9-A-F 的十六进制数
- ① 模块例化(Verilog HDL代码)
时钟基准电路模块
module cnt_sync( CLK , // clock CNTVAL, // counter value OV ); // overflowinput CLK;output [32-1:0] CNTVAL;output OV;parameter MAX_VAL = 25_000_000; //MAX ADD NUMreg [32-1:0] CNTVAL;reg OV;always @ (posedge CLK) begin if(CNTVAL >= MAX_VAL) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1;endalways @ (CNTVAL) begin if(CNTVAL == MAX_VAL) OV = 1'b1; else OV = 1'b0;endendmodule //
0-15周期计数器模块
module cnt_en_0to15( CLK , // clock CNTVAL, // counter value EN , OV ); // overflowinput CLK;input EN;output [4-1:0] CNTVAL;output OV;reg [4-1:0] CNTVAL;reg OV;always @ (posedge CLK) begin if(EN) begin // work enable if(CNTVAL >= 15) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1; end else CNTVAL <= CNTVAL ; // hold same valueendalways @ (CNTVAL) begin if(CNTVAL == 15) OV = 1'b1; else OV = 1'b0;endendmodule
4-16译码器模块
module Decode_16(IN,OUT);input [4-1:0]IN;output reg [8-1:0]OUT; //HEX's legs are 8always @(IN) begin case (IN) 4'b0000: OUT = 16'b11000000;//0 4'b0001: OUT = 16'b11111001;//1 4'b0010: OUT = 16'b10100100;//2 4'b0011: OUT = 16'b10110000;//3 4'b0100: OUT = 16'b10011001;//4 4'b0101: OUT = 16'b10010010;//5 4'b0110: OUT = 16'b10000010;//6 4'b0111: OUT = 16'b11111000;//7 4'b1000: OUT = 16'b10000000;//8 4'b1001: OUT = 16'b10010000;//9 4'b1010: OUT = 16'b10001000;//A 4'b1011: OUT = 16'b10000000;//B 4'b1100: OUT = 16'b11000110;//C 4'b1101: OUT = 16'b11000000;//D 4'b1110: OUT = 16'b10000110;//E 4'b1111: OUT = 16'b10001110;//F endcaseendendmodule
- ② BDF原理图
- ③ RTL结构图
时钟基准电路结构图
计数器结构图
4-16译码器结构图
- ④ SignalTap仿真图
- ⑤ 效果展示
2. 设计带清零和暂停的计时秒表
实验要求:修改时钟基准发生器,设计一个使用2个HEX LED,精度为0.1秒,范围为 0-9.9 秒的计时秒表,并且带有清零和暂停的控制功能
- ① 按键button对应管脚图
- ② 模块例化(Verilog HDL 代码)——在多周期计数器的基础上进行修改
修改时钟基准器代码,将最大值设为250000000,使得精度为0.1s
module cnt_sync( CLK , // clock CNTVAL, // counter value OV ); // overflowinput CLK;output [32-1:0] CNTVAL;output OV;parameter MAX_VAL = 250_000_000; //MAX ADD NUM 0.1sreg [32-1:0] CNTVAL;reg OV;always @ (posedge CLK) begin if(CNTVAL >= MAX_VAL) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1;endalways @ (CNTVAL) begin if(CNTVAL == MAX_VAL) OV = 1'b1; else OV = 1'b0;endendmodule
带异步、清零和暂停的十进制计数器
module cnt_en_rst0to9( RST , PAU , CLK , // clock CNTVAL, // counter value EN , OV ); // overflowinput CLK;input RST;input PAU;input EN;output [4-1:0] CNTVAL;output OV;reg [4-1:0] CNTVAL;reg OV;reg flag;always @ (posedge CLK) begin if(!RST) begin //push rst = 0 CNTVAL <= 0; end else if(flag) begin if(EN) begin // work enable if(CNTVAL >= 9) CNTVAL <= 0; else CNTVAL <= CNTVAL + 1'b1; end else CNTVAL <= CNTVAL ; // hold same value end else if (!flag) CNTVAL <= CNTVAL;endalways @(posedge CLK) begin if (!PAU) flag = !flag;endalways @ (CNTVAL) begin if(CNTVAL == 9) OV = 1'b1; else OV = 1'b0;endendmodule
其中通过按键button触发秒表的清零和暂停
- ③ BDF原理图
- ④ RTL结构图
时钟基准计数器和4-16译码器的RTL结构图同上
秒表计数器结构图
- ⑤ 效果展示
带清零和暂停的9.9秒表
阅读全文
0 0
- FPGA实验四——时间基准电路和带使能的多周期计数器
- FPGA入门实验四:时间基准电路 和 带使能的多周期计数器
- FPGA实验4: 时间基准电路和带使能的多周期计数器
- FPGA基础实验:时间基准电路和带使能的多周期计数器
- 实验四:时间基准电路 和 带使能的多周期计数器
- FPGA设计时间基准电路和带使能的多周期计数器
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA 电路实验 作业
- 计数器 FPGA电路实验 作业2
- FPGA实验六——计数器、ROM和DDS
- 2016秋《高速电路EDA设计》计数器FPGA电路实验
- FPGA实验五——多周期移位寄存器
- FPGA实验6:计数器、ROM和DDS
- FPGA实验三——计数器、波形仿真、SignalTap
- FPGA实验5:多周期移位寄存器
- FPGA入门实验五:多周期移位寄存器
- jython未能封装jar包的原因
- C语言基础练习(三)
- 在EPS开发中遵循ISO 26262标准
- Python Game Programming By Example.pdf 英文原版 免费下载
- tensorflow实现word2vec
- FPGA实验四——时间基准电路和带使能的多周期计数器
- python学习---第六天
- Python 3 for Absolute Beginners.pdf 英文原版 免费下载
- 冒泡排序
- js只能输入数字或者分号!
- Python High Performance Programming.pdf 英文原版 免费下载
- Natural Language Processing with Python.pdf 英文原版 免费下载
- js输出最后一个字符串
- SpringMVC传输传递 @RquestMapping @ResponseBody @PathVariable和@RequestParam