【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  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM