我将一系列值存储在内存数组中。当需要将此序列输出到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变量作为存储器阵列的地址?
感谢您的帮助!非常感谢。
答案 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];