首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog generate语句:条件端口连接

Verilog generate语句:条件端口连接
EN

Stack Overflow用户
提问于 2015-06-12 19:10:14
回答 1查看 2.5K关注 0票数 0

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

代码语言:javascript
复制
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语句,但不知道如何获得连接权限。

代码语言:javascript
复制
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,有什么建议吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 19:41:42

对于来自0、1、2、3序列的端口连接,需要生成以下序列3,0,1,2。传递函数为+3模4。

代码语言:javascript
复制
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语句能够工作。

代码语言:javascript
复制
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

托利奇建议先制作一条电线,然后一点一点地把它连接起来:

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30810532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档