1

我将一系列值存储在内存数组中。当需要将此序列输出到 LED 显示屏时,我遇到了多个驱动程序的错误。

以下是我正在使用的代码片段:

reg [3:0] p[0:63]; // pattern sequence
....
led = p[playcnt];  // display current pattern; playcnt loops from 0 to 63

似乎 Verilog 正在尝试将内存阵列中的每个寄存器连接到 LED 输出,这会导致“多驱动程序”错误。有没有简单的方法可以将内存阵列的单个输出连接到 LED 输出,并使用 playcnt 变量作为内存阵列的地址?

谢谢你的帮助!非常感谢。

4

1 回答 1

1

请提供与“led”相关的所有代码,并说明“playcnt loops from 0 to 63”是什么意思。

如果你有类似这样的代码:

always_comb 
  for (int playcnt=0; playcnt<64; playcnt++)
    led = p[playcnt];

那么您确实将所有寄存器连接到一个端口。

如果我正确理解了您的意图,那么您应该有与此类似的代码(未经测试):

reg  [3:0] p [0:63];
reg  [5:0] playcnt;
wire [3:0] led;

always @ (posedge clk or negedge rst)
  if (!rst)
    playcnt[5:0] <= 6'h0;
  else
    playcnt[5:0] <= playcnt[5:0] + 6'h1;

assign led[3:0] = p[playcnt];
于 2013-06-08T10:33:47.277 回答