我正在声明连接端口的几个模块,如下所示:
String name="SUSHIL";
String newName="";
int i=0;
int l=name.length();
for(i=0;i<l;i++)
{
char ch1=name.charAt(i);
if(!(newName.indexOf(ch1)>-1))
{
newName=newName + ch1;
}
}
System.out.println("Output:"+newName);
我正在尝试使用生成语句,但无法弄清楚如何获得连接权限。
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));
在上面的示例中,端口a很容易,但其他人我不知道如何处理。有关如何照顾b,c和d的任何建议?谢谢!
答案 0 :(得分:2)
对于来自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
endgenerate