【发布时间】:2017-04-11 01:23:04
【问题描述】:
我正在尝试编写一个滚动移位/环形计数器,它需要两个开关作为 verilog 中的时钟。
我的代码如下:
module roll(CLK1, CLK2, LEDS);
input CLK1;
input CLK2;
output [3:0] LEDS;
reg [3:0] LEDS;
initial
begin
LEDS = 4'b0001;
end
always@(posedge CLK1 or posedge CLK2)
begin
if(CLK1)
begin
LEDS[3]<=LEDS[2];
LEDS[2]<=LEDS[1];
LEDS[1]<=LEDS[0];
LEDS[0]<=LEDS[3];
end
// Roll Right
if(CLK2)
begin
LEDS[3]<=LEDS[0];
LEDS[2]<=LEDS[3];
LEDS[1]<=LEDS[2];
LEDS[0]<=LEDS[1];
end
end
endmodule
我尝试使用两个 always 块,但后来发现我不能这样做。当我在always 语句中有posedge CLK2 时,我的FPGA 上的LED 都亮着。
【问题讨论】:
-
当然,因为您有多个驱动程序。您需要为此分配使用多路复用器。
-
这个问题更多的是关于数字逻辑可以做什么,而不是 Verilog 的语法或语义,所以它可能属于Electrical Engineering Stackexchange 而不是这里。