当前位置:  开发笔记 > 编程语言 > 正文

将层次结构传递到Verilog模块

如何解决《将层次结构传递到Verilog模块》经验,为你挑选了1个好方法。

我有一个"观察者"模块,目前正在其中使用全局层次结构.我需要使用第二个全局层次结构实例化第二个实例.

目前:

module watcher;
wire sig = `HIER.sig;
wire bar = `HIER.foo.bar;
...
endmodule

watcher w; // instantiation

期望:

module watcher(input base_hier);
wire sig = base_hier.sig;
wire bar = base_hier.foo.bar;
...
endmodule

watcher w1(`HIER1); // instantiation
watcher w2(`HIER2); // second instantiation, except with a different hierarchy

我最好的想法是使用vpp(Verilog预处理器)来强制生成两个几乎相同的模块(每个层次结构一个),但是有更优雅的方式吗?



1> DMC..:

我的首选是在测试平台中包含一个模块(或少量模块),其中包含所有探针,但没有其他功能.测试平台中需要探针的所有其他模块然后连接到该"探针模块".如果您可以选择使用SystemVerilog接口而不是原始电线.这可以避免您的问题,因为没有观察者需要全局层次结构,并且整个测试平台将更容易维护.参见得墨忒耳定律.

或者......(但这会将层次结构放在实例化中......)

module watcher(sig, bar);
  input sig;
  input bar;
...
endmodule

watcher w1(`HIER1.sig, `HIER1.foo.bar); // instantiation
watcher w2(`HIER2.sig, `HIER2.foo.bar); // second instantiation, except with a different hierarchy

随后您还可以:

`define WATCHER_INST(NAME, HIER) watcher NAME(HIER.sig, HIER.foo.sig)

`WATCHER_INST(w1, `HIER1);
`WATCHER_INST(w2, `HIER2);

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有