Verilog HDL 模拟 汽车尾灯自动控制系统
文章目录
- Verilog HDL 模拟 汽车尾灯自动控制系统
- 一、要求介绍:
- 二、代码实现
- 1、主模块的代码
- 2、时钟分频模块
- 三、效果展示
一、要求介绍:
设计一个汽车尾灯自动控制系统
要求:根据汽车行驶状态自动控制汽车尾灯
直行:尾灯不亮
右转:右侧尾灯亮而且按秒闪烁,左侧尾灯不亮
左转:左侧尾灯亮而且按秒闪烁,右侧尾灯不亮
临时停车或故障:两侧尾灯同时闪烁
倒车显示(可选)
注:用三色 LED 代表左右汽车尾灯,用拨码开关控制汽车行驶状态,还可以考虑用七段数码管和单色 LED 显示汽车状态
二、代码实现
1、主模块的代码
module car(rst, clk, start, left, right, error, back,
led11, led12, led13, led21, led22, led23);input rst; // reset.input clk;// clock.input start;// strat the car.input left;// go left.input right;// go right.input error;// if error.input back;// go back.output reg led11;output reg led12;output reg led13;output reg led21;output reg led22;output reg led23;// lights.wire clkout1;wire clkout2;time_split #(.N(6000000),.WIDTH(23)) t1 (.clk(clk),.rst_n(rst),.clkout(clkout1));// time_split 1.// 2 Hz.time_split #(.N(3000000),.WIDTH(23)) t2 (.clk(clk),.rst_n(rst),.clkout(clkout2));// time_split 2. // 4 Hz.always@(posedge clk)beginif(start)// the car has started.beginif(~left && ~right && ~error && back)// no other operators.begin led11 <= 1;led12 <= 1;led13 <= 1;led21 <= 1;led22 <= 1;led23 <= 1;// all the lights are closed.end// four situations.elsebeginif(left)// turn left.beginled11 <= 1;led12 <= clkout1;// turn left.// 2 Hz.led13 <= 1;led21 <= 1;led22 <= 1;led23 <= 1;endif(right)// turn right.beginled11 <= 1;led12 <= 1;led13 <= 1;led21 <= 1;led22 <= clkout1;// turn right.// 2 Hz.led23 <= 1;endif(error)// if there is an error or stop the car.beginled11 <= clkout2;// if there is an error or stop the car.// 4 Hz.led12 <= 1;led13 <= 1;led21 <= clkout2;// if there is an error or stop the car.// 4 Hz.led22 <= 1;led23 <= 1;endif(~back)// if go backbeginled11 <= 1;led12 <= 1;led13 <= clkout1;// if go back// 2 Hz.led21 <= 1;led22 <= 1;led23 <= clkout1;// if go back// 2 Hz.endendendelse// do not start.beginled11 <= 1;led12 <= 1;led13 <= 1;led21 <= 1;led22 <= 1;led23 <= 1;// all the lights are closed.endendendmodule
2、时钟分频模块
// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name : divide.v
// Module name : divide
// Author : STEP
// Description : clock divider
// Web : www.stepfpga.com
//
// --------------------------------------------------------------------
// Code Revision History :
// --------------------------------------------------------------------
// Version: |Mod. Date: |Changes Made:
// V1.0 |2017/03/02 |Initial ver
// --------------------------------------------------------------------
// Module Function:任意整数时钟分频module time_split ( clk,rst_n,clkout);input clk,rst_n; //输入信号,其中clk连接到FPGA的C1脚,频率为12MHzoutput clkout; //输出信号,可以连接到LED观察分频的时钟//parameter是verilog里常数语句
// parameter WIDTH = 3; //计数器的位数,计数的最大值为 2**WIDTH-1
// parameter N = 5; //分频系数,请确保 N < 2**WIDTH-1,否则计数会溢出
// parameter N=12000000;parameter WIDTH=24;reg [WIDTH-1:0] cnt_p,cnt_n; //cnt_p为上升沿触发时的计数器,cnt_n为下降沿触发时的计数器reg clk_p,clk_n; //clk_p为上升沿触发时分频时钟,clk_n为下降沿触发时分频时钟//上升沿触发时计数器的控制always @ (posedge clk or negedge rst_n ) //posedge和negedge是verilog表示信号上升沿和下降沿//当clk上升沿来临或者rst_n变低的时候执行一次always里的语句beginif(!rst_n)cnt_p<=0;else if (cnt_p==(N-1))cnt_p<=0;else cnt_p<=cnt_p+1; //计数器一直计数,当计数到N-1的时候清零,这是一个模N的计数器end//上升沿触发的分频时钟输出,如果N为奇数得到的时钟占空比不是50%;如果N为偶数得到的时钟占空比为50%always @ (posedge clk or negedge rst_n)beginif(!rst_n)clk_p<=0;else if (cnt_p<(N>>1)) //N>>1表示右移一位,相当于除以2去掉余数clk_p<=0;else clk_p<=1; //得到的分频时钟正周期比负周期多一个clk时钟end//下降沿触发时计数器的控制 always @ (negedge clk or negedge rst_n)beginif(!rst_n)cnt_n<=0;else if (cnt_n==(N-1))cnt_n<=0;else cnt_n<=cnt_n+1;end//下降沿触发的分频时钟输出,和clk_p相差半个时钟always @ (negedge clk)beginif(!rst_n)clk_n<=0;else if (cnt_n<(N>>1)) clk_n<=0;else clk_n<=1; //得到的分频时钟正周期比负周期多一个clk时钟endassign clkout = (N==1)?clk:(N[0])?(clk_p&clk_n):clk_p; //条件判断表达式//当N=1时,直接输出clk//当N为偶数也就是N的最低位为0,N(0)=0,输出clk_p//当N为奇数也就是N最低位为1,N(0)=1,输出clk_p&clk_n。正周期多所以是相与
endmodule
然后,我们进行管脚的分配:
接下来就是进行编译:
最后进行烧录:
三、效果展示
我们还是采用视频的方法来进行效果的展示与呈现:
(如果你喜欢的话就去点个赞吧)
https://www.bilibili.com/video/BV1JL411778U?spm_id_from=333.999.0.0
Verilog HDL 模拟 汽车尾灯自动控制系统
最后,谢谢大家的支持了啦。
喜欢的话就点个赞吧。