我在Verilog中设计了一个模块(A),我需要在顶级模块中实例化它四次。这两个模块相互通信,还有一些其他模块。‘’发出一些信号,其他实例化的'A‘应该接受。信号通过接口或总线发送。我不想通过加入任何标准的总线协议来使设计复杂化。我创建了一个inout端口,以避免输入和输出具有相同类型的端口。
是否有任何方法为每个实例化分配id或代码,以便每个实例化检查该id并接受来自与其本身不同的ID的信号。现在没有id或标准总线协议,模块也接受自己的信号,这是不应该发生的。
发布于 2014-04-21 17:09:23
在这里,您可以这样做:
发布于 2014-04-21 16:49:52
为什么不为每个模块设置一个参数并将其用作ID呢?然后为每个实例设置唯一的参数:
module A;
parameter ID = 0; //default value
case (ID)
0: //specific code for ID0
1: //specific code for ID1
2: //specific code for ID2
3: //specific code for ID3
endcase
endmodule
你的顶级模块:
module top;
A #(.ID(0)) inst_0 (...);
A #(.ID(1)) inst_1 (...);
A #(.ID(2)) inst_2 (...);
A #(.ID(3)) inst_3 (...);
endmodule
还有几点是有用的:
您可能需要检查generate block
或vectorized/array module instantiation
,这允许您实例化一个模块数组。
另外,请注意,一般来说,每个模块都可以看到整个层次结构。在每个模块中,您可以使用hierarchical expression
访问信号。
module A;
reg s;
....
initial $display("The initial value of signal s in instance A_2 is:", top.inst_2.s);
endmodule
不过,请注意,这是不建议的,因为您的模块描述将特定于您的层次结构。
https://stackoverflow.com/questions/23193638
复制相似问题