
《专周报告》word版.doc
6页大规模集成电路专周报告实验名:秒表班级:09611姓名:周波学号:32专周题目:秒表的设计专周目的:1. 熟练利用Verilog HDL语言进行数字系统的设计 2. 掌握数字系统的设计方法——自顶向下的设计思想3. 掌握分频器的设计,计数器的设计,七段译码管和数码管动态扫描显示的设计,按键消除抖动的设计4. 根据秒表的功能设计一个秒表专周器材:装有QuartusⅡ软件的电脑一台、FPGA教学实验系统一台、下载电缆一根专周要求:1. 有百分秒、秒、分计数,数码管动态扫描显示输出,按键消抖2. 有清零端和计数使能端3. 下载,检查结果正确专周原理:1.功能描述:秒表是一种计时工具,有广泛的用途本专周中的秒表要求有两个功能 表停止计数,并显示所计的数字;另一个是清零按钮,当按下此按钮时,秒表清零在数码管按钮:一个是计数和停止计数按钮,当第一次按下此按钮时,秒表开始计数,再一次按下时,秒上采用动态扫描显示输出2.基本原理:本专周中用到的主要元件有计数器、逻辑控制器、数据选择器和译码器等百分秒使用100进制计数,秒、分都是60进制计数;逻辑控制器主要用来实现计数和清零基本方框图如下:3.自顶向下的设计方法:自顶向下的设计方法是数字系统设计中常用的设计方法,也是基于芯片的系统设计的主要方法。
它是利用功能分割手段将设计由上到下进行层次化和模块化,即层次、分模块进行设计和仿真功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解成更少的逻辑块和电路专周步骤:1.采用自顶向下的设计方法,首先将系统分块 2.设计元件,即逻辑块 3.一级一级向上进行元例化,设计顶层文件 4.把各模块联接起来,进行综合编译仿真 5.下载到实验箱,以验证程序专周结果:1.源程序module miaobiao(clk_1k,pause,clr,led,sel);parameter width=8;input clk_1k;input pause;input clr;output reg[width-1:0]led;output reg[2:0]sel;reg[3:0]led_1;wire isstop;wire zero;switch siwtchstop(clk_1k,pause,isstop);switch switchzero(clk_1k,clr,zero);reg[3:0] counter_100hz;wire clk100;assign clk100=counter_100hz[3];always @(posedge clk_1k)begin if(!isstop) begin if(counter_100hz==4'b1001) counter_100hz<=0; else counter_100hz=counter_100hz+1; endendreg[3:0] fs0;reg fscarry0;reg[3:0] fs1;reg fscarry1;reg[3:0] s0;reg scarry0;reg[3:0] s1;reg scarry1;reg[3:0] minu0;reg miucarry0;reg[3:0] minu1;always @(posedge clk100 or posedge zero)begin if(zero) begin fs0<=0; fscarry0<=0; end else if(clk100==1) begin if(fs0==9) begin fs0<=0; fscarry0<=1; end else begin fs0<=fs0+1;fscarry0<=0; end endendalways @(posedge fscarry0 or posedge zero)begin if(zero) begin fs1<=0; fscarry1<=0; end else if(fscarry0==1) begin if(fs1==9) begin fs1<=0;fscarry1<=1;end else begin fs1<=fs1+1;fscarry1<=0; end endendalways @(posedge fscarry1 or posedge zero)begin if(zero) begin s0<=0; scarry0<=0; end else if(fscarry1==1) begin if(s0==9) begin s0<=0;scarry0<=1;end else begin s0<=s0+1;scarry0<=0; end endendalways @(posedge scarry0 or posedge zero)begin if(zero) begin s1<=0; scarry1<=0; end else if(scarry0==1) begin if(s1==5) begin s1<=0;scarry1<=1;end else begin s1<=s1+1;scarry1<=0; end endendalways @(posedge scarry1 or posedge zero)begin if(zero) begin minu0<=0; miucarry0<=0; end else if(scarry1==1) begin if(minu0==9) begin minu0<=0;miucarry0<=1;end else begin minu0<=minu0+1;miucarry0<=0; end endendalways @(posedge miucarry0 or posedge zero)begin if(zero) begin minu1<=0; end else if(miucarry0==1) begin if(minu1==5) begin minu1<=0;end else begin minu1<=minu1+1; end endendalways@(posedge clk_1k)begin if(clk_1k) begin if(sel==5) sel=0; else sel=sel+1; endcase(sel)0:begin led_1=fs0;led[0]=0;end 1:begin led_1=fs1;led[0]=0;end 2:begin led_1=s0;led[0]=1;end3:begin led_1=s1;led[0]=0;end 4:begin led_1=minu0;led[0]=1;end5:begin led_1=minu1;led[0]=0;end default:led_1=10;endcasecase(led_1) 0: led[7:1]=7'b1111110; 1: led[7:1]=7'b0110000; 2: led[7:1]=7'b1101101; 3: led[7:1]=7'b1111001; 4: led[7:1]=7'b0110011; 5: led[7:1]=7'b1011011; 6: led[7:1]=7'b1011111; 7: led[7:1]=7'b1110000; 8: led[7:1]=7'b1111111; 9: led[7:1]=7'b1111011; 10: led[7:1]=7'b1110111; default:led[7:1]=7'b1111110;endcaseendendmodulemodule switch(clk,keyin,keyout);input clk,keyin; output reg keyout; reg[6:0] counter;wire clk_use;assign clk_use=counter[6];always @(posedge clk) counter<=counter+1'b1;always @(posedge clk_use) keyout<=keyin;endmodule2.波形仿真:心得体会:1. 通过专周的学习,我从中学到了很多,比如说熟悉掌握了QuartusⅡ集成开发环境,掌握了秒表的设计。
2.在专周实习过程中发现了自己很多不懂的知识,通过同学和老师的讲解基本搞明白了3.通过专周的学习,对书本上的理论知识是较好的实践和巩固,积累了经验,为以后的学习奠定了基础!。
