首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为Verilog模块分配ID号或代码

为Verilog模块分配ID号或代码
EN

Stack Overflow用户
提问于 2014-04-21 08:23:17
回答 2查看 635关注 0票数 1

我在Verilog中设计了一个模块(A),我需要在顶级模块中实例化它四次。这两个模块相互通信,还有一些其他模块。‘’发出一些信号,其他实例化的'A‘应该接受。信号通过接口或总线发送。我不想通过加入任何标准的总线协议来使设计复杂化。我创建了一个inout端口,以避免输入和输出具有相同类型的端口。

是否有任何方法为每个实例化分配id或代码,以便每个实例化检查该id并接受来自与其本身不同的ID的信号。现在没有id或标准总线协议,模块也接受自己的信号,这是不应该发生的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-21 17:09:23

在这里,您可以这样做:

  1. 添加ID输入端口 当这个端口被设置为常量时,设备在启动时就可以检测到它的ID。从技术上讲,您可以使用它来执行动态ID,但是通常您只需将端口连接到一个常量值。这是最灵活的选择,尤其是如果您希望将最终产品用作可配置的component.module A( /* your_ports */,输入1:0 ID );/* .代码. * /终端模块顶部;A inst0 ( .ID(2'd0),.* );A inst1 ( .ID(2'd1),.* );A inst2 ( .ID(2'd2),.* );A inst3 ( .ID(2'd3),.* );.ID模块
  2. 创建ID参数 模拟到ID输入端口,只是值是硬编码的,并且实例在编译时、模拟或设备启动之前知道ID值。唯一的参数值生成唯一的模块。如果ID为0时,它将与具有1.模块A#(参数ID) ( /* your_ports */ );/* .代码. * /终端模块顶部;A #( .ID(0) ) inst0 ( .* );A #( .ID(1) ) inst1 ( .* );A #( .ID(2) ) inst2 ( .* );A #( .ID(3) ) inst3 (.* );.ID模块
票数 1
EN

Stack Overflow用户

发布于 2014-04-21 16:49:52

为什么不为每个模块设置一个参数并将其用作ID呢?然后为每个实例设置唯一的参数:

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

你的顶级模块:

代码语言:javascript
运行
复制
module top;

  A #(.ID(0)) inst_0 (...);
  A #(.ID(1)) inst_1 (...);
  A #(.ID(2)) inst_2 (...);
  A #(.ID(3)) inst_3 (...);

endmodule

还有几点是有用的:

您可能需要检查generate blockvectorized/array module instantiation,这允许您实例化一个模块数组。

另外,请注意,一般来说,每个模块都可以看到整个层次结构。在每个模块中,您可以使用hierarchical expression访问信号。

代码语言:javascript
运行
复制
module A;
   reg s;
   ....
   initial $display("The initial value of signal s in instance A_2 is:", top.inst_2.s);
endmodule

不过,请注意,这是不建议的,因为您的模块描述将特定于您的层次结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23193638

复制
相关文章

相似问题

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