我在内存数组中存储一系列的值。当需要将此序列输出到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变量作为存储器阵列的地址?
谢谢你的帮忙!非常感谢。
发布于 2013-06-08 18:33:47
请提供与"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];https://stackoverflow.com/questions/13569351
复制相似问题