1.实验要求
(1)设计一个流水灯的实验,实现12位流水灯的依次点亮,
(2)流水灯的流转时间是(500ms/2Hz),
(3)系统时钟位50MHz,
(4)定义12个寄存器ledtemp保存12个状态,
(5)寄存器的初始值位12'b0000_0000_0001,
(6)当移位到12‘b1000_0000_0000时,ledtemp的值回到12'b0000_0000_0001,
2.设计代码
module lsd(
input clk,
output [11:0] led
);
reg [11:0] ledtemp = 12'b0000_0000_0001;
reg [23:0] cnt = 24'b0;
reg divclk = 0;
assign led = ledtemp;
parameter half_cntvalue = 12500000;
always @ (posedge clk)begin
if(cnt == half_cntvalue)begin
divclk <= ~divclk;
cnt <= 24'b0;
end
else
cnt <= cnt + 1'b1;
end
always @ (posedge divclk)begin
if(ledtemp == 12'b1000_0000_0000)
ledtemp <= 12'b0000_0000_0001;
else
ledtemp <= ledtemp << 1;
end
endmodule
3.仿真实现
module sim_lsd();
reg clk;
wire [11:0] led;
lsd u1(
.clk (clk),
.led (led)
);
initial begin
clk = 0;
end
always #10 clk = ~clk;
endmodule