好久没用FPGA了,该忘记的都忘记了。调试了一下流水灯实验没有通过,通过SignalTapII发现是“else if(counter == 24'd100_0000)”写成了24'd1000_0000超出了计数器的范围。导致只运行到复位灯点亮。
module flow_led(
input sys_clk,
input sys_rst_n,
output reg[7:0] led
);
reg[23:0] counter;
always@(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n)
counter <= 0;
else if(counter <24'd100_0000)
counter <= counter+1'b1;
else
counter<=24'd0;
end
always@(posedge sys_clk or negedge sys_rst_n)
begin
if(!sys_rst_n)
led<=8'b0000_00001;
else if(counter == 24'd100_0000)
led <= {led[6:0],led[7]};
else
led <= led;
end
endmodule
修改后再次通过SignalTapII观察发现LED波形正常。
结论:1.SignalTapII比较占用FPGA的logic资源
2.//实现循环右移
reg [7:0] led;
always(posedge clk )
begin
led[7:0]<={led[0],led[7:1]};//实现循环右移动,将原数据的最低位移动至最高位,最高位依次向低位移动
led[7:0]<={led[6:0],led[7]};//实现循环左移动,将原数据的最高位移动至最低位,最低位依次向高位移动
end