前言
跟着课程学习fpga,题目要求如下:
让led灯按照亮0.25秒,灭0.5秒,亮0,75秒,灭1秒的状态循环亮灭。
一、设计思路
设计一个状态机用于完成状态的转换,第一种状态0全亮,经过0.25秒,进入下一个状态1全灭,经过0.5秒进入下一个状态,以此类推,知道最后一个状态3全灭1秒后,计数器清零,状态3转到0.
由于系统时钟频率是50HZ,这就意味着时间是0.000_000_02s,要想达到0.25秒,需要12,500,000次计数,由于计数器是从0开始计数的,因此应该计数到12,500,000-1,设置常量数为49999999,换算成二进制需至少26位。
二、实验步骤
代码如下(led.v):
module led_ctrl(
input clk,
input rst_n,
output reg [7:0] led
);
reg [31:0] cnt;//省事直接写了[31:0],应该是[25:0]
reg [1:0] state;
//parameter counter = 500000000;
always@(posedge clk or negedge rst_n)begin
if(!rst_n