当前位置:文档之家› 跑马灯设计方案EDA课程设计方案

跑马灯设计方案EDA课程设计方案

第一章设计内容与设计方案
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.1 Verilog HDL程序
module ceshi(clk,rst,Q,DIN,CLK,a);
input clk,rst;
input [1:0]DIN; //DIN为变换速度档output signed[7:0]Q; //Q为7个LED output [6:0]a; //a为数码管显示模式output CLK; //自定义时钟parameter DOUT=8'b0111_1111;
reg CLK;
reg [6:0]x;
reg [1:0]cs;
reg [7:0]Q;
reg [6:0]a;
always@(posedge clk)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
CLK=~CLK;
end
end
default begin
x<=x+1'b1;
if(x==20)begin
x<=7'b0;
CLK=~CLK;
end
end
endcase
end
always@(posedge CLK or negedge rst)begin if(!rst)begin
Q<=DOUT;cs<=2'b00;a=7'b000_0000;
end
else begin
case(cs)
0:begin Q<=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:begin Q<=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:begin Q[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:begin Q[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;
end
end
default begin
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] 王金明,杨吉斌编著.数字系统设计与Verilog HDL.北京:电子工业出版社
[4] 徐志军,徐光辉编著.CPLD/FPGA的开发与应用.北京:电子工业出版社
[5] 叶天迟主编.EDA实用技术实验及课程设计指导书.长春:自编实验指导书。

相关主题