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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月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

目录
相关文章
|
6月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
145 7
|
5月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
156 5
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的MSK调制解调系统系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现MSK调制解调系统,采用Verilog开发,包含同步模块、高斯信道模拟、误码率统计等功能。相比仿真版本,新增ILA数据采集与VIO在线SNR设置模块。通过硬件测试验证,展示不同SNR(如10dB和16dB)下的性能表现。研究聚焦软件无线电领域,优化算法复杂度以适应硬件限制,利用MSK恒定包络、相位连续等特性提升频谱效率。核心代码实现信号生成、调制解调、滤波及误码统计,提供完整的硬件设计与分析方案。
204 19
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
155 17
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前开发的16QAM调制与软解调系统,增加了硬件测试功能。该系统包含FPGA实现的16QAM调制、软解调、高斯信道、误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置模块。通过硬件测试,验证了不同SNR条件下的系统性能。16QAM软解调通过比较接收信号采样值与16个调制点的距离,选择最近的调制点来恢复原始数据。核心Verilog代码实现了整个系统的功能,包括SNR设置、信号处理及误码率统计。硬件测试结果表明系统在不同SNR下表现良好,详细操作步骤可参考配套视频。
157 13
|
6月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
128 7
|
6月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
130 2
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的16QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的16QAM基带通信系统硬件测试版本。该系统在仿真基础上增加了ILA在线数据采集和VIO在线SNR设置模块,支持不同信噪比(如15dB、25dB)的测试。16QAM是一种正交幅度调制方式,通过两路4ASK信号叠加实现,每个符号包含4比特信息。系统采用正交调幅法生成16QAM信号,并通过DAC转换为模拟信号。解调时使用正交相干解调,经低通滤波器恢复电平信号。开发板内完成发射与接收,无需定时同步模块。代码可移植至其他开发板,具体步骤见配套文档。
131 2
|
7月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的2ASK调制解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍基于FPGA的2ASK调制解调系统,涵盖仿真效果、理论知识、Verilog核心程序及开发板使用说明。系统包含testbench、高斯信道模块和误码率统计模块,支持不同SNR设置。硬件测试版本增加了ILA在线数据采集和VIO在线SNR设置功能。2ASK调制通过改变载波振幅传输二进制信号,FPGA实现包括系统设计、Verilog编码、仿真测试和硬件部署。详细操作步骤见配套视频,代码适用于多种开发板,提供移植方法。
127 1
|
7月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
110 0

热门文章

最新文章