用verilog语言编写交通灯程序

合集下载

verilog课程设计交通灯

verilog课程设计交通灯

verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。

具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。

二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。

具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。

三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。

首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。

四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。

此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。

《FPGA设计与应用》交通灯实验一

《FPGA设计与应用》交通灯实验一

《FPGA设计与应用》交通灯实验
一、实验目的和要求
实验目的:
1. 综合运用 Verilog HDL 语言进行时序设计。

实验要求:
1. 两个方向各种灯亮的时间能够进行设置和修改
二、实验内容和原理
1. 编写时间控制程序,利用交通灯实验子板,实现东西,南北向的交通灯计数并亮灯的程序;
2.子板实现所有显示方面的功能,包括十进制倒数计数和红绿黄三色灯的轮流点亮。

三、主要仪器设备
电脑、VIVADO软件
四、操作方法与实验步骤
1.为了在八段数码管上正确显示十进制数据,设计一个函数,程序即上述实验五中的数码管封装模块。

2、将实验板上电,下载程序到 FPGA 芯片中。

3、观察实验结果。

五、实验数据记录和处理
综合:
程序:
六、实验结果与分析
实验仿真结果:
实物操作:
七、讨论和心得
通过这次实验,我加深了用Verilog语言来进行时序设计方法的理解,能够编写简单的时间控制程序,让我verilog语法的运用更加熟练,在实验中还用到了之前学到的模块调用,加深了我对之前知识的理解。

通过本次实验,我不仅学到了关于Verilog的知识,同时也让我感觉到了思考的重要性。

交通灯控制程序

交通灯控制程序

1引言 (2)1.1编写目的 (2)1.2背景 (2)1.3定义 (2)1.4参考资料 (2)2总体设计 (2)2.1需求规定 (2)2.2运行环境 (2)2.3基本设计概念和处理流程 (3)2.4结构 (3)2.5功能器求与程序的关系 (3)2.6人工处理过程 (3)2.7尚未问决的问题 (3)3接口设计 (3)3.1用户接口 (3)3.2外部接口 (3)3.3内部接口 (4)4运行设计 (4)4.1运行模块组合 (4)4.2运行控制 (4)4.3运行时间 (4)5系统数据结构设计 (4)5.1逻辑结构设计要点 (4)5.2物理结构设计要点 (4)5.3数据结构与程序的关系 (4)6系统出错处理设计 (5)6.1出错信息 (5)6.2补救措施 (5)6.3系统维护设计 (5)概要设计说明书1引言1.1编写目的创建一个可供日常交通灯使用的程序,目标读者为交通灯控制人员。

1.2背景说明:a.交通路口复杂交通信号灯的设计b.任务提出者,开发者:陈磊用户:交通指挥系统设计环境:使用Verilog HDL语言进行设计使用Quartus 2编程环境进行开发。

1.3定义ORDER 选择信号ROAD 亮灯控制信号EN5 5秒延时使能信号LIN5 5秒延时终止信号EN25 25秒延时使能信号LIN25 25秒延时终止信号RST 系统复位信号CLK 系统时钟信号1.4参考资料Verilog HDL数字系统设计与应用2总体设计2.1需求规定输入项目:CLK 系统时钟信号RST 系统复位信号输出项目:ROAD 亮灯控制信号,ROAD=00,红灯亮;ROAD=01,黄灯亮;ROAD=10,绿灯亮;ROAD=11,黄灯亮。

处理要求:根据ORDER的不同值,使相应的灯发亮。

2.2运行环境运行环境:。

Quartus II 9.02.3基本设计概念和处理流程2.4结构ORDER 选择某一灯的选择变量ROAD 控制某一灯亮的控制变量2.5功能器求与程序的关系2.6人工处理过程人工输入ORDER的值,根据ORDER的不同值,相应的灯变亮2.7尚未问决的问题创建一个稳定的时钟源3接口设计3.1用户接口light(red,amber,green,0,order)ORDER为控制变量,由它决定让哪一盏灯发亮。

四种亮灯方式自由切换的跑马灯(用veriloghdl语言编写的跑马灯程序)

四种亮灯方式自由切换的跑马灯(用veriloghdl语言编写的跑马灯程序)

四种亮灯方式自由切换的跑马灯(用veriloghdl语言编写的跑马灯程序)//产生四种亮灯方式的跑马灯module zmk(mclk,reset,type,ledout);input mclk,reset;input[1:0] type;output [5:0] ledout;reg [5:0] ledout;reg [24:0] count;reg [4:0] state;wire clk;//分频器always@(posedge mclk)count=count+1;assign clk=count[23];//当type变化的时候对state进行清零reg[1:0] type_delay;wire type_change;always @ (posedge clk)type_delay <= type;assign type_change=(type!=type_delay)?1:0;always @ (posedge clk )beginif(reset==0) //初始化语句begin ledout=6'b000000;state<=0;endelseif(type_change)//对state进行清零state<=4'b1;elsebegincase(state)4'b0001:ledout=6'b011111;//第一个灯亮4'b0010:ledout=6'b101111;//第二个灯亮4'b0011:ledout=6'b110111;//第三个灯亮4'b0100:ledout=6'b111011;//第四个灯亮4'b0101:ledout=6'b111101;//第五个灯亮4'b0110:ledout=6'b111110;//第六个灯亮4'b0111:ledout=6'b111101;//第五个灯亮4'b1000:ledout=6'b111011;//第四个灯亮4'b1001:ledout=6'b110111;//第三个灯亮4'b1010:ledout=6'b101111;//第二个灯亮default :ledout=6'b000000;endcasestate=state+1; //计数器产生state的各种状态if(state==4'b1011)state=5'b00001;endelseif(type==2'b01)begincase(state)4'b0001:ledout=6'b101010;4'b0010:ledout=6'b010101;default :ledout=6'b000000;endcasestate=state+1;if(state==4'b0011)state=5'b00001;endelsebegincase(state)4'b0001:ledout=6'b110011;4'b0010:ledout=6'b101101;4'b0011:ledout=6'b011110;4'b0100:ledout=6'b101101; default :ledout=6'b000000; endcasestate=state+1;if(state==4'b0101)state=5'b00001; endelseif(type==2'b11)begincase(state)5'b00001:ledout=6'b111110;5'b00010:ledout=6'b111101;5'b00011:ledout=6'b111011;5'b00100:ledout=6'b110111;5'b00101:ledout=6'b101111;5'b00110:ledout=6'b011111;5'b00111:ledout=6'b001111;5'b01000:ledout=6'b010111;5'b01001:ledout=6'b011011;5'b01010:ledout=6'b011101;5'b01011:ledout=6'b011110;5'b01100:ledout=6'b011100;5'b01101:ledout=6'b011010;5'b01110:ledout=6'b010110;5'b01111:ledout=6'b001110;5'b10000:ledout=6'b000110;5'b10001:ledout=6'b001010;5'b10010:ledout=6'b001100;5'b10011:ledout=6'b001000;5'b10100:ledout=6'b000100;5'b10101:ledout=6'b001000;5'b10110:ledout=6'b000000;5'b10111:ledout=6'b111111;5'b11000:ledout=6'b000000;5'b11001:ledout=6'b111111;5'b11010:ledout=6'b000000;default :ledout=6'b000000;endcasestate=state+1;if(state==5'b11011)state=5'b00001; end endendmodule。

实验五交通灯控制

实验五交通灯控制
*
操作规则实现电路
功能:根据交通红绿灯控制器的功能要求,确定不同工作状态下计时器的计数值。可用8位计数器来实现定时计数。
正常运行时,计数器按照规定的定时要求加1计数;若要人工放行某方向,只要使计时器运行到该放行状态的最后一刻时,计时器保持此时的计数值,使红绿灯信号生成器暂停状态的转移即可。
*
再按下键2,表示欲人工放行B方向,则相应LED有显示;同时两个方向的红绿灯按正常运行规律自动切换,当运行到放行B方向时,则保持放行该方向。
再按下键3,表示清除人工方向的控制,则交通灯开始自动转换红黄绿灯的状态。
3
2
1
4
*
1
2
3
4
5
6
预习时请画出其状态转移图。
*
设计方案的选择
01
图文混合设计方法:先将电路划分为几个子模块,每个子模块由Verilog HDL语言描述实现,然后生成逻辑符号,顶层文件采用图形文件来实现。
02
纯文本描述方法:每个子模块和顶层电路的连接关系都采用Verilog HDL语言描述实现,对子模块的调用采用模块元件例化的方法。
起始状态的选择
采用log2N个触发器来表示这N个状态 采用N个触发器来表示这N个状态——称为一位热码状态机编码(One-Hot State Machine Encoding)。
状态编码
采用Verilog HDL语言实现基于状态机的设计,就是在时钟信号的触发下,完成两项任务: 用case或if-else语句描述出状态的转移; 描述状态机的输出信号。
在线校验
下载后,仔细观察:红绿灯应按设定的时间规律自动切换,D1~D8八个LED分别对应的是:A方向的红黄绿,B方向的红黄绿,A方向的放行状态,B方向的放行状态。

verilog实验报告流水灯数码管秒表交通灯

verilog实验报告流水灯数码管秒表交通灯

流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。

实验仪器:FPGA开发板一块,计算机一台。

实验原理:当一个正向的电流通过LED时,LED就会发光。

当阳极的电压高于阴极的电压时,LED就会有电流通过。

当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。

实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。

module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现

EDA实验报告:基于VHDL语言的交通灯控制系统设计与实现
(k1=0)
图为k1=0时的输出状态s1,输出恒为011110。即亮灯为R1,y2。保持时间1S。
(k2=0)
上图为k2=0时的输出状态s2,输出恒为101011。即亮灯为G1,R2。保持时间2S。
(k3=0)
上图为k3=0时的输出状态s3,输出恒为110011。即亮灯为R1,G2。保持时间1S。
四、小结及心得体会
else
if counter<5 then
next_state<=s3;
else
next_state<=s0;
end if;
end if;
end if;
end if;
end if;
end case;
end process;
ouput:process(current_state)
begin ——显示程序
begin
u1: jiaotongdeng port map(
clk=>clki,
k0=>k0,
k1=>k1,
k2=>k2,
k3=>k3,
r1=>r1,r2=>r2,g1=>g1,g2=>g2,y1=>y1,y2=>y2
);
u2: div port map(clk=>clk1,clk_out=>clki);
end if;
end if;
end if;
when s3=>
if k0='0' then
next_state<=s0;
else
if k1='0' then
next_state<=s1;

交通灯控制器数电课程设计

交通灯控制器数电课程设计

交通灯控制器数电课程设计交通灯控制器是一个常见的数电课程设计项目,下面是一个简单的交通灯控制器的设计方案:1. 需求分析:- 交通灯要能够按照规定的时间间隔不断切换状态。

- 交通灯的状态包括红灯、黄灯和绿灯,分别对应停止、警告和通行状态。

- 红灯、黄灯和绿灯的时间间隔可以根据实际需要进行调整。

2. 设计方案:- 使用数字时钟芯片,如NE555,来生成固定频率的时钟信号。

- 使用多路选择器,如74LS151,来选择不同的灯的状态输出。

- 使用逻辑门电路,如与门和或门,来实现灯的状态切换。

3. 设计步骤:- 使用时钟芯片来产生一个频率为1Hz的时钟信号。

- 使用分频器电路,如74LS90,将时钟信号的频率分为三等份,分别用于控制红灯、黄灯和绿灯的持续时间。

- 使用多路选择器74LS151,根据时钟信号的状态与分频器的控制信号,选择对应的灯输出高电平或低电平。

- 使用逻辑门电路,通过组合逻辑将时钟信号和选择器输出的灯状态进行控制,实现交通灯的状态切换。

4. 硬件设计:- 使用电路实验板、面包板或PCB板等硬件平台进行电路连接。

- 导入时钟芯片、分频器、多路选择器和逻辑门等器件。

- 连接器件之间的引脚,构建交通灯控制器电路。

5. 软件设计:- 使用VHDL、Verilog或其他HDL语言进行交通灯控制器的逻辑设计和仿真。

- 根据交通灯的时序要求设置时钟频率、分频器的初始状态和选择器的状态等参数。

- 通过仿真软件进行功能验证和时序分析,优化电路设计。

6. 实现与调试:- 将硬件连接完成后,使用示波器、逻辑分析仪等仪器对电路进行调试。

- 观察交通灯的状态是否按照预期进行切换。

- 根据实际需要调整各个灯的持续时间和时钟频率等参数,进行效果调试。

7. 总结:- 对交通灯控制器的设计进行总结和评估,包括可靠性、灵活性和可扩展性等方面。

- 提出改进方案,进一步优化交通灯控制器的设计。

注意事项:- 在设计过程中,要遵守相关的电路布线规范和安全操作规程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

交通灯
一、实验目的
写一个交通灯,要求:
①有东西南北四个方向,两组交通灯轮流交替变换,其中,红灯时
间为30个时间单位,绿灯时间为25个时间单位,黄灯时间为5个时间单位。

最后用modelsim软件进行仿真。

②要求设计是一个可综合设计。

二、实验原理
根据实验要求的逻辑功能描述,可以分析得出原理图如下:
控制器即可以设计为一个有限状态机的形式:
E-W方向S-N方向
状态R Y G R Y G
100100IDLE
100001S1
100010S2
001100S3
010100S4根据实验要求画出控制器的状态转移图如下:
三、代码
1、源代码
(1)控制器模块
module traffic_lights(clk,rst,count,ew,sn);
input clk,rst;
input[5:0] count;
output[2:0] ew,sn;
reg[2:0] ew,sn;
reg[3:0] state;
parameter Idle=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; always @(posedge clk)
if(!rst)
begin
state<=Idle;
end
else
casex(state)
Idle: if(rst)
begin
state<=s1;
end
s1: if(count=='d25)
begin
state<=s2;
end
s2: if(count=='d30)
begin
state<=s3;
end
s3: if(count=='d55)
begin
state<=s4;
end
s4: if(count=='d60)
begin
state<=s1;
end
endcase
always @(posedge clk)
begin
if(!rst)
begin
ew<=3'b100;
sn<=3'b100;
end
else
casex(state)
Idle: if(rst)
begin
ew<=3'b100;
sn<=3'b001;
end
s1: if(count=='d25)
begin
ew<=3'b100;
sn<=3'b010;
end
s2: if(count=='d30)
begin
ew<=3'b001;
sn<=3'b100;
end
s3: if(count=='d55)
begin
ew<=3'b010;
sn<=3'b100;
end
s4: if(count=='d60)
begin
ew<=3'b100;
sn<=3'b001;
end
default: state<=Idle;
endcase
end
endmodule
(2)计数器模块
module counter(en,clk,rst,out);
output[5:0]out;
input en,clk,rst;
reg[5:0] out;
always@(posedge clk or negedge rst)
begin
if(!rst)
out<='d0;
else if(!en&&out<'d60)
out<=out+1;
else
out<='d1;
end
endmodule
(3)将控制器与计数器进行连接
module traffic_lights_top(out,clk,rst,en,ew,sn); input clk,rst,en;
output[2:0] ew,sn;
output[5:0]out;
wire[5:0] out;
traffic_lights u1(
.clk(clk),
.rst(rst),
.count(out),
.ew(ew),
.sn(sn)
);
counter u2(
.en(en),
.clk(clk),
.rst(rst),
.out(out)
);
endmodule
2、激励
`timescale 1ns/100ps module traffic_lights_tb;
reg clk,rst,en;
wire[2:0] ew,sn;
wire[5:0]out;
traffic_lights_top m(
.clk(clk),
.rst(rst),
.en(en),
.ew(ew),
.sn(sn),
.out(out)
);
always
#5 clk=~clk;
initial
en<=1;
initial
begin
clk<=1;
en<=0;
rst<=0;
#5 rst<=1;
end
endmodule
四、仿真波形
(图一)
(图二)五、波形说明
波形图中,从上至下依次为:时钟信号clk、复位信号rst、计数器使能端en、东西方向上灯的状态ew、南北方向上灯的状态sn、计数器的输出out。

该程序实现的功能是在一个十字路口的交通灯的轮流交替变换:
图一可以完整的看到60个时间单位内两个方向上灯交替的状况
图二可以清楚的看到在时间从0——30过程中灯的跳变时间和结果。

五、实验过程中遇到的问题及解决方法
1、在实验过程中得到的波形图跟我设计的时间间隔不一致,仔细检查过后发现是因为控制器和计数器没有很好的连接在一起,导致灯的跳变跟计数器的控制脱离了,修改之后得到时间间隔比例跟设计一致的波形。

2、在检查波形的过程中发现计数器实现的不是模60,而是模64,将计数器程序中的选择条件从if(!en)改为if(!en&&out<’d60)之后得到了自己想要的计数器。

六、实验心得
刚开始,程序调试过程中始终都有些莫名其妙的错误,自己只能凭着自己的理解和单纯靠一些感觉去修改。

有时候越改错误越多,到后来程序显示没有错误了,但是仿真却无法执行,一长串的警告看的我有点崩溃。

静下心来后从头开始分析每一句的程序,最后发现其实只是一个很小的失误。

相关文档
最新文档