verilog课程设计交通灯Word文档下载推荐.docx
- 文档编号:21023017
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:40.48KB
verilog课程设计交通灯Word文档下载推荐.docx
《verilog课程设计交通灯Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《verilog课程设计交通灯Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
A方向和B方向的红黄绿分别用R1、Y1、G1、R2、Y2、G2来表示。
交通灯控制器状态转换表
从状态表中可以看出,每个方向3盏灯依次按如下顺序点亮,并不断循环:
绿灯----黄灯----红灯,并且每个方向红灯亮的时间应该与另一个方向绿灯、黄灯亮的时间相等。
黄灯所起的作用是用来在绿灯后进行缓冲,以提醒行人该方向马上要禁行了。
在使能控制信号(EN)控制时系统工作,并且要求有两个控制输入信号:
即复位信号(Reset)和备用模式设置信号(Standby),在复位信号控制时,两个方向均为红灯,在备用模式设置信号控制时,两个方向均为黄灯。
1.4系统设计框图
AL
AR
AY
AG
系统采用的时钟频率为10KHZ,经分频为1HZ后送入控制计时电路,同时送
入控制计时电路的还有控制信号M2M1M0以及复位信号RST,控制交通灯的运行状态。
经处理后输出LED灯以及数码管显示电路的控制信号,从而完成整个电路的控制与实现。
时钟CLK10K分频CLK1
复位RSTM2
M1
M0
复位RST
复位RST
时钟CLK10K
图1系统设计示意图
2.交通信号控制器具体模块设计
2.1时钟分频模块设计
系统的时钟输入为10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。
分频模块主要为系统提供所需的时钟计时脉冲。
该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。
计时模块用来设定路口计时器的初值,并为扫描显示译码模块提供倒计时时间。
表1I/O管脚描述
名称
方向
位宽
功能
Clk10K
input
1
系统时钟(10KHZ)
RST
复位信号(高电平有效)
Clk1
output
分频后时钟信号(1HZ)
VerilogHDL源代码如下:
modulefenpin(clk10k,rst,clk1);
//将10K的频率分频为1
inputclk10k,rst;
outputclk1;
reg[7:
0]j;
regclk1;
always@(posedgeclk10korposedgerst)
if(rst)begin
clk1<
=0;
j<
end
elseif(j==9999)begin
=~clk1;
elsej<
=j+1;
Endmodule
2.2控制模块设计
modulecontrol(EN_in,SW1,RST,Red1,Red2,Yellow1,Yellow2,Green1,Green2);
outputRed1;
outputRed2;
outputYellow1;
outputYellow2;
outputGreen1;
outputGreen2;
input[1:
0]EN_in;
inputSW1;
inputRST;
regRed1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;
always@(EN_in,RST,SW1)
begin
if(SW1==0||RST==0){Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'
b0;
else
begin
case(EN_in)
2'
b00:
{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'
b010010;
b01:
b011000;
b10:
b100001;
b11:
b100100;
default:
endcase
end
2.3倒计时选择模块
modulecounter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_out);
outputC_out;
output[3:
0]D_OUT1;
0]D_OUT0;
inputC_CLK;
inputC_EN;
reg[3:
regC_out;
0]CData1;
0]CData0;
reg[7:
0]DATA;
always@(posedgeC_CLK)
if(RST==0||C_EN==0)
begin
C_out<
=1'
CData1<
=4'
b0000;
CData0<
if(CData0==4'
b0101&
&
CData1==4'
b0101)
begin
CData0<
C_out=1'
b1;
end
elseif(CData0!
b1001)
CData0<
=CData0+1;
C_out<
end
elseif(CData0==4'
b1001&
CData1!
b0110)
CData1<
=CData1+1;
else
always
DATA<
=8'
b01010101-((CData1<
<
4)+CData0);
if(((DATA>
>
4)&
4'
b1111)>
D_OUT1<
=(DATA>
b1111-4'
b1111;
if((DATA&
D_OUT0<
=(DATA&
b1111)-4'
b0110;
=DATA&
endmodule
2.4倒计时数码管的动态显示
moduledispselect(CLK,D_OUT);
output[1:
0]D_OUT;
inputCLK;
reg[1:
always@(posedgeCLK)
if(D_OUT<
2'
b10)
D_OUT<
=D_OUT+2'
b01;
=2'
2.5扫描显示译码模块设计
moduledispdecoder(data_in,data_out);
input[3:
0]data_in;
output[6:
0]data_out;
reg[6:
0]r_seg;
assigndata_out=r_seg;
always@(*)
case(data_in)
4'
d0:
r_seg=7'
b0000001;
d1:
b1001111;
d2:
b0010010;
d3:
b0000110;
d4:
b1001100;
d5:
b0100100;
d6:
b0100000;
d7:
b0001111;
d8:
b0000000;
d9:
b0000100;
d10:
b0001000;
defaultr_seg=7'
b1111111;
endcase
2.5.顶层文件设计
modulejtd(
Reset,
SW,
CLK,
Red1,
Red2,
Yellow1,
Yellow2,
Green1,
Green2,
SEG_Data1,
SEG_Data2,
SEG_Data3,
SEG_Data4,
//SEG_Sel
);
inputReset;
inputSW;
0]SEG_Data1;
0]SEG_Data2;
0]SEG_Data3;
0]SEG_Data4;
//output[1:
0]SEG_Sel;
wireSYNTHESIZED_WIRE_0;
wireSYNTHESIZED_WIRE_1;
wireSYNTHESIZED_WIRE_19;
wireSYNTHESIZED_WIRE_3;
wireSYNTHESIZED_WIRE_20;
wire[1:
0]SYNTHESIZED_WIRE_21;
wireSYNTHESIZED_WIRE_7;
wire[3:
0]SYNTHESIZED_WIRE_9;
0]SYNTHESIZED_WIRE_10;
0]SYNTHESIZED_WIRE_11;
0]SYNTHESIZED_WIRE_12;
//wire[3:
0]SYNTHESIZED_WIRE_14;
0]SYNTHESIZED_WIRE_15;
0]SYNTHESIZED_WIRE_16;
//wire[1:
0]SYNTHESIZED_WIRE_17;
//assignSEG_Sel=SYNTHESIZED_WIRE_17;
scanb2v_inst(.EN_in1(SYNTHESIZED_WIRE_0),
.EN_in0(SYNTHESIZED_WIRE_1),.sdata(SYNTHESIZED_WIRE_21));
counter05b2v_inst1(.C_CLK(SYNTHESIZED_WIRE_19),
.RST(Reset),.C_EN(SYNTHESIZED_WIRE_3),.C_out(SYNTHESIZED_WIRE_1),.D_OUT0(SYNTHESIZED_WIRE_11),.D_OUT1(SYNTHESIZED_WIRE_12));
fdiv1hzb2v_inst11(.clk_in(SYNTHESIZED_WIRE_20),
.clk_out(SYNTHESIZED_WIRE_19));
fdiv1khzb2v_inst12(.clk_in(CLK),
.clk_out(SYNTHESIZED_WIRE_20));
controlb2v_inst14(.SW1(SW),
.RST(Reset),.EN_in(SYNTHESIZED_WIRE_21),.Red1(Red1),.Red2(Red2),.Yellow1(Yellow1),.Yellow2(Yellow2),.Green1(Green1),.Green2(Green2));
counter55b2v_inst2(.C_CLK(SYNTHESIZED_WIRE_19),
.RST(Reset),.C_EN(SYNTHESIZED_WIRE_7),.C_out(SYNTHESIZED_WIRE_0),.D_OUT0(SYNTHESIZED_WIRE_9),.D_OUT1(SYNTHESIZED_WIRE_10));
counterselb2v_inst3(.D_IN(SYNTHESIZED_WIRE_21),
.D_OUT1(SYNTHESIZED_WIRE_7),.D_OUT0(SYNTHESIZED_WIRE_3));
datamuxb2v_inst6(.D_IN0(SYNTHESIZED_WIRE_9),
.D_IN1(SYNTHESIZED_WIRE_10),.D_IN2(SYNTHESIZED_WIRE_11),.D_IN3(SYNTHESIZED_WIRE_12),.SEL(SYNTHESIZED_WIRE_21),.D_OUT0(SYNTHESIZED_WIRE_15),.D_OUT1(SYNTHESIZED_WIRE_16));
//dispdecoderb2v_inst7(.data_in(SYNTHESIZED_WIRE_14),
//.data_out(SEG_Data));
//dispmuxb2v_inst8(.D_IN0(SYNTHESIZED_WIRE_15),
//.D_IN1(SYNTHESIZED_WIRE_16),.SEL(SYNTHESIZED_WIRE_17),.D_OUT(SYNTHESIZED_WIRE_14));
//dispselectb2v_inst9(.CLK(SYNTHESIZED_WIRE_20),
//.D_OUT(SYNTHESIZED_WIRE_17));
dispdecoderu0(.data_in(SYNTHESIZED_WIRE_11),
.data_out(SEG_Data2));
dispdecoderu1(.data_in(SYNTHESIZED_WIRE_12),
.data_out(SEG_Data1));
dispdecoderu2(.data_in(SYNTHESIZED_WIRE_9),
.data_out(SEG_Data4));
dispdecoderu3(.data_in(SYNTHESIZED_WIRE_10),
.data_out(SEG_Data3));
3小结
再一次的体验到了细心对一个编程者的重要性和程序的规范性对于程序的重要。
verilogHDL设计语言是一门很好的硬件描述语言,可以直白的描述实际的电路,实际的系统模型,易懂而且易于实现,我觉得在以后多加练习,可以对以后的学习和工作带来莫大的帮助。
这次的课程设计就是对我们的一次考核,也可以说是一次考验,平时做题目比较简单,而这次课程设计综合考核了我们的学习结果。
课程设计培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
然而从理论到实践,我在做课程设计的时间里,我明白了想学好它要重在实践,要通过不断的实际操作才能更好地学习它,但是学到了很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,遇到了各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知解得不够深刻,掌握得不够牢固,在边编学程序的过程中我几乎是重新复习课本上的知识,但这还是没能让我完成这次课程设计,通过询问同学、到网上查询资料慢慢的完善这次作业才勉强完成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog 课程设计 交通灯