verilog实验-计数器实验报告_第1页
verilog实验-计数器实验报告_第2页
verilog实验-计数器实验报告_第3页
verilog实验-计数器实验报告_第4页
verilog实验-计数器实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

verilog实验-计数器实验报告-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANverilog实验-计数器实验报告全文共11页,当前为第1页。verilog实验-计数器实验报告verilog实验-计数器实验报告全文共11页,当前为第1页。PAGE1计数器1、实现目标及介绍实验实现了一个简易的计数器,计数范围可达899(0~899),通过key4按键计数,每按下一次,计数加一,百位数显示在led上,个位与十位显示在数码管上。为十进制计数,数码管1计数到九后置零。数码管2获得进位加一,数码管2到9后当再次获得个位进位时再次向百位进一,点亮led1,每百位点亮一个led。此外key4为清零键,可随时按键清零。2、效果展示 计数99verilog实验-计数器实验报告全文共11页,当前为第2页。verilog实验-计数器实验报告全文共11页,当前为第2页。清零verilog实验-计数器实验报告全文共11页,当前为第3页。计数100verilog实验-计数器实验报告全文共11页,当前为第3页。verilog实验-计数器实验报告全文共11页,当前为第4页。视频展示(双击观看)verilog实验-计数器实验报告全文共11页,当前为第4页。3、代码实现与模块分析verilog实验-计数器实验报告全文共11页,当前为第5页。1.顶层模块verilog实验-计数器实验报告全文共11页,当前为第5页。 modulejishuqi(inputwireclk,rst,eg_data_1 (cnt[7:4]),eg_data_2 (cnt[3:0]),eg_led_1 (segment_led_1),eg_led_2 (segment_led_2)lk(clk),.rst(rst),.key(key1),.key_pulse(key_pulse)); endmodule 2.数码管显示模块modulesegment(seg_data_1,seg_data_2,seg_led_1,seg_led_2); input[3:0]seg_data_1;键消抖模块eg_data_1 (cnt[7:4]),eg_data_2 (cnt[3:0]),eg_led_1 (segment_led_1),eg_led_2 (segment_led_2)lk(clk),.rst(rst),.key(key1),.key_pulse(key_pulse)); endmodule//按键消抖moduledebounce(clk,rst,key,key_pulse);parameterN=2;//要消除的按键的数量 inputclk;inputrst;input [N-1:0]key;//输入的按键 output[N-1:0]key_pulse;//按键动作产生的脉冲 reg[N-1:0]key_rst_pre;//定义一个寄存器型变量存储上一个触发时的按键值reg[N-1:0]key_rst;//定义一个寄存器变量储存储当前时刻触发的按键值wire[N-1:0]key_edge;//检测到按键由高到低变化是产生一个高脉冲verilog实验-计数器实验报告全文共11页,当前为第6页。//利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中verilog实验-计数器实验报告全文共11页,当前为第6页。always@(posedgeclkornegedgerst)begin if(!rst) begin key_rst<={N{1'b1}};//初始化时给key_rst赋值全为1,{}中表示N个1key_rst_pre<={N{1'b1}};endelse begin key_rst<=key;//第一个时钟上升沿触发之后key的值赋给key_rst,同时key_rst的值赋给key_rst_pre key_rst_pre<=key_rst;//非阻塞赋值。相当于经过两个时钟触发,key_rst存储的是当前时刻key的值,key_rst_pre存储的是前一个时钟的key的值endendassignkey_edge=key_rst_pre&(~key_rst);//脉冲边沿检测。当key检测到下降沿时,key_edge产生一个时钟周期的高电平 reg [17:0] cnt;//产生延时所用的计数器,系统时钟12MHz,要延时20ms左右时间,至少需要18位计数器//产生20ms延时,当检测到key_edge有效是计数器清零开始计数always@(posedgeclkornegedgerst) begin if(!rst) cnt<=18'h0;elseif(key_edge)cnt<=18'h0;elsecnt<=cnt+1'h1;endreg[N-1:0]key_sec_pre;//延时后检测电平寄存器变量reg[N-1:0]key_sec;//延时后检测key,如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效always@(posedgeclkornegedgerst) begin if(!rst) key_sec<={N{1'b1}};elseif(cnt==18'h3ffff)verilog实验-计数器实验报告全文共11页,当前为第7页。key_sec<=key;verilog实验-计数器实验报告全文共11页,当前为第7页。endalways@(posedgeclkornegedgerst) begin if(!rst) key_sec_pre<={N{1'b1}};elsekey_sec_pre<=key_sec;endassignkey_pulse=key_sec_pre&(~key_sec);endmodulemodulesegment(seg_data_1,seg_data_2,seg_led_1,seg_led_2); input[3:0]seg_data_1;//数码管需要显示0~9十个数字,所以最少需要4位输入做译码 input[3:0]seg_data_2; //小脚丫上第二个数码管 output[8:0]seg_led_1;//在小脚丫上控制一个数码管需要9个信号MSB~LSB=DIG、DP、G、F、E、D、C、B、A output[8:0]seg_led_2;//在小脚丫上第二个数码管的控制信号MSB~LSB=DIG、DP、G、F、E、D、C、B、Areg[8:0]seg[9:0]; //定义了一个reg型的数组变量,相当于一个10*9的存储器,存储器一共有10个数,每个数有9位宽initial //在过程块中只能给reg型变量赋值,Verilog中有两种过程块always和initial//initial和always不同,其中语句只执行一次 beginseg[0]=9'h3f;//对存储器中第一个数赋值9'b00_0011_1111,相当于共阴极接地,DP点变低不亮,7段显示数字0 seg[1]=9'h06;//7段显示数字1 seg[2]=9'h5b;//7段显示数字2 seg[3]=9'h4f;//7段显示数字3 seg[4]=9'h66;//7段显示数字4 seg[5]=9'h6d;//7段显示数字5 seg[6]=9'h7d;//7段显示数字6 seg[7]=9'h07;//7段显示数字7 seg[8]=9'h7f;//7段显示数字8 seg[9]=9'h6f;//7段显示数字9endverilog实验-计数器实验报告全文共11页,当前为第8页。verilog实验-计数器实验报告全文共11页,当前为第8页。assignseg_led_1=seg[seg_data_1];//连续赋值,这样输入不同四位数,就能输出对于译码的9位输出a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论