刚学Verilog时,写红绿灯的时候感觉到逻辑混乱。后来学习了状态机,决定使用状态机完成红绿灯。下面是代码
`timescale 1ns / 1ps
`define second 100_000_000
//
// Company:
// Engineer:
//
// Create Date: 2019/12/02 10:12:23
// Design Name:
// Module Name: r_g_y
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
/
module r_g_y(
led_rgb0,
led_rgb1,
led_rgb2,
clk,
rst_n
);
input clk;
input rst_n;
output [2:0]led_rgb2;
/*由于LED灯有红绿蓝三个输入,这里定义了3位寄存器,高位到低位依次是:红绿蓝。让黄灯亮需要红灯和绿灯同时亮。即led_rgb2=3'b110*/
output [2:0]led_rgb1;
output [2:0]led_rgb0;
reg [30:0]div_cnt; //定义时间
reg [2:0]led_rgb2;
reg [2:0]led_rgb1;
reg [2:0]led_rgb0;
reg [1:0]current_state; //现态
reg [1:0]next_state; //次态
parameter [1:0] IDLE = 2'b00; //初始态,没有灯亮
parameter [1:0] S1 = 2'b01; //状态01