【Verilog HDL】汽车尾灯控制器的实现

基于Verilog的汽车尾灯控制器的实现

首先进行模块的定义

模块具有三个输入:时钟,重置,和汽车状态、以及六个输出分别控制左右(l,r)三色LED的红绿蓝三个阴极

   module   ?   car_rear_light
   (???   input   ?clk,
   ????   input   ?rst,
   ????   input   ?[   3   :   0   ]car_status,
   ????   output   ?   reg   [   0   :   0   ]l_light_r,???????   //左侧红灯
   ????   output   ?   reg   [   0   :   0   ]r_light_r,???????   //右侧红灯
   ????   output   ?   reg   [   0   :   0   ]l_light_g,???????   //左侧绿灯
   ????   output   ?   reg   [   0   :   0   ]r_light_g,???????   //右侧绿灯?
   ????   output   ?   reg   [   0   :   0   ]l_light_b,???????   //左侧蓝灯
   ????   output   ?   reg   [   0   :   0   ]r_light_b????????   //右侧蓝灯
   );  

因为左右转向灯和双闪均为黄色,所以将左右两个三色LED的红、绿阴极统一安排给l_light、r_light两个变量控制
红+绿 <= 污黄

   reg   [   0   :   0   ]l_light;
   reg   [   0   :   0   ]r_light;  

   always   @(   posedge   ?clk)
   begin
   ????l_light_r?   =   ?l_light;
   ????l_light_g?   =   ?l_light;
   ????r_light_r?   =   ?r_light;
   ????r_light_g?   =   ?r_light;
   end  

下面进行1Hz的分频

分频模块重新定义参数,分频系数为12M,将板载12MHz的晶振分为1Hz的时钟。

   wire   ?clk_1Hz;  

   divide   ??#(.WIDTH(   32   ),.N(   12_000_000   ))??   u1   ?(??????   //分频12MHz到1Hz
   ????.clk????(clk),
   ????.rst_n??(rst),
   ????.clkout?(clk_1Hz)???
   );  

最后是逻辑部分的描述

汽车状态由拨码开关控制:
0001 —— 直行,不闪灯
0010 —— 左转,闪左灯
0100 —— 右转,闪右灯
1000 —— 故障,双闪
1111 —— 倒车,两灯白色常亮

   always   @(   posedge   ?clk_1Hz)
   begin
   ????   case   (car_status)
   ????????   4'b0001   :????????????????????????????????   //直行
   ????????   begin
   ????????????l_light?   <=   ?   1   ;
   ????????????r_light?   <=   ?   1   ;
   ????????????l_light_b?   <=   ?   1   ;
   ????????????r_light_b?   <=   ?   1   ;
   ????????   end
   ????????   4'b0010   :????????????????????????????????   //左转
   ????????   begin
   ????????????l_light?   <=   ?   ~   l_light;
   ????????????r_light?   <=   ?   1   ;
   ????????????l_light_b?   <=   ?   1   ;
   ????????????r_light_b?   <=   ?   1   ;
   ????????   end
   ????????   4'b0100   :????????????????????????????????   //右转
   ????????   begin
   ????????????l_light?   <=   ?   1   ;
   ????????????r_light?   <=   ?   ~   r_light;
   ????????????l_light_b?   <=   ?   1   ;
   ????????????r_light_b?   <=   ?   1   ;
   ????????   end
   ????????   4'b1000   :????????????????????????????????   //双闪
   ????????   begin
   ????????????l_light?   <=   ?   ~   l_light;
   ????????????r_light?   <=   ?   ~   r_light;
   ????????????l_light_b?   <=   ?   1   ;
   ????????????r_light_b?   <=   ?   1   ;
   ????????   end
   ??????????   4'b1111   :??????????????????????????????   //倒车
   ??????????   begin
   ????????????l_light?   <=   ?   0   ;
   ????????????r_light?   <=   ?   0   ;
   ????????????l_light_b?   <=   ?   0   ;
   ????????????r_light_b?   <=   ?   0   ;
   ??????????   end
   ????????   default   :
   ????????   begin
   ????????????l_light?   <=   ?   1   ;
   ????????????r_light?   <=   ?   1   ;
   ????????????l_light_b?   <=   ?   1   ;
   ????????????r_light_b?   <=   ?   1   ;
   ????????????????
   ????????   end
   ????   endcase
   end  

原文地址:https://www.cnblogs.com/codaland/p/11965649.html

时间: 2024-10-13 04:37:14

【Verilog HDL】汽车尾灯控制器的实现的相关文章

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

Verilog HDL设计进阶:有限状态机的设计原理及其代码风格_zt

http://www.21ic.com/app/eda/201308/189781_1.htm 由于Verilog HDL和 VHDL 行为描述用于综合的历史还只有短短的几年,可综合风格的Verilog HDL 和VHDL的语法只是它们各自语言的一个子集.又由于HDL的可综合性研究近年来非常活跃,可综合子集的国际标准目前尚未最后形成,因此各厂商的综合器所支持的HDL子集也略有所不同. 本书中有关可综合风格的Verilog HDL的内容,我们只着重介绍RTL级.算法级和门级逻辑结构的描述,而系统级

3_8译码器Verilog HDL语言的简单实现

最近在学Verilog HDL语言,觉得learn in doing是比较好的学习方式,所以我们来直接分析分析代码好了. 先来一波代码: 1 module q_decode_38(data_in,data_out); 2 3 input[2:0] data_in; //端口声明 4 output[7:0] data_out; 5 reg[7:0] data_out; 6 7 always@(data_in) 8 begin 9 case(data_in) 10 3'd0:data_out = 8

基于Verilog HDL整数乘法器设计与仿真验证

基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为0表示为正数),取值范围为-127~127. 负数的表示方法为正值的求反又加1.例如: 8’b0000_0100; //表示值:4,正值求反为:8’b1111_1011:再加1表示为:8’b1111_1100,这样便得到了-4的表示方法为:8’b1111_1100. 同理,负值变成正值的方法为:负值

&lt;转&gt;Verilog HDL宏定义define

宏定义 `define 用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: `define 标识符(宏名) 字符串(宏内容) 如:`define signal string 它的作用是指定用标识符signal来代替string这个字符串,在编译预处理时,把程序中在该命令以后所有的signal都替换成string.这种方法使用户能以一个简单的名字代替一个长的字符串,也可以用一个有含义的名字来代替没有含义的数字和符号,因此把这个标识符(名字)称为“宏名”,在编译预处理时将宏名替换成字符串

自己动手写处理器之第二阶段(3)——Verilog HDL行为语句

将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第七篇,我尽量每周四篇 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包括有过程语句,过程语句有两种:initial.always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的,initial过程语句是不可综合的.       1.always过程语句 always过程语句的格式如图2-10所示.

verilog HDL 编码风格

1.有意义且有效的名字. 2.同一信号在不同层次应该保持一致. 3.添加有意义的后缀,使信号的有效性更加明确. 4.模块输出寄存器化,使得输出的驱动强度和输入延时是可以预测的. 5.使用括号表明优先级. 6.每一个if都应该有一个else.如果esle没有任何相应的动作,则用一条空语句.(if..esle可能有优先级) 7.case 语句最好有一个default分支,如果default不要执行动作就使用空语句. 8.在每个 模块的开始做模块级的注释,在模块端口列表中出现的信号做简要的功能描述.

Verilog HDL基础语法讲解之模块代码基本结构

Verilog HDL基础语法讲解之模块代码基本结构 ? 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的基本结构. 以下为本章中例子中的代码: 01????/*======================================= 02????*????file neme : mux2.v 03????*????author????:????小梅哥 04????*????Verison????:????

MiS603开发板 2.1 Verilog HDL 代码规范

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.1 Verilog HDL 代码规范 规范的代码风格,可以让程序更容易阅读和维护. u 文档管理 合理的文档管理也是程序代码规范的重