连接Verilog阵列:多个驱动程序

时间:2012-11-26 16:49:04

标签: arrays memory verilog drivers

我将一系列值存储在内存数组中。当需要将此序列输出到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变量作为存储器阵列的地址?

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

1 个答案:

答案 0 :(得分:1)

请提供与“led”相关的所有代码,并说明“playcnt循环从0到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];