我正在尝试在 Verilog 中编写一个程序,该程序应该在 LED 阵列上“移动”一个 LED。使用一个按钮,灯应向左移动,而另一个按钮应向右移动。这是我的代码:
module led_shift(UP, DOWN, RES, CLK, LED);
input UP, DOWN, RES, CLK;
output reg [7:0] LED;
reg [7:0] STATE;
always@(negedge DOWN or negedge UP or negedge RES)
begin
if(!RES)
begin
STATE <= 8'b00010000;
end
else
begin
STATE <= UP ? STATE>>1 : STATE<<1;
end
end
always @ (posedge CLK)
begin
LED <= STATE;
end
endmodule
问题在于STATE <= UP ?状态>>1:状态<<1;错误如下:
错误(10200):led_shift.v(34)处的 Verilog HDL 条件语句错误:无法将条件中的操作数与始终构造的封闭事件控制中的相应边匹配
我尝试在不使用这种 if 的情况下修改代码:
always@(negedge DOWN or negedge UP or negedge RES)
begin
if(!RES)
STATE <= 8'b00010000;
else
begin
if(!DOWN)
STATE <= STATE<<1;
else
begin
if(!UP)
STATE <= STATE>>1;
else
STATE <= STATE;
end
end
end
它可以编译,但不起作用:LED 仅向左“移动”,当我按下另一个按钮时,所有 LED 都会关闭。可能我的代码有问题,但我不明白为什么我的第一个代码根本无法编译。感谢您的任何帮助!
哈里姆