当前位置:文档之家› EDA课程设计—秒表

EDA课程设计—秒表

EDA课程设计姓名:**学号:**********班级:1211自动化一、课程设计目的1、熟练利用Verilog HDL语言进行数字系统设计。

2、掌握数字系统的设计方法——自顶向下的设计思想。

3、掌握计数器的设计与使用。

4、根据秒表的功能要求设计一个秒表。

5、熟练掌握用Quartus II软件进行系统原理图设计、文本设计以及进行波形仿真。

二、课程设计所需器材装有Quartus II软件的电脑一台、FPGA教学实验系统一台、下载电缆一根。

三、课程设计要求1、有秒、分计数,数码扫描显示输出。

2、有清零端和暂停端。

3、下载,检查结果是否正确。

四、课程设计原理1、功能描述秒表是一种计时的工具,有着很广泛的用途。

本实验中的秒表要求有两个功能按钮:一个是计数和停止计数按钮,当第一次按下此按钮时,秒表开始计数,再一次按下时,秒表停止计数,并显示所计的数字;另一个是清零按钮,当按下此按钮时,秒表清零。

在数码管上采用动态扫描显示输出。

2、基本原理:本设计中用到的主要元件有计数器、分频器、数据选择器、译码器、位选信号发生器等。

秒、分都是60进制计数,所以必须采用两个60进制的计数器,而百分秒择采用的是100进制;分频器主要将1KHZ的时钟信号经过10分频后,产生100HZ的单位时钟周期;数据选择器主要功能是将即将显示的数据送给译码器;译码器将BCD码转换为七段译码进行显示;位选信号发生器根据人眼暂留效应和显示的数码的个数,产生一段循环码。

3、自顶向下的设计方法自顶向下的设计方法是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。

自顶向下的设计方法利用功能分割手段将设计由上到下进行层次话和模块化,及分层次、分模块进行设计和仿真。

功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。

如此分割,逐步的将系统细化,将功能逐步的具体化,模块化。

高层次设计进行功能和接口描述,说明模块的功能和接口,模块功能的更详细描述在下一设计层次说明,最底层的设计才涉及具体寄存器和逻辑门电路等实现方式的描述。

五、课程设计步骤1、采用自顶向下的设计方法,首先将系统分块。

2、设计元件,及逻辑块。

3、一级一级向上进行元件例化,设计顶层文件。

4、把各模块连接起来,进行综合编译仿真。

5、下载到实验箱,以验证程序。

六、课程设计设计1、分频模块将输入1KHZ的系统时钟经过十分频分为100HZ的单位时钟。

编程原理跟计数器原理相似。

2、定时模块采用2个60进制、1个100进制的BCD码全加器作为定时器,分为分,秒,百分秒,输入时钟信号为分频器输出信号100HZ时钟,外界两个拨码开关作为清零按钮和暂停按钮。

3、位选发生器:根据显示的数据位和人眼暂留效应,设计显示分为分、秒、百分秒位,每位需要2个数码管进行显示,因此变化频率至少为300HZ,为了方便则采用1KHZ,循环码则从000循环到101。

4、多路选择器根据位选信号,输出对应位显示的数据。

5、译码器将多路选择器输出端的数据对应的转换为七段二进制数,送给显示器。

各个分模块如下图所示:6、原理框图如下图:七、总结在课设制作开始时,自己就按照实验指导书挨着挨着的做实验,把前4个实验做完后,自己对Quaetus II软件及Verilog HDL语言语法掌握得也比较熟练了,在前几个实验的铺垫下,秒表设计可以说是前几个小实验的系统集成,专周感觉比较顺利。

遇到的问题主要就是,在进行原理图设计时,定时器原件块和多路选择器原件块输出、输入接错了,导致波形仿真失败。

通过多方面的学习了解,我学会了原理图设计法、文本输入设计法,同时也感受到了自顶而下和自下而上设计思路的优势。

Verilog源程序的编写很容易出现错误,这就需要耐心的调试。

因为很多情况下,一长串的错误往往是由一个不经意的小错误引起的。

当程序屡调屡错的时候,最好和其他同学沟通交流一下,他们不经意的一句话,就可能给我启发,使问题迎刃而解。

这次实习,给我感触最深的还是行为态度问题。

人的能力有大有小,但只要端正态度,不抛弃,不放弃,任何人都能取得令自己满意的成绩。

在此,我由衷的感谢在这次课程设计中给了我巨大帮助的老师和同学们!附:设计模块Verilog HDL源程序2、分频器Function name:Frequency division 10Function: 1KHZ clock divide to 100HZ clockmodule fd10(clk,clk10);input clk;output clk10;reg clk10;reg[3:0] qout=0;always@(posedge clk)beginif(qout==9)beginclk10=~clk10;qout=0;endelseqout=qout+1;endendmodule 1、位选信号发生器Function name:bcFunction:location of the displaymodule bc(clk,bout);input clk;output[2:0] bout;reg[2:0] bout;always@(posedge clk)beginif(bout==3'b101)bout=3'b000;elsebout=bout+1;endendmodule5、 计时器Founction name:ltFounction:count time and output the bcd code module lt(clk10,con,clr,MH,ML,SH,SL,MSH,MSL);input clk10,con,clr;output[3:0] MH,ML,SH,SL,MSH,MSL;reg[3:0] MH,ML,SH,SL,MSH,MSL;reg c1,c2; always@(posedge clk10 or posedge clr)beginif(clr) begin{MSH,MSL}=8'h00; c1=0; endelse if(!con)begin if(MSL==9)begin MSL=0;if(MSH==9) beginMSH=0;c1=1;endelse MSH=MSH+1;end3、 多路选择器Function name:mul_one Function:output the number that it will be displaying module mul_one(out,MH,ML,SH,SL,MSH,MSL,bout); input [3:0] MH,ML,SH,SL,MSH,MSL; input[2:0] bout; output[3:0] out; reg[3:0] out; always@(bout or MH or ML or SH or SL or MSH or MSL) begin case(bout) 3'b000:out=MSL; 3'b100:out=MSH; 3'b010:out=SL; 3'b001:out=SH; 3'b101:out=ML; 3'b011:out=MH; endcase end endmodule 4、 译码器 Function name:tcFunction:bcd change toseven-segment decoder module tc(dout,in);output[7:0] dout;input[3:0] in; reg[7:0] dout; always @(in) begincase(in)4'b0000:dout=8'b11111100; 4'b0001:dout=8'b01100000;4'b0010:dout=8'b11011010;4'b0011:dout=8'b11110010; 4'b0100:dout=8'b01100110;4'b0101:dout=8'b10110110;4'b0110:dout=8'b10111110; 4'b0111:dout=8'b11100000;4'b1000:dout=8'b11111110;4'b1001:dout=8'b11110110;default:dout=8'b11111100;endcase endendmodule elsebegin MSL=MSL+1;c1=0;endendendalways @(posedge c1 or posedge clr) beginif(clr)begin {SH,SL}=8'h00;c2=0;end else if(SL==9)beginSL=0; if(SH==5)begin SH=0;c2=1;end elseSH=SH+1;endelsebeginSL=SL+1;c2=0;endendalways@(posedge c2 or posedge clr) beginif(clr)begin{MH,ML}=8'h00;endelse if(ML==9)beginML=0;if(MH==5)MH=0;elseMH=MH+1;endelseML=ML+1;endendmodule。

相关主题