跑马灯设计EDA课程设计docx.docx
《跑马灯设计EDA课程设计docx.docx》由会员分享,可在线阅读,更多相关《跑马灯设计EDA课程设计docx.docx(10页珍藏版)》请在冰豆网上搜索。
跑马灯设计EDA课程设计docx
第一章设计内容与设计方案
1.1课程设计内容
控制8个LED进行花样性显示。
设计4种显示模式:
s0,从左到右逐个点亮LED;s1,从右到左逐个点亮LED;s2,从两边到中间逐
个点亮LED;s3,从中见到两边逐个点亮LED。
4种模式循环切换,复位键(rst)控制系统的运行停止。
数码管显示模式编号。
可预置彩灯变换速度,4档快、稍快、中速、慢速,默认工作为中速。
1.2设计方案
在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,以及平时实验的具体操作内
容,利用硬件描述语言HDL,EDA软件QuartusⅡ和硬件平台cycloneⅡFPGA进行一个简单的电子系统设计,
本次课程设计采用
Verilog
HDL硬件描述语言编写控制程序,应用
Quartus
Ⅱ软件实现仿真测试。
采
用FPGA芯片对
LED灯进行控制,使其达到流水跑马灯显示的效果,
LED灯采用共阳极接法,当给它一个低
电平时,LED点亮,我们利用移位寄存器使各输出口循环输出高低电平,达到控制的目的。
第二章设计原理
2.1设计原理及设计流程
本次试验我所完成的内容是跑马灯的设计,下面我简单的进行一下原理的阐述。
跑马灯课程设计的要求是控制8个LED进行花样显示,设计四种显示模块:
第一种显示是从左向右逐
个点亮LED。
第二种显示:
从右向左逐个点亮LED。
第三种显示:
从两边向中间逐个点亮LED。
第四种显示:
从中间到两边逐个点亮LED。
四种显示模式循环切换,并带有一位复位键控制系统的运行停止。
为了完成
要求的效果显示,由于要求比较简单,所以不用分为很多模块来具体控制,所以我先择利用移位寄存器来
完成灯的点亮,我们将LED灯采用共阳极接法,当给于低电平时点亮,那么当我们需要点亮某位LED灯时,
只需在该位上赋予低电平即可,比如:
如果我们要实现8个数码灯从左到右依次点亮,那么我们就可以给
这8个数码灯分别赋值10000000,经过一段时间的延时后再给其赋值01000000,再经过一段时间延时后
再给其赋值00100000,依次类推,则最后一种赋值状态为00000001,这样就得到了相应的现象。
同理,
要实现数码灯从右向左依次点亮,从中间向两端依次点亮,从两端向中间依次点亮都可以采用这样赋值的
方法。
为了达到四种显示模式循环切换的目的,可以将以上的所有赋值语句以顺序语句的形式置于进程中,
这样在完成了一种显示方式后就会自动进入下一种设定好的显示模式,如此反复循环。
当需要程序复位时,
只需按下rst键即可,程序不管走都那里,执行那条语句,只要确定复位键按下时,程序立刻返回到程序
执行语句的第一步,程序接着进行新的循环点亮。
第三章设计程序
3.1VerilogHDL程序
moduleceshi(clk,rst,Q,DIN,CLK,a);
inputclk,rst;
input[1:
0]DIN;
//DIN为变换速度档
outputsigned[7:
0]Q;
//Q为7个LED
output[6:
0]a;
//a为数码管显示模式
outputCLK;
//自定义时钟
parameterDOUT=8'b0111_1111;
reg
CLK;
reg
[6:
0]x;
reg
[1:
0]cs;
reg
[7:
0]Q;
reg
[6:
0]a;
always@(posedgeclk)begin
x<=7'b0000000;CLK=0;
case(DIN)
0:
begin
x<=x+1'b1;
if(x==20)begin
x<=7'b0;
CLK=~CLK;
end
end
1:
begin
x<=x+1'b1;
if(x==15)begin
x<=7'b0;
CLK=~CLK;
end
end
2:
begin
x<=x+1'b1;
if(x==10)begin
x<=7'b0;
CLK=~CLK;
end
end
3:
begin
x<=x+1'b1;
if(x==5)begin
x<=7'b0;
CLK=~CLK;
end
end
defaultbegin
x<=x+1'b1;
if(x==20)begin
x<=7'b0;
CLK=~CLK;
end
end
endcase
end
always@(posedgeCLKornegedgerst)begin
if(!
rst)begin
Q<=DOUT;cs<=2'b00;a=7'b000_0000;
end
elsebegin
case(cs)
0:
beginQ<=Q>>1;Q[7]<=1'b1;a=7'b0111111;
if(Q==8'b1111_1110)begin
Q<=8'b1111_1101;
cs<=2'b01;
end
end
1:
beginQ<=Q<<1;Q[0]<=1'b1;a=7'b0000_110;
if(Q==8'b0111_1111)begin
Q<=8'b0111_1110;
cs<=2'b10;
end
end
2:
beginQ[7:
4]<=Q[7:
4]>>1;
Q[3:
0]<=Q[3:
0]<<1;
Q[7]<=1'b1;
Q[0]<=1'b1;a=7'b1011_011;
if(Q==8'b1110_0111)begin
Q<=8'b1101_1011;
cs<=2'b11;
end
end
3:
beginQ[7:
4]<=Q[7:
4]<<1;
Q[3:
0]<=Q[3:
0]>>1;
Q[4]<=1'b1;
Q[3]<=1'b1;a=7'b100_1111;
if(Q==8'b0111_1110)begin
Q<=8'b0111_1111;
cs<=2'b00;
end
end
defaultbegin
Q<=DOUT;
cs<=2'b00;
a=7'b0000_000;
end
endcase
end
end
endmodule
第四章设计结果及仿真波形
4.1设计结果
图1顶层文件原理图
4.2仿真波形
4.3仿真结果分析
当输入DIN为00时选择慢速档,CLK的周期大约为20us,随着CLK上升沿的到来输出Q做移位变化,
开始从左向右移,数码管段码输出
a显示
0,然后从右向左移,数码管段码输出
a显示
1,然后从中间向
两边移,数码管段码输出
a显示
2,然后从两边向中间移,数码管段码输出
a显示
3,之后循环显示,当
按下复位键
rst
时系统运行停止,第一个灯点亮,数码管无显示。
当输入
DIN为
01时选择中速档,
CLK的
周期大约为
15us,执行以上循环显示。
当输入
DIN为
10时选择稍快档,
CLK的周期大约为
10us,执行以
上循环显示。
当输入
DIN为
11时选择快速档,
CLK的周期大约为
5us,执行以上循环显示。
第五章设计总结
通次有关于EDA技的程的学与用,我基本了解了EDA技的相关用,也掌握了EDA的相关件Quartus7.2的最基的使用方法,丰富了我的手段,也我了解了更多的仿真方法。
在上机操作的程中,开始我遇到了很多的困,件的不熟悉以及原理掌握的不透,使
得开始的候步,但是最的模型的及仿真后,我基本掌握了件的使用
方法,通件仿真及各个参数的置,我不断仿真出来的波形。
期我也了解到,然
件的仿真功能很大,但是是需要操作人仔的行察及的,否也容易出仿真。
次的学开了我的野,使我了解了更多的方面的用,在生用方面的用等,
以及方面的展方向等⋯⋯随着微子技和算机技的不断展,在涉及通信、国防、航天、工
自化、器表等域的子系工作中,EDA技的含量正以惊人的速度上升,它已成当今
子技展的前沿之一。
EDA技展迅猛,完全可以用日新月异来描述。
EDA技的用广泛,在
已涉及到各行各。
EDA水平不断提高,工具于完美的地步,所以我更加多多掌握方面的
知。
第六章参考文献
[1]潘松、黄继业编著.EDA技术与VHDL,北京:
清华大学出版社
[2]边计年主编.用VHDL设计电子线路,北京:
清华大学出版社
[3]王金明,杨吉斌编著.数字系统设计与VerilogHDL.北京:
电子工业出版社
[4]徐志军,徐光辉编著.CPLD/FPGA的开发与应用.北京:
电子工业出版社
[5]叶天迟主编.EDA实用技术实验及课程设计指导书.长春:
自编实验指导书