设计一个以1秒频率闪烁的LED灯(亮灭各500ms)

  • Post author:
  • Post category:其他


源文件:

module cnt_1(

clk,

Reset_n,

Led

);

input clk;

input Reset_n;

output reg Led;

reg [24:0]counter; // 25000000二进制有25位

always@(posedge clk or negedge Reset_n)

if(!Reset_n)

counter <= 0;

else if(counter == 24999999) //判断到时候可以不加位宽限定,下面的赋值要加

counter <= 0;

else

counter <= counter + 1’d1;

always@(posedge clk or negedge Reset_n)

if(!Reset_n)

Led <= 0;

else if (counter == 24999999)

Led <= !Led;

// always@(posedge clk or negedge Reset_n)

// if(!Reset_n)begin

// counter <=0; //<=是非阻塞赋值的意思。

// Led <= 0;

// end // begin end 语句 类似于C语言中的()

// else if (counter == 25000000)begin

// Led <=!Led;

// counter <= 0;

// end

// else

// counter <= counter +1’d1;

endmodule

TB文件:

`timescale 1ns/1ns

module cnt_1_tb;

reg clk;

reg Reset_n;

wire led;

cnt_1 cnt_1(

. clk(clk),

. Reset_n(Reset_n),

. Led(Led)

);

initial clk = 1;

always #10 clk = !clk; // 20ns一个周期 10ns一个变化

initial begin

Reset_n = 0;

#201; //先复位 跑一段时间再复位信号改变

Reset_n = 1;

#2000000000; //总共跑两秒钟

$stop;

end

endmodule

// 一般的时钟频率 定位 50MHZ 则周期为 20ns

要求为500ms亮灭一次 则需要计数器计数 500ms/20ns=25000000次



版权声明:本文为Hackerpeng777原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。