FPGA设计交通红绿灯控制器与小轿车尾灯控制器模块

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 本文介绍了FPGA设计交通红绿灯控制器与小轿车尾灯控制器模块


【实验要求】 
实验内容与原理说明(包括框图、逻辑表达式和真值表)。
实验模块程序代码(设计模块Design Block)和激励代码(激励模块Test Bench)。
仿真波形图。
综合得到的门级电路图,所用器件的型号以及设计模块所占用该型器件的资源情况。
实验结果分析及思考。
每一次报告用Word文档提交,文件名:姓名_班级_第几次实验_学号。
【实验软件工具】
QuartusII;
ModelSim SE.
【实验一】设计一个交通红绿灯控制器模块,实现主干道和支路之间红绿黄灯的信号转换

  1. 实验内容与原理说明

本实验实现一个交通信号灯的控制模块,实现主干道和支路之间的红绿黄灯的信号转换。假设LIGHT1为主路信号灯,LIGHT2为支路信号灯,每一个信号灯循环周期为50s。20s,H为绿灯,F为红灯。5s,H为黄灯,F为红灯。20s,H为红灯,F为绿灯。5s,H为红灯,F为黄灯。

通过分析交通灯控制电路的要求可知,系统主要由传感器、时钟脉冲产生器

定时器、控制器及译码器构成,传感器S在有车辆通过时发出一个高电平信号。

可知交通灯的系统框图如下:
image.png

可以得到其ASM图如下:

image.png

根据交通灯控制单元的ASM图, ASM图中的状态框与状态图中的状态相对应,判断框中的条件是状态转换的输入条件,条件输出框与控制单元状态转换的输出相对应。状态图是描述状态之间的转换,例如在S,状态,如果条件TL·S=1时,系统状态转移到ST,同时输出状态转换信号S1。如果TL·S=0,则系统保持在S0状态。

当交通灯控制电路处于不同工作状态时,交通信号灯按一定的规律与之对应,各状态与信号灯的关系如表5.4.2所示。表中用1表示灯亮,用0表示灯灭。

可以得到信号灯与控制器状态编码表如下:

image.png

  2. 实验模块程序代码和激励代码
(1)设计模块代码
//定义状态
`define S0 2'b00//主绿支红
`define S1 2'b01//主黄支红
`define S2 2'b11//主红支绿
`define S3 2'b10//主红支黄
//定义trafficLight控制程序
module trafficLight(CLK,S,rst,HR,HG,HY,FR,FG,FY,timeH,timeL);
input CLK,S,rst;
output[3:0] timeH;
output[3:0] timeL;
reg[3:0] timeH;
reg[3:0] timeL;
output reg HR,HG,HY,FR,FG,FY;
wire TL,TS,TY;
reg ST;
reg[1:0] CState,NState;
//时序模块的描述
always@(posedge CLK or negedge rst) begin

if(~rst)  
    {timeH,timeL}<=8'h00;  
else if(ST)  
    {timeH,timeL}<=8'h00;  
else if((timeH==5)&(timeL==9)) begin  
    {timeH,timeL}<={timeH,timeL};  
end  
else if(timeL==9) begin  
    timeH<=timeH+1;  
    timeL<=0;  
end  
else begin  
    timeH<=timeH;  
    timeL<=timeL+1;  
end  

end

assign TY=(timeH==0)&(timeL==4);
assign TS=(timeH==2)&(timeL==9);
assign TL=(timeH==5)&(timeL==9);
//定义三种输出时间输出标志

//描述状态机状态转换
always@(posedge CLK or negedge rst) begin

if(~rst)  
    CState<=`S0;  
else  
    CState<=NState;  

end

//分别对四种状态进行描述
always@(S or CState or TL or TS or TY) begin

case(CState)  
    `S0:begin  
        NState=(TL&&S)?`S1:`S0;  
        ST=(TL&&S)?1:0;  
    end  
    `S1:begin  
        NState=(TY)?`S2:`S1;  
        ST=(TY)?1:0;  
    end  
    `S2:begin  
        NState=(TS||~S)?`S3:`S2;  
        ST=(TS||~S)?1:0;  
    end  
    `S3:begin  
        NState=(TY)?`S0:`S3;  
        ST=(TY)?1:0;  
    end  
endcase  

end

//将状态转换译码
always@(CState) begin

case(CState)  
    `S0:begin  
        {HG,HY,HR}=3'b100;  
        {FG,FY,FR}=3'b001;  
    end  
    `S1:begin  
        {HG,HY,HR}=3'b010;  
        {FG,FY,FR}=3'b001;  
    end  
    `S2:begin  
        {HG,HY,HR}=3'b001;  
        {FG,FY,FR}=3'b100;  
    end  
    `S3:begin  
        {HG,HY,HR}=3'b001;  
        {FG,FY,FR}=3'b010;  
    end  
endcase  

end
endmodule
(2)激励模块代码
// Verilog Test Bench template for design : trafficLight
//
// Simulation tool : ModelSim (Verilog)
//
`timescale 1 ps/ 1 ps
module trafficLight_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg CLK;
reg S;
reg rst;
// wires
wire HG;
wire HR;
wire HY;
wire FG;
wire FR;
wire FY;
wire [3:0] timeH;
wire [3:0] timeL;

// assign statements (if any)
trafficLight i1 (
// port map - connection between master ports and signals/registers

.CLK(CLK),  
.HG(HG),  
.HR(HR),  
.HY(HY),  
.FG(FG),  
.FR(FR),  
.FY(FY),  
.S(S),  
.rst(rst),  
.timeH(timeH),  
.timeL(timeL)  

);
initial
begin
rst<=0;S<=0;CLK<=0;

10 rst<=1;

100 S<=1;

3000 $stop;

end

always #5 CLK<=~CLK;

endmodule

  1. 波形仿真图

image.png

4.门级电路图

image.png

设计模块所占用器件的资源情况如下所示:

image.png

【实验二】设计一个小轿车尾灯控制器模块(以书中的例子)

  1. 实验内容与原理说明

汽车尾灯发出的信号主要是给后面行驶汽车的司机看的,通常汽车驾驶室有刹车开关(HAZ)、左转弯开关(LEFT)和右转弯开关(RIGHT),司机通过操作这

3个开关给出车辆的行驶状态。假设在汽车尾部左、右两侧各有3个指示灯,分别用LA、LB、LC、RA、RB、RC表示,如图5.4.1所示。这些灯的亮、灭规律如下:

1)汽车正常行驶时,尾部两侧的6个灯全部熄灭。

2)刹车时,汽车尾灯工作在告警状态,6个灯按一定频率闪烁。

3)左转弯时,左侧3个灯轮流顺序点亮,其规律如图5.4.2a所示,右侧灯全灭。

4)右转弯时,右侧3个灯轮流顺序点亮,其规律如图5.4.2b所示,左侧灯全灭。

假设电路的输入时钟信号为CP,CP的频率对应于汽车尾灯所要求的闪烁频率。试根据上述要求设计出一个时钟同步的状态机来控制汽车的尾灯。

选择Moore状态机设计该电路,则尾灯的亮、灭直接由状态译码就可以得到。由设计要求可知:汽车左转弯时,右边的灯不亮而左边的灯依次循环点亮,即0个、1个、2个或3个灯亮,分别用L、L、L、L表示,状态机在4个状态中循环。同理,汽车右转弯时,状态机也会在4个状态中循环,即左边灯不亮而右边的灯有0个、1个、2个或3个灯亮,分别用R、R、R、R,表示。由于L和R,都表示6个灯不亮,所以合起来用IDLE表示。

状态机一旦左循环或者右循环开始后,如果刹车信号HAZ有效,状态机不会立即响应,而是必须等到左(或右)循环完成后才会进入告警状态。经过改进且具有这一特性的状态图如下图所示。

image.png

由于电路的输出信号较多,不便于写在状态图中,所以单独列出输出逻辑真值表,如下表所示。

image.png

 2. 实验模块程序代码和激励代码
(1)设计模块代码
`define IDEL 3'b001//均不亮
`define LR3 3'b100//均亮
`define L1 3'b011//左侧亮一个灯
`define L2 3'b010//左侧亮两个灯
`define L3 3'b000//左侧亮三个灯
`define L1 3'b011//左侧亮一个灯
`define R1 3'b101//右侧亮一个灯
`define R3 3'b110//右侧亮两个灯
`define R2 3'b111//右侧亮三个灯
module carLight(RST,CLK,LEFT,RIGHT,HAZ,RA,RB,RC,LA,LB,LC);
input RST,CLK,LEFT,RIGHT,HAZ;
output reg RA,RB,RC,LA,LB,LC;
reg[2:0] CState,NState;
always@(posedge CLK or negedge RST) begin

if(~RST)  
    CState<=`IDEL;  
else  
    CState<=NState;  

end
always@(CState or LEFT or RIGHT or HAZ) begin

case(CState)  
    `IDEL:begin  
        if(LEFT&RIGHT|HAZ)  
            NState=`LR3;  
        else if(LEFT&(~HAZ)&(~RIGHT))  
            NState=`L1;  
        else if((~LEFT)&(~HAZ)&RIGHT)  
            NState=`R1;  
        else  
            NState=`IDEL;  
    end  
    `L1:begin  
        if(~(LEFT|HAZ))  
            NState=`IDEL;  
        else if(LEFT&(~HAZ)&(~RIGHT))  
            NState=`L2;  
        else   
            NState=`LR3;  
    end  
    `L2:begin  
        if(~(LEFT|HAZ))  
            NState=`IDEL;  
        else if(LEFT&(~HAZ)&(~RIGHT))  
            NState=`L3;  
        else   
            NState=`LR3;  
    end  
    `L3:begin  
        if((~LEFT)&(~HAZ)|(~RIGHT)&(~HAZ))  
            NState=`IDEL;  
        else  
            NState=`LR3;  
    end  
    `R1:begin  
        if(~(RIGHT|HAZ))  
            NState=`IDEL;  
        else if(RIGHT&(~HAZ)&(~LEFT))  
            NState=`R2;  
        else   
            NState=`LR3;  
    end  
    `R2:begin  
        if(~(RIGHT|HAZ))  
            NState=`IDEL;  
        else if(RIGHT&(~HAZ)&(~LEFT))  
            NState=`R3;  
        else   
            NState=`LR3;  
    end  
    `R3:begin  
        if((~LEFT)&(~HAZ)|(~RIGHT)&(~HAZ))  
            NState=`IDEL;  
        else  
            NState=`LR3;  
    end  
    `LR3:begin  
        if((~LEFT)&(~HAZ)|(~RIGHT)&(~HAZ))  
            NState=`IDEL;  
        else  
            NState=`LR3;  
    end  
endcase  

end

//状态译码过程
always@(CState) begin

case(CState)  
    `IDEL:begin  
        {LC,LB,LA,RA,RB,RC}=6'b000_000;  
    end  
    `L1:begin  
        {LC,LB,LA,RA,RB,RC}=6'b001_000;  
    end  
    `L2:begin  
        {LC,LB,LA,RA,RB,RC}=6'b011_000;  
    end  
    `L3:begin  
        {LC,LB,LA,RA,RB,RC}=6'b111_000;  
    end  
    `R1:begin  
        {LC,LB,LA,RA,RB,RC}=6'b000_100;  
    end  
    `R2:begin  
        {LC,LB,LA,RA,RB,RC}=6'b000_110;  
    end  
    `R3:begin  
        {LC,LB,LA,RA,RB,RC}=6'b000_111;  
    end  
    `LR3:begin  
        {LC,LB,LA,RA,RB,RC}=6'b111_111;  
    end  
endcase  

end
endmodule

(2)激励模块代码
`timescale 1 ps/ 1 ps
module carLight_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg CLK;
reg HAZ;
reg LEFT;
reg RIGHT;
reg RST;
// wires
wire LA;
wire LB;
wire LC;
wire RA;
wire RB;
wire RC;

// assign statements (if any)
carLight i1 (
// port map - connection between master ports and signals/registers

.CLK(CLK),  
.HAZ(HAZ),  
.LA(LA),  
.LB(LB),  
.LC(LC),  
.LEFT(LEFT),  
.RA(RA),  
.RB(RB),  
.RC(RC),  
.RIGHT(RIGHT),  
.RST(RST)  

);
initial
begin
RST<=0;CLK<=0;LEFT<=0;RIGHT<=0;HAZ<=0;

10 RST<=1;

30 LEFT<=1;HAZ<=0;RIGHT<=0;

90 LEFT<=0;HAZ<=0;RIGHT<=0;

30 LEFT<=0;HAZ<=0;RIGHT<=1;

90 LEFT<=0;HAZ<=0;RIGHT<=0;

30 LEFT<=1;HAZ<=0;RIGHT<=0;

30 LEFT<=1;HAZ<=0;RIGHT<=1;

30 LEFT<=0;HAZ<=0;RIGHT<=0;

30 LEFT<=0;HAZ<=0;RIGHT<=1;

30 LEFT<=1;HAZ<=0;RIGHT<=1;

30 LEFT<=0;HAZ<=0;RIGHT<=0;

30 LEFT<=0;HAZ<=1;RIGHT<=0;

30 LEFT<=0;HAZ<=0;RIGHT<=0;

$stop;
end

always #5 CLK<=~CLK;

endmodule

  1. 波形仿真图

image.png

4.门级电路图

image.png

设计模块所占用器件的资源情况如下所示:

image.png

目录
相关文章
|
12天前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现了16QAM基带通信系统,包括调制、信道仿真、解调及误码率统计模块。通过Vivado2019.2仿真,设置不同SNR(如8dB、12dB),验证了软解调相较于传统16QAM系统的优越性,误码率显著降低。系统采用Verilog语言编写,详细介绍了16QAM软解调的原理及实现步骤,适用于高性能数据传输场景。
111 69
|
16天前
|
移动开发 算法 数据安全/隐私保护
基于FPGA的QPSK调制+软解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的QPSK调制解调系统,通过Vivado 2019.2进行仿真,展示了在不同信噪比(SNR=1dB, 5dB, 10dB)下的仿真效果。与普通QPSK系统相比,该系统的软解调技术显著降低了误码率。文章还详细阐述了QPSK调制的基本原理、信号采样、判决、解调及软解调的实现过程,并提供了Verilog核心程序代码。
53 26
|
2天前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2FSK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的2FSK调制解调系统,包含高斯信道、误码率统计模块及testbench。系统增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同SNR下的硬件测试,并提供操作视频指导。理论部分涵盖频移键控(FSK)原理,包括相位连续与不连续FSK信号的特点及功率谱密度特性。Verilog代码实现了FSK调制解调的核心功能,支持在不同开发板上移植。硬件测试结果展示了不同SNR下的性能表现。
22 6
|
22天前
|
算法 异构计算
基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4-ASK调制解调系统的算法仿真效果、理论基础及Verilog核心程序。仿真在Vivado2019.2环境下进行,分别测试了SNR为20dB、15dB、10dB时的性能。理论部分概述了4-ASK的工作原理,包括调制、解调过程及其数学模型。Verilog代码实现了4-ASK调制器、加性高斯白噪声(AWGN)信道模拟、解调器及误码率计算模块。
44 8
|
1月前
|
算法 物联网 异构计算
基于FPGA的4FSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的4FSK调制解调系统的Verilog实现,包括高斯信道模块和误码率统计模块,支持不同SNR设置。系统在Vivado 2019.2上开发,展示了在不同SNR条件下的仿真结果。4FSK调制通过将输入数据转换为四个不同频率的信号来提高频带利用率和抗干扰能力,适用于无线通信和数据传输领域。文中还提供了核心Verilog代码,详细描述了调制、加噪声、解调及误码率计算的过程。
50 11
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的1024QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的1024QAM调制解调系统的仿真与实现。通过Vivado 2019.2进行仿真,分别在SNR=40dB和35dB下验证了算法效果,并将数据导入Matlab生成星座图。1024QAM调制将10比特映射到复数平面上的1024个星座点之一,适用于高数据传输速率的应用。系统包含数据接口、串并转换、星座映射、调制器、解调器等模块。Verilog核心程序实现了调制、加噪声信道和解调过程,并统计误码率。
45 1
|
2月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的64QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了基于FPGA的64QAM调制解调通信系统的设计与实现,包括信号生成、调制、解调和误码率测试。系统在Vivado 2019.2中进行了仿真,通过设置不同SNR值(15、20、25)验证了系统的性能,并展示了相应的星座图。核心程序使用Verilog语言编写,加入了信道噪声模块和误码率统计功能,提升了仿真效率。
53 4
|
2月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本项目基于FPGA实现16QAM调制解调通信系统,使用Verilog语言编写,包括信道模块、误码率统计模块。通过设置不同SNR值(如8dB、12dB、16dB),仿真测试系统的误码性能。项目提供了完整的RTL结构图及操作视频,便于理解和操作。核心程序实现了信号的生成、调制、信道传输、解调及误码统计等功能。
51 3
|
1月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的256QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
本文介绍了256QAM调制解调算法的仿真效果及理论基础。使用Vivado 2019.2进行仿真,分别在SNR为40dB、32dB和24dB下生成星座图,并导入Matlab进行分析。256QAM通过将8比特数据映射到复平面上的256个点,实现高效的数据传输。Verilog核心程序包括调制、信道噪声添加和解调模块,最终统计误码率。
38 0
|
2月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的16PSK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR
### 简介 本项目采用VIVADO 2019.2进行了十六进制相位移键控(16PSK)算法仿真,结果显示,在SNR=30dB时效果为Tttttttttttttt12,在SNR=20dB时效果为Tttttttttttttt34。系统RTL结构如Tttttttttttttt555555所示。16PSK是一种高效的相位调制技术,能在每个符号时间内传输4比特信息,适用于高速数据传输。其工作原理包括将比特流映射到16个相位状态之一(Tttttttttttttt777777),并通过匹配滤波和决策进行解调。具体Verilog核心程序见完整代码。
41 1

热门文章

最新文章

下一篇
DataWorks