EDA电子设计交通灯.docx
- 文档编号:26599103
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:23
- 大小:533.20KB
EDA电子设计交通灯.docx
《EDA电子设计交通灯.docx》由会员分享,可在线阅读,更多相关《EDA电子设计交通灯.docx(23页珍藏版)》请在冰豆网上搜索。
EDA电子设计交通灯
电子技术课程设计
——EDA交通灯设计任务
一、EDA课程设计目标
1.掌握用VerilogHDL语言的设计方法;
2.掌握VerilogHDL语言程序的基本结构,学习编写简单的VerilogHDL设计实用程序;
3.了解Quartus
软件的基本使用方法,数字电路系统的设计流程,掌握Quartus
的使用方法;
4.在Quartus
环境下,对其设计功能进行编程、仿真、并下载到EDA试验箱的FPGA芯片,验证其设计的正确性。
二、题目
1.设计流程图
2.使用说明
建立新的工程
●FileNewProjectWizard…或点击对应符号;输入工程所在目录和两个工程文件名,两个文件要同名;
●选择器件CycloneEP1C6Q240C8;
●不选用第三方设计工具。
编写程序
编译
●ProcessingStartCompilation开始编译,直至检查成功,0错误
建立波形分析文件
●FileNewOthersVectorWaveformFile…;
●EditInsertNodeorBus…或在弹出窗口的Name区域点击左键选择InsertNodeorBus…;
●在弹出窗口中点击NodeFinder…;
●在弹出窗口中点击点击List;注意Filter=Pins:
unassigned
●在左侧窗口选择待分析节点并移至右侧窗口,点击Ok;
●EditEndTime…设置分析结束时间
●EditGridSize…设置分析网格时间
●在波形分析文件中利用左侧工具箱设置分析节点的初值;
●点击文件保存符号,用默认名保存波形分析文件;
波形仿真分析
●全编译ProcessingStartCompilation或点击对应符号;
可编程系统的仿真一般分为功能仿真和时序仿真。
其中功能仿真,主要是检查逻辑功能是否正确。
●选择ToolsSimulatorTool,在弹出窗口,在“SimulatorMode”下拉列表框中选择“Functional”项,在“Simulationinput”栏中指定波形激励文件。
单击“GeneratorFunctionalSimulatorNetlist”按钮,生成功能仿真网表文件。
●点击“Start”按钮,开始功能仿真。
仿真计算完成后,点击“Report”按钮,打开仿真结果波形。
●观察输出波形,检查是否满足设计要求。
●ProcessingSimulationDebug可以设置编译中断条件
工程的分析与综合
●分析与综合时其设置均采用默认设置。
●ProcessingStartStartAnalysis&Synthesis或对点击应符号。
生成布线所需文件。
布线布线有多种方法,最简单的是利用PinPlanner工具。
●AssingnmentsPinPlanner或点击对应符号
●点击节点将其拖入所对应的管脚号
●ProcessingStartStartI/OAssingnmentsAnalysis或点击对应符号;
●ProcessingStartStartTimingAnalyzer或点击对应符号;
●将输入、输出信号分配引脚,引脚锁定;
●一定要存盘;
●再次重新全编译ProcessingStartCompilation或点击对应符号;
●注意检查编译报告;
●编译通过,得到*.sof文件;
●准备下载;
下载编程及配置
●用下载电缆将计算机并口和实验设备连接起来,接通电源。
●选择ToolsProgrammer菜单,打开Programmer窗口。
●在开始编程之前,必须正确设置编程硬件。
点击“HardwareSetup”按钮,打开硬件设置口。
●点击“AddHardware”打开硬件添加窗口,在“Hardwaretype”下拉框中选择“ByteBlasterMVorByteBlasterII”,“Port”下拉框中选择“LPT1”,点击OK按钮确认,关闭HardwareSetup窗口,完成硬件设置
●将模式mode选为JTAG方式下载。
●将Program/Configure选中。
●点击“Start”按钮,开始编程。
三.设计思路
1.交通灯控制器逻辑电路的EDA设计
设计任务与要求:
设计一个基于FPGA的红绿灯交通信号控制器。
要求如下:
1一般情况下,保持主干道通畅,主干道绿灯亮,支干道红灯亮,并且主干道绿灯亮的时间不得少于50秒。
2当主干道绿灯亮超过50秒,且支干道有车时,主干道红灯亮,支干道绿灯亮,但支干道绿灯亮的时间不得超过30秒。
3每次主干道或支干道绿灯变红灯时,黄灯先亮5秒。
4余外部硬件电路方面包括:
两组红绿黄灯(配合十字路口的双向指挥系统控制)、七段显示器和发光二极管(配合绿灯时倒计时显示)、一组手动和自动开关(针对交通警察指挥交通控制使用)。
2.设计分析
系统应分两部分,分别控制两个方向的交通灯的亮灭。
每个部分应完成在时钟信号下的亮灯顺序和亮灯时间控制,并且所有的时间信息要用七段显示器来显示。
最后用拨码开关完成手动控制亮灯。
时钟信号选在20MHz方波,使能端选一号拨码开关。
3.系统总体方框图
四.程序设计
1.子程序设计和说明
①分频获得2Hz时钟信号程序设计
always@(posedgeclk2)
begin
if(count==9999999)
begin
count<=0;
end
else
begin
count<=count+1;
end
end
说明:
clk为20MHz固定信号,count作为中间变量,使得每秒翻转一次,即可作为2Hz时钟信号。
②灯亮灯状态控制程序设计
always@(posedgeclkornegedgereset)
begin:
statereg
if(~reset)currentstate<=s0;
elsecurrentstate<=nextstate;
end
always@(sorcurrentstateortlortsorty)
begin:
fsm
case(currentstate)
s0:
begin
nextstate=(tl&&s)?
s1:
s0;
st=(tl&&s)?
1:
0;
end
s1:
begin
nextstate=(ty)?
s2:
s1;
st=(ty)?
1:
0;
end
s2:
begin
nextstate=(ts||~s)?
s3:
s2;
st=(ts||~s)?
1:
0;
end
s3:
begin
nextstate=(ty)?
s0:
s3;
st=(ty)?
1:
0;
end
endcase
end
说明:
currentstate为当前状态,nextstate为下一状态,s为支干道是否有车状态,st为转换状态变量。
Clk为1hz输入信号。
亮灯时间及7段数码管显示管显示控制程序设计
always@(posedgeclkornegedgereset)
begin:
counter
if(~reset)
{timerh,timerl}<=8'b00000000;
elseif(st)
{timerh,timerl}<=8'b00000000;
elseif((timerh==4)&(timerl==9))
begin{timerh,timerl}<={timerh,timerl};
end
elseif(timerl==9)
begintimerh<=timerh+1;timerl<=0;
end
else
begintimerh<=timerh;timerl<=timerl+1;
end
end
always@(timerlortimerh)
begin
if(zg)begin
case(timerh)
4'B0000:
ch1<=8'B01100110;
4'B0001:
ch1<=8'B11110010;
4'B0010:
ch1<=8'B11011010;
4'B0011:
ch1<=8'B01100000;
4'B0100:
ch1<=8'B11111100;
endcase
case(timerl)
4'B1001:
ch2<=8'B11111100;
4'B1000:
ch2<=8'B01100000;
4'B0111:
ch2<=8'B11011010;
4'B0110:
ch2<=8'B11110010;
4'B0101:
ch2<=8'B01100110;
4'B0100:
ch2<=8'B10110110;
4'B0011:
ch2<=8'B10111110;
4'B0010:
ch2<=8'B11100000;
4'B0001:
ch2<=8'B11111110;
4'B0000:
ch2<=8'B11110110;
endcase
endelse
if(fg)begin
case(timerh)
4'B0000:
ch1<=8'B11011010;
4'B0001:
ch1<=8'B01100000;
4'B0010:
ch1<=8'B11111100;
endcase
case(timerl)
4'B1001:
ch2<=8'B11111100;
4'B1000:
ch2<=8'B01100000;
4'B0111:
ch2<=8'B11011010;
4'B0110:
ch2<=8'B11110010;
4'B0101:
ch2<=8'B01100110;
4'B0100:
ch2<=8'B10110110;
4'B0011:
ch2<=8'B10111110;
4'B0010:
ch2<=8'B11100000;
4'B0001:
ch2<=8'B11111110;
4'B0000:
ch2<=8'B11110110;
endcase
end
elseif(zy||fy)begin
case(timerl)
4'B0000:
ch2<=8'B01100110;
4'B0001:
ch2<=8'B11110010;
4'B0010:
ch2<=8'B11011010;
4'B0011:
ch2<=8'B01100000;
4'B0100:
ch2<=8'B11111100;
endcase
end
end
assignty=(timerh==0)&(timerl==4);
assignts=(timerh==2)&(timerl==9);
assigntl=(timerh==4)&(timerl==9);
说明:
timeh为高位时间,timel为低位时间
红黄绿亮灯显示程序设计
always@(currentstate||enable)
begin
if(~enable)
begin
case(currentstate)
s0:
begin
{zg,zy,zr}=3'b100;redz=8'b00000000;greenz=8'b11100000;
{fg,fy,fr}=3'b001;redf=8'b11100000;greenf=8'b00000000;
end
s1:
begin
{zg,zy,zr}=3'b010;redz=8'b11100000;greenz=8'b11100000;
{fg,fy,fr}=3'b001;redf=8'b11100000;greenf=8'b00000000;
end
s2:
begin
{zg,zy,zr}=3'b001;redz=8'b11100000;greenz=8'b00000000;
{fg,fy,fr}=3'b100;redf=8'b00000000;greenf=8'b11100000;
end
s3:
begin
{zg,zy,zr}=3'b001;redz=8'b11100000;greenz=8'b00000000;
{fg,fy,fr}=3'b010;redf=8'b11100000;greenf=8'b11100000;
end
endcase
end
elsebegin
case({szg,szy,szr})
3'b100:
begin
redz=8'b00000000;greenz=8'b11100000;
end
3'b010:
begin
redz=8'b11100000;greenz=8'b11100000;
end
3'b001:
begin
redz=8'b11100000;greenz=8'b00000000;
end
endcase
case({sfg,sfy,sfr})
3'b100:
begin
redf=8'b00000000;greenf=8'b11100000;
end
3'b010:
begin
redf=8'b11100000;greenf=8'b11100000;
end
3'b001:
begin
redf=8'b11100000;greenf=8'b00000000;
end
endcase
end
end
说明:
点阵灯的显示
显示电路程序设计
always@(negedgecount[8])
begin
if(state==2'b11)
state<=0;
elsestate<=state+1;
case(state)
2'b00:
beginif(zg||fg||zy||fy)beginseg7<=ch2;scan<=8'b00000001;endend
2'b01:
beginif(zg||fg)beginseg7<=ch1;scan<=8'b00000010;endend
2'b10:
beginseg7<=greenz;red<=redz;scan<=8'b00011100;end
2'b11:
beginseg7<=greenf;red<=redf;scan<=8'b11100000;end
default:
seg7<=8'b00000000;
endcase
end
说明:
显示部分用扫描法实现,state作为扫描中间变量,对每个七段显示器和点阵进行扫描并赋值。
ch1、ch2为两方向计数器数字。
count[8]为count的弟8位数据,是一个高频信号用作扫描的时钟信号。
2.上机实现过程截图
①编译过程
②仿真
③芯片选择
5脚锁定
⑤下载
五.总结、体会、建议。
在这次试验设计中,我学到了很多。
在前一阶段我们3人组做了一个自动显示红黄绿灯的没有主支干道之分的程序,在后来的调试中始终不能达到老师要求的智能性能,没有是否有车和50秒、30秒的自动调节功能,之后又重新制作,重新修改,达到了老师要求的设计成果。
这次试验设计是漫长的,艰辛的,长达一周的每天上午下午晚上都把自己埋在实验室的学习与创作,试验压力大,一点不能放松,让我懂得了试验成果的来之不易,和我们需要的刻苦钻研精神。
我们将更加努力学习基础专业知识,努力钻研,创造更加辉煌的未来。
六.附件:
最后调试通过的源代码
moduletrafficlight(clk,s,reset,enable,szg,szy,szr,sfg,sfy,sfr,clk2,seg7,warning,red,scan);
inputclk,s,reset,clk2,enable/*shouzi*/,szg,szy,szr,sfg,sfy,sfr;
outputseg7,warning,red,scan;
regzg,zy,zr,fg,fy,fr;
reg[3:
0]timerh,timerl;
reg[7:
0]ch1,ch2;
reg[23:
0]count;
reg[7:
0]seg7,scan,red,green,redz,greenz,redf,greenf;
wiretl,ts,ty;
regst;
reg[1:
0]currentstate,nextstate,state;
parameters0=2'b00,s1=2'b01,s2=2'b11,s3=2'b10;
assignwarning=zg|fg;
always@(posedgeclk2)
begin
if(count==9999999)
begin
count<=0;
end
else
begin
count<=count+1;
end
end
always@(posedgeclkornegedgereset)
begin:
statereg
if(~reset)currentstate<=s0;
elsecurrentstate<=nextstate;
end
always@(sorcurrentstateortlortsorty)
begin:
fsm
case(currentstate)
s0:
begin
nextstate=(tl&&s)?
s1:
s0;
st=(tl&&s)?
1:
0;
end
s1:
begin
nextstate=(ty)?
s2:
s1;
st=(ty)?
1:
0;
end
s2:
begin
nextstate=(ts||~s)?
s3:
s2;
st=(ts||~s)?
1:
0;
end
s3:
begin
nextstate=(ty)?
s0:
s3;
st=(ty)?
1:
0;
end
endcase
end
always@(posedgeclkornegedgereset)
begin:
counter
if(~reset)
{timerh,timerl}<=8'b00000000;
elseif(st)
{timerh,timerl}<=8'b00000000;
elseif((timerh==4)&(timerl==9))
begin{timerh,timerl}<={timerh,timerl};
end
elseif(timerl==9)
begintimerh<=timerh+1;timerl<=0;
end
else
begintimerh<=timerh;timerl<=timerl+1;
end
end
always@(timerlortimerh)
begin
if(zg)begin
case(timerh)
4'B0000:
ch1<=8'B01100110;
4'B0001:
ch1<=8'B11110010;
4'B0010:
ch1<=8'B11011010;
4'B0011:
ch1<=8'B01100000;
4'B0100:
ch1<=8'B11111100;
endcase
case(timerl)
4'B1001:
ch2<=8'B11111100;
4'B1000:
ch2<=8'B01100000;
4'B0111:
ch2<=8'B11011010;
4'B0110:
ch2<=8'B11110010;
4'B0101:
ch2<=8'B01100110;
4'B0100:
ch2<=8'B10110110;
4'B0011:
ch2<=8'B10111110;
4'B0010:
ch2<=8'B11100000;
4'B0001:
ch2<=8'B11111110;
4'B0000:
ch2<=8'B11110110;
endcase
endelse
if(fg)begin
case(timerh)
4'B0000:
ch1<=8'B11011010;
4'B0001:
ch1<=8'B01100000;
4'B0010:
ch1<=8'B11111100;
endcase
case(timerl)
4'B1001:
ch2<=8'B11111100;
4'B1000:
ch2<=8'B01100000;
4'B0111:
ch2<=8'B11011010;
4'B0110:
ch2<=8'B11110010;
4'B0101:
ch2<=8'B01100110;
4'B0100:
ch2<=8'B10110110;
4'B0011:
ch2<=8'B10111110;
4'B0010:
ch2<=8'B11100000;
4'B0001:
ch2<=8'B11111110;
4'B0000:
ch2<=8'B11110110;
endcase
end
elseif(zy||fy)begin
case(timerl)
4'B0000:
ch2<=8'B01100110;
4'B0001:
ch2<=8'B11110010;
4'B0010:
ch2<=8'B11011010;
4'B0011:
ch2<=8'B01100000;
4'B0100:
ch2<=8'B11111100;
endcase
end
end
assignty=(timerh==0)&(timerl==4);
assignts=(timerh==2)&(timerl==9);
assigntl=(timerh==4)&(timerl==9);
always@(currentstate||enable)
begin
if(~enable)
begin
case(currentstate)
s0:
begin
{zg,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 电子设计 交通灯