EDA课程设计百进制计数器_第1页
EDA课程设计百进制计数器_第2页
EDA课程设计百进制计数器_第3页
EDA课程设计百进制计数器_第4页
EDA课程设计百进制计数器_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

郑州航空工业管理学院EDA技术及应用》课程设计报告2012 届 通信工程 专业1213071 班级题目: 百进制计数器姓 名 学号同组人2014 年6月 25日任务书百进制计数器设计要求(1) 技术范围为 0~199(2) 可以在数码管上显示出计数值, 且数值为十进制数(3) 计数方向:双向(即可递增递减计数)在EDA实验箱上完成。1.晶振为 48MHz2.FPGA器件为ALTERA 的EP1C6Q240C83.采用数码管显示一、设计方案规划:整体规划(确定输入与输出)时钟输入

clk,

递增递减控制

dir,

输入按键

key,

数码管选择输出引脚

dig,

数码管段输出引脚

seg,具体如下:inputclk;// 输入时钟inputdir;// 递增递减控制键input[1:0]key;// 输入按键output[2:0]dig;// 数码管选择输出引脚output[7:0]seg;// 数码管段输出引脚功能划分与模块划分a.秒信号产生部分分频模块:计算机本身频率较大,显示时间短,为显示人眼可见,将高频率改为低频率,即增减周期。按键消抖处理部分按键消抖模块:作为机械开关键盘,在按键操作时,机械触点的弹性以及电压突跳等原因,在触点闭合或开启的瞬间出现电压抖动,所以处理后消除误触发。计数处理部分递增递减计数模块:计数要求在 0-199之间可增可减。数码管动态扫描显示部分选择扫描显示数据和选择数码管显示位显示译码部分显示相对应的数据各功能或各模块的功能细分,分频模块定义clk上升沿触发器定义计数器寄存器,计数部分b.按键消抖模块key 输入按键key_done 按键消抖输出递增递减计数模块清零部分控制键 dir,递增部分,递减部分,sum计数缓存器数码管动态扫描显示部分显示不同各位的数据,选择对应的不同数码管,dig数码管选择显示译码部分共阳数码管,低电平有效, seg数码管译码结果二、各模块的实现方法,技术、要点分频模块:always@(posedgeclk)// 定义clk上升沿触发器。分频 //秒信号产生部分beginq=q+1'b1;if(q==26'd24000000)beginq=0;//sec=~sec;//

计数器清零致位秒标志endend按键消抖: always@(posedgeq[16])begindout1<={dir,key};dout2<=dout1;dout3<=dout2;endalways@(negedgekey_done[0])beginkeyen=~keyen;endregr_dir;always@(negedgekey_done[2])beginr_dir=~r_dir;end计数块递增计数:always@(posedgesecornegedgekey_done[1])//200 进制计数beginif(!key_done[1])// 是清零键吗?sum<=12'h000;elsebeginif(r_dir)beginif(!keyen)beginif(sum>12'h198)sum<=12'h000;elsesum[3:0]<=sum[3:0]+4'h1; // 个位加1if(sum[3:0]==4'h9)beginsum[3:0]<=0;sum[7:4]<=sum[7:4]+4'h1; // 十位加1if(sum[7:4]==4'h9)beginsum[7:4]<=0;sum[11:8]<=sum[11:8]+4'h1;// 百位加1endif(sum==12'h199)sum[11:0]<=12'h000;endendend递减计数:

elseif(!keyen)beginif(sum==12'h000)sum<=12'h199;elsesum[3:0]<=sum[3:0]-4'h1;//

个位减

1if(sum[3:0]==4'h0)beginsum[3:0]<=4'h9;sum[7:4]<=sum[7:4]-4'h1;//

十位减

1if(sum[7:4]==4'h0)beginsum[7:4]<=4'h9;sum[11:8]<=sum[11:8]-4'h1;//

百位减

1endif(sum==12'h000)sum[11:0]<=12'h199;endend数码管动态扫描显示部分 :always@(posedgeclk) //count[17:15]begincase(q[16:15])2'd0:disp_temp=sum[3:0];2'd1:disp_temp=sum[7:4];2'd2:disp_temp=sum[11:8];

大约1ms改变一次//选择扫描显示数据//显示个位//显示十位// 显示百位2'd3:disp_temp=4'hf;

//为15,全灭endcasecase(q[16:15])2'd0:dig_r=3'b110;2'd1:dig_r=3'b101;2'd2:dig_r=3'b011;default:dig_r=3'b111;

//选择数码管显示位//选择第一个数码管显示//选择第二个数码管显示//选择第三个数码管显示//选择第四个数码管显示endcaseend七段码显示模块:

always@(posedgeclk)//

显示译码

,共阳数码管

(低电平有效,即为0时亮)begincase(disp_temp)4'h0:seg_r=8'hc0;4'h1:seg_r=8'hf9;

//显示//显示

014'h2:seg_r=8'ha4;//显示24'h3:seg_r=8'hb0;//显示34'h4:seg_r=8'h99;//显示44'h5:seg_r=8'h92;//显示54'h6:seg_r=8'h82;//显示64'h7:seg_r=8'hf8;//显示74'h8:seg_r=8'h80;//显示84'h9:seg_r=8'h90;//显示9default:seg_r=8'hff;//不显示endcaseend三、模块的编写modulecount199(clk,key,dir,dig,seg);inputclk;// 输入时钟inputdir;// 递增递减控制input[1:0]key;//

输入按键output[2:0]dig;//output[7:0]seg;//reg[7:0]seg_r;//reg[2:0]dig_r;//reg[25:0]q;//

数码管选择输出引脚数码管段输出引脚定义数码管输出寄存器定义数码管选择输出寄存器定义计数器寄存器 分频计数器,最大

2^6*2^20<64*10^6

分频reg[3:0]disp_temp;//reg[11:0]sum;//regsec,keyen;//

定义显示数据寄存器计数缓存器定义标志位reg[2:0]dout1,dout2,dout3;//

寄存器wire[2:0]key_done;//

按键消抖输出assigndig=dig_r;//assignseg=seg_r;//always@(posedgeclk)//

输出数码管选择输出数码管译码结果定义clk上升沿触发器。分频

//秒信号产生部分beginq=q+1'b1;if(q==26'd24000000)beginq=0;//sec=~sec;//

计数器清零致位秒标志endend//按键消抖处理部分assignkey_done=(dout1|dout2|dout3);always@(posedgeq[16])begindout1<={dir,key};dout2<=dout1;dout3<=dout2;end

//按键消抖输出always@(negedgekey_done[0])beginkeyen=~keyen;endregr_dir;always@(negedgekey_done[2])beginr_dir=~r_dir;endalways@(posedgesecornegedgekey_done[1])//200begin

进制计数if(!key_done[1])//

是清零键吗

?sum<=12'h000;elsebeginif(r_dir)beginif(!keyen)beginif(sum>12'h198)sum<=12'h000;elsesum[3:0]<=sum[3:0]+4'h1;if(sum[3:0]==4'h9)beginsum[3:0]<=0;sum[7:4]<=sum[7:4]+4'h1; //

//

个位加1十位加

1if(sum[7:4]==4'h9)beginsum[7:4]<=0;sum[11:8]<=sum[11:8]+4'h1;//百位加1endif(sum==12'h199)sum[11:0]<=12'h000;endendendelseif(!keyen)beginif(sum==12'h000)sum<=12'h199;elsesum[3:0]<=sum[3:0]-4'h1;//

个位减

1if(sum[3:0]==4'h0)beginsum[3:0]<=4'h9;sum[7:4]<=sum[7:4]-4'h1;//

十位减

1if(sum[7:4]==4'h0)beginsum[7:4]<=4'h9;sum[11:8]<=sum[11:8]-4'h1;//

百位减

1endif(sum==12'h000)sum[11:0]<=12'h199;endendendend//数码管动态扫描显示部分always@(posedgeclk)//count[17:15]

大约

1ms改变一次begincase(q[16:15])2'd0:disp_temp=sum[3:0];2'd1:disp_temp=sum[7:4];2'd2:disp_temp=sum[11:8];

//选择扫描显示数据//显示个位//显示十位// 显示百位2'd3:disp_temp=4'hf;

//为

15,全灭endcasecase(q[16:15])

//选择数码管显示位2'd0:dig_r=3'b110;2'd1:dig_r=3'b101;2'd2:dig_r=3'b011;default:dig_r=3'b111;endcaseend

选择第一个数码管显示选择第二个数码管显示选择第三个数码管显示选择第四个数码管显示always@(posedgeclk)// 显示译码,共阳数码管(低电平有效,即为 0时亮)begincase(disp_temp)4'h0:seg_r=8'hc0; //显示04'h1:seg_r=8'hf9; //显示14'h2:seg_r=8'ha4; //显示24'h3:seg_r=8'hb0; //显示34'h4:seg_r=8'h99; //显示44'h5:seg_r=8'h92; //显示54'h6:seg_r=8'h82; //显示64'h7:seg_r=8'hf8; //显示74'h8:seg_r=8'h80; //显示84'h9:seg_r

温馨提示

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

评论

0/150

提交评论