我声明了几个端口连接的模块,如下所示:
mymodule m0 ( .a(myreg[0]), .b(myreg[3]), .c(2'd0), .d(oreg1));
mymodule m1 ( .a(myreg[1]), .b(myreg[0]), .c(2'd1), .d(oreg1));
mymodule m2 ( .a(myreg[2]), .b(myreg[1]), .c(2'd2), .d(oreg1));
mymodule m3 ( .a(myreg[3]), .b(myreg[2]), .c(2'd3), .d(oreg2));我试图使用generate语句,但不知道如何获得连接权限。
genvar i;
generate
for(i=0; i<3; i=i+1) begin : mymodules
mymodule m (.a(myreg[i]), .b(???), .c(???), .d(???);
end
endgenerate在我上面的例子中,端口a很简单,但是其他的我不知道如何处理。关于如何照顾b,c,d,有什么建议吗?谢谢!
发布于 2015-06-12 19:41:42
对于来自0、1、2、3序列的端口连接,需要生成以下序列3,0,1,2。传递函数为+3模4。
genvar i;
generate
for(i=0; i<=3; i=i+1) begin : mymodules
mymodule m (.a(myreg[i]), .b(myreg[(i+3)%4]), .c(i[1:0]), .d(???));
end
endgenerate还请注意,您希望您的循环为<4或<=3运行,目前它只运行于0到2 (<3)。而您在实例化过程中缺少了一个最后的)。
对于oregX d输入,不确定是否有模式被遵循,或者一个简单的if语句能够工作。
genvar i;
generate
for(i=0; i<=3; i=i+1) begin : mymodules
if (i<3) begin
mymodule m (.a(myreg[i]), .b(myreg[(i+3)%4]), .c(i[1:0]), .d(oreg1));
end
else begin
mymodule m (.a(myreg[i]), .b(myreg[(i+3)%4]), .c(i[1:0]), .d(oreg2));
end
end
endgenerate托利奇建议先制作一条电线,然后一点一点地把它连接起来:
wire [3:0] d = {oreg2,{3{oreg1}}};
genvar i;
generate
for(i=0; i<=3; i=i+1) begin : mymodules
mymodule m (.a(myreg[i]), .b(myreg[(i+3)%4]), .c(i[1:0]), .d(d[i]);
end
endgeneratehttps://stackoverflow.com/questions/30810532
复制相似问题