Verilog生成语句:条件端口连接

时间:2015-06-12 19:10:14

标签: verilog system-verilog

我正在声明连接端口的几个模块,如下所示:

 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的任何建议?谢谢!

1 个答案:

答案 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