0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中跨模块调用的两种不同方式的优缺点讨论

冬至子 来源:Bug记录 作者:woodfan 2023-06-20 15:23 次阅读

在TB当中,直接对DUT(Design under Test)的信号进行读写是很常见的操作。以一个简单的计数器例子为例:

定义一个模块名为a(取名比较随意),功能是带使能和异步复位的计数器,描述如下:

reg [31:0] cnt_r;

assign count = cnt_r;

always @ (posedge clk or posedge rst)
begin
if (rst)
cnt_r <= 'd0;
else if (en)
cnt_r <= count + 32'd1;
end

同时定义一个模块名为b,功能是带使能、置位和异步复位的计数器,描述如下:

reg [31:0] cnt_r;

assign count = cnt_r;

always @ (posedge clk or posedge rst)
begin
if (rst)
cnt_r <= 'd0;
else if (set)
cnt_r <= load_val;
else if (en)
cnt_r <= count + 32'd1;
end

同时创建一个wrapper将模块b例化,并在TB中完成简单的测试工作:

`include "macros.v"

module tb;

reg clk ;
reg rst ;
reg en ;
reg set ;

wire [31:0] a_cnt;
wire [31:0] b_cnt;
wire [31:0] b_cnt1;

initial begin
clk = 0;
rst = 1;
en = 0;
set = 0;
#100
rst = 0;
#100
en = 1;
#100
set = 1;
#20
set = 0;
#100
$finish;
end

always #10 clk = ~clk;

initial
forever begin
#20
$display("Time: %t A_CNT: %d B_CNT:%d", $time, `A_MODULE_INST.count, `B_MODULE_NAME.count);
end

a a_inst(
.clk(clk) ,
.rst(rst) ,
.en (en) ,

.count (a_cnt)
);

b_wrapper b_inst(
.clk(clk) ,
.rst(rst) ,

.set(set) ,
.load_val(32'd20),
.en(en) ,

.count (b_cnt)
);

`ifdef B_MULT
b_wrapper b_inst_1(
.clk(clk) ,
.rst(rst) ,

.set(set) ,
.load_val(32'd40),
.en(en) ,

.count (b_cnt1)
);

`endif

endmodule

a和b模块的XMR调用通过宏定义控制,在tb的display函数中使用。宏定义内容如下:

`define A_MODULE_INST tb.a_inst

`define B_MODULE_NAME b

//`define B_MULT

所以整体的层次结构如下:

  • tb
    • a_inst (module a)
    • b_inst (module b_wrapper)
      • b_inst (module b)
    • b_inst_1 (module b_wrapper if define B_MULT)
      • b_inst (module b)

Hierarchical Reference

可以看到,a模块的XMR方式是从顶层的tb开始,根据Instance name找到的例化的a模块;这种根据结构和Instance Name跨模块调用的方式叫做Hierarchical Reference, 这也是最常见的方式。

优缺点如下:

1.在Verilog的一个module中,Instance Name是唯一的,所以该种方式指向性很明确,支持精细化地控制同一个module例化的不同模块信号。

2.但如果层次结构发生变化,或者Instance Name改变,会爆出Cross Module Reference Error。

Upwards Name Referencing

b模块的XMR方式则是直接定义了b模块的模块名,然后verilog开始从定义的顶层开始查找,没找到就进入下一层继续寻找,直到找到唯一的那个模块名匹配的为止:

它的优缺点与Hierarchical Reference正好相反:

1.不用担心层次结构和Instance Name的变化会影响跨模块调用。

2.使用该方式需要保证唯一性,不然也会爆出Cross Module Reference Error。

实验结果如下:

在未定义B_MULT时:

图片

定义B_MULT时:

图片

总结:

Hierarchical Reference方式严谨但无灵活性,操作上可实现精细化控制,支持多模块;Upwards Name Referencing方式灵活,但只支持单模块,应用场景限制高。

所以,这也是Hierarchical Reference应用广泛的原因吧,如果不是最近犯错,我可能都不会注意到另一种XMR方式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计数器
    +关注

    关注

    32

    文章

    2241

    浏览量

    93980
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8192
  • DUT
    DUT
    +关注

    关注

    0

    文章

    188

    浏览量

    12194
收藏 人收藏

    评论

    相关推荐

    求各路大神帮忙解答一下三极管恒流源 驱动方式优缺点

    (3.6)/R182.用电阻与R17分压后给NPN偏置电压导通后,在进行算射极电流.这两种有什么优缺点讨论下···
    发表于 11-01 09:16

    请问C6748下的两种DSP开发方式有什么区别

    各位开发者: 大家好。我使用的DSP开发板为TMDXLCDK6748,看了TI公司提供的资料,在开发板上开发程序主要有两种方式:一是裸机开发,需要安装StarterWare,另一
    发表于 01-14 14:12

    请问小车转向两种方式有什么优缺点

    我知道的小车转向常见的有两种方式,一是通过舵机控制转向,另一是通过控制个轮子的转速,通过转速差实现转向,这
    发表于 05-21 02:37

    Net模块的通信传输协议有何优缺点

    Net模块在nodemcuNet模块主要是用于个或多个开发板之间,开发板与电脑、手机之间的通信。实现它们之间的信息传递。Net模块中有
    发表于 03-01 07:23

    DC-DC和LDO两种供电模式有什么优缺点

    给单片机供电的电路经常见到DC-DC 和 LDO 两种供电方式,这个选型上有什么规律吗,各有什么样的优缺点
    发表于 11-01 06:43

    两种左右手传输线实现方式的研究现状进行了深入分析以及优缺点对比

    左右手传输线的理论和应用研究已在微波技术领域深入展开,特别是在天馈线系统的应用研究已成为热点。本文根据左右手传输线的宽带移相特性,总结了近年来国内外关于基于左右手传输线的微波移相器的最新研究成果,对两种实现方式的研究现状进行了
    的头像 发表于 02-01 16:37 5456次阅读
    对<b class='flag-5'>两种</b>左右手传输线实现<b class='flag-5'>方式</b>的研究现状进行了深入分析以及<b class='flag-5'>优缺点</b>对比

    探讨VHDL和Verilog模块互相调用的问题

    1、 关于如何在VHDL模块调用一个Verilog模块 在VHDL模块声明一个要与调用
    的头像 发表于 04-30 14:06 9873次阅读
    探讨VHDL和<b class='flag-5'>Verilog</b><b class='flag-5'>模块</b>互相<b class='flag-5'>调用</b>的问题

    浅析标准的Verilog对语句有两种分组方式

    标准的Verilog对语句有两种分组方式——使用begin…end或fork…join,begin…end的语句以顺序方式执行,而fork
    的头像 发表于 09-14 11:02 798次阅读
    浅析标准的<b class='flag-5'>Verilog</b>对语句有<b class='flag-5'>两种</b>分组<b class='flag-5'>方式</b>

    在MATLAB/simulink建模时的两种不同实现方式

    导读:本期文章主要介绍在MATLAB/simulink建模时的两种不同实现方式,一是直接用现成的文件库
    的头像 发表于 09-15 10:07 1735次阅读

    MATLAB/simulink两种实现建模方式的优势

    导读:本期文章主要介绍在MATLAB/simulink建模时的两种不同实现方式,一是直接用现成的文件库
    的头像 发表于 09-15 10:10 4768次阅读

    Verilog模块调用两种同方式优缺点讨论

    在写Verilog TestBench,为了更方便更抽象地对底层模块内部的信号进行控制,经常会使用到模块调用
    的头像 发表于 06-06 16:00 4435次阅读
    <b class='flag-5'>Verilog</b><b class='flag-5'>中</b><b class='flag-5'>跨</b><b class='flag-5'>模块</b><b class='flag-5'>调用</b>的<b class='flag-5'>两种</b>不<b class='flag-5'>同方式</b>的<b class='flag-5'>优缺点</b><b class='flag-5'>讨论</b>

    两种用于汽车PCB组件的连接器端子组件的优缺点

    摘 要:本文介绍两种用于汽车PCB组件的可塑性端子即针眼(EON)形可塑性端子和独木舟形可塑性端子(CCT)设计式样,并简单地介绍这两种连接器端子组件的优缺点
    的头像 发表于 11-05 11:39 843次阅读
    <b class='flag-5'>两种</b>用于汽车PCB组件的连接器端子组件的<b class='flag-5'>优缺点</b>

    电动机调速方式优缺点

    电动机调速方式优缺点  电动机调速是指根据负载的要求调整电动机转速的过程,可分为机械调速和电子调速两种方式。机械调速主要使用机械装置来调整电动机的速度,而电子调速则利用电子器件对电动
    的头像 发表于 01-04 11:26 854次阅读

    verilog调用模块端口对应方式

    Verilog是一硬件描述语言(HDL),广泛应用于数字电路设计和硬件验证。在Verilog模块是构建电路的基本单元,而
    的头像 发表于 02-23 10:20 1089次阅读

    控制器有哪两种实现方式?各有何优缺点?

    介绍这两种实现方式优缺点。 硬件控制器 硬件控制器是一使用专用硬件电路来实现控制功能的控制器。它通常由一组逻辑电路、寄存器、计数器等组成,用于实现特定的控制逻辑。 优点: 性能高
    的头像 发表于 06-30 10:33 693次阅读