汽车尾灯控制电路 verilog课设_汽车尾灯控制电路图
汽车尾灯控制电路 verilog课设由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“汽车尾灯控制电路图”。
可编程课程设计 实验报告
一、设计题目
汽车尾灯控制电路
二、设计要求
用6个发光管模拟6个汽车尾灯(左右各3个),用4个开关作为汽车控制信号,分别为:左拐、右拐、故障和刹车。
车匀速行驶时,6个汽车尾灯全灭;右拐时,车右边3个尾灯从左至右顺序亮灭;左拐时,车左边3个尾灯从右至左顺序亮灭;
故障时车6个尾灯一起明灭闪烁;刹车时,6个尾灯全亮
三、设计语言简介
VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL设计的主要特点:
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
四、程序代码
module weideng(nrst,haz,left,right,brake,lc,lb,la,ra,rb,rc,/*CLOCK_50*/clk,vga);input haz,left,right,brake;//warning,turn left,turn right,braking input nrst,/*CLOCK_50*/clk;output lc,lb,la,ra,rb,rc;//6 light output vga;reg [3:0]vga;
wire lc,lb,la,ra,rb,rc;
//wire cp;//2 HZ reg [19:0]state,next_state;
//14 states
parameter [19:0]idle=20'b00_0000_0000_0001_000_000,l1=20'b00_0000_0000_0010_001_000,l2=20'b00_0000_0000_0100_010_000,l3=20'b00_0000_0000_1000_100_000,r1=20'b00_0000_0001_0000_000_100,r2=20'b00_0000_0010_0000_000_010,r3=20'b00_0000_0100_0000_000_001,full=20'b00_0000_1000_0000_111_111,bl1=20'b00_0001_0000_0000_001_111,bl2=20'b00_0010_0000_0000_010_111,bl3=20'b00_0100_0000_0000_100_111,br1=20'b00_1000_0000_0000_111_100,br2=20'b01_0000_0000_0000_111_010,br3=20'b10_0000_0000_0000_111_001;
//position of each state
parameter [4:0] idle_pos=5'd6,l1_pos=5'd7,l2_pos=5'd8,l3_pos=5'd9,r1_pos=5'd10,r2_pos=5'd11,r3_pos=5'd12,full_pos=5'd13,bl1_pos=5'd14,bl2_pos=5'd15,bl3_pos=5'd16,br1_pos=5'd17,br2_pos=5'd18,br3_pos=5'd19;
//store status
always @(posedge clk ,negedge nrst)
begin vga=4'b0001;
if(!nrst)
state
else
state
//state transition ***
always @(haz,left,right,brake)
begin
next_state=idle;
case(1'b1)
state[idle_pos]:if(left&~haz&~right&~brake)
next_state=l1;
else if(right&~haz&~left&~brake)
next_state=r1;
else if(brake|haz|left&right)
next_state=full;
else
next_state=idle;
state[l1_pos]:if(brake)
next_state=bl1;
else if(haz&~brake)
next_state=full;
else
next_state=l2;
state[l2_pos]:if(brake)
next_state=bl1;
else if(haz&~brake)
next_state=full;
else
next_state=l3;
state[l3_pos]:next_state=idle;
state[full_pos]:if(~brake)
next_state=idle;
else
next_state=full;
state[r1_pos]:if(brake)
next_state=br1;
else if(haz&~brake)
next_state=full;
else
next_state=r2;
state[r2_pos]:if(brake)
next_state=br1;
else if(haz&~brake)
next_state=full;
else
next_state=r3;
state[r3_pos]:next_state=idle;
state[br1_pos]:if(~brake)
next_state=r1;
//else if(~brake&haz)
//next_state=full;
else
next_state=br2;
state[br2_pos]:if(~brake)
next_state=r1;
//else if(~brake&haz)
//next_state=full;
else
next_state=br3;
state[br3_pos]:if(~brake)
next_state=r1;
else
next_state=br1;
state[bl1_pos]:if(~brake)
next_state=l1;
//else if(~brake&haz)
//next_state=full;
else
next_state=bl2;
state[bl2_pos]:if(~brake)
next_state=l1;
//else if(~brake&haz)
//next_state=full;
else
next_state=bl3;
state[bl3_pos]:if(~brake)
next_state=l1;
else
next_state=bl1;
default:next_state=idle;
endcase
end
//output logic
aign la=state[3],lb=state[4],lc=state[5],ra=state[2],rb=state[1],rc=state[0];//2hz clock
/*
divn #(.WIDTH(25),.N(25000000))
CLOCK_50 u0(.clk(CLOCK_50),.rst_n(nrst),.o_clk(cp));
*/ endmodule
五、心得体会
Verilog语言是目前电路设计中不可缺少的语言之一,其在电子信息、通信、自动控制及计算机领域中的重要性日益突出。通过本次课程设计,使我对Verilog语言有了更深一步的了解,也对Quartus II软件的使用方法和设计流程也有了更进一步的认识。在课程设计过程中,我和同组同学共同讨论,期间遇到不少问题。但每一个问题我们都会认真修改、调试,并积极向老师和同学寻求帮助,直到没有错误为止。这也提高了我们独立思考与团队合作的能力。总之,此次课程设计不仅对之前可编程设计的理论学习进行了实践,更为我今后的专业学习打下了良好的基础。