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

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

3天内不再提示

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

冬至子 来源:Bug记录 作者:woodfan 2023-06-06 16:00 次阅读

在写Verilog TestBench,为了更方便更抽象地对底层模块内部的信号进行控制,经常会使用到跨模块调用的方式,这个就叫做Cross Module Reference,缩写为XMR。

本文就XMR的两种方式做介绍,涉及部分基础的Verilog 知识。

在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方式。

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

    关注

    28

    文章

    1326

    浏览量

    109302
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11997
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    在DCDC芯片规格书中遇到电源的整流方式,有的是异步整流有的是同步整流。这两种整流方式有什么不同呢?

    经常会在DCDC芯片规格书中遇到电源的整流方式,有的是异步整流有的是同步整流。这两种整流方式有什么不同呢,各自又有什么优缺点呢?
    发表于 03-12 14:05

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

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

    SQL语句的两种嵌套方式

    一般情况下,SQL语句是嵌套在宿主语言(如C语言)的。有两种嵌套方式:1.调用层接口(CLI):提供一些库,库的函数和方法实现SQL的
    发表于 05-23 08:51

    两种图形嵌入方法有什么优缺点

    基于COM组件的Matlab与C++混合编程方式因拥有独立的运行环境和两种语言的互补优势而被众多科研人员和编程人员所接受,同时也是MathWorks公司推荐使用的混编方式
    发表于 08-19 07:19

    数字电源的两种调制方式有何区别?看完恍然大悟

    数字电源的调制方式可以分为脉冲宽度调制(Pulse]1、脉冲宽度调制脉冲宽度调制(简称脉宽调制)时在不改变频率的情况下,通过调节脉冲的占空比来调节功率管的开关时间;而脉冲频率调制(脉频调制)模式是在不改变脉冲占空比的情况下,通过调节脉冲频率来控制开管的开启时间。两种调制模
    发表于 07-03 07:00

    两种可控直流电源的工作原理、构成和优缺点

    清楚两种可控直流电源的工作原理、构成和优缺点。(1)静止式可控整流器——用静止式的可控整流器,以获得可调的直流电压。(2)直流斩波器或脉宽调制变换器——用恒定直流电源或不控整流电源供电,利用电力电子
    发表于 09-07 06:25

    SQL语言的两种使用方式

    编写)-DBMS预处理程序-预处理过的源程序(嵌入的SQL语句已转换成函数调用形式)-宿主语言编译程序(SQL函数定义库)-目标程序嵌入式SQL涉及到SQL语句在主语言程序的使用规定,以解决两种语言的不一致和相互联系的问题。.
    发表于 12-20 06:51

    vnc和xrdp两种远程连接的方式

    [zju嵌入式]树莓派之远程桌面 之前篇介绍了通过串口和ssh登陆到树莓派的方法,这两种方式的有点在于连接方面,响应速度快,但是也有不够直观的缺点,没办法看到图形界面.在这篇博文中,
    发表于 12-24 07:54

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

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

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

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

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

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

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

    在TB当中,直接对DUT(Design under Test)的信号进行读写是很常见的操作。
    的头像 发表于 06-20 15:23 631次阅读
    <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>

    verilog调用模块端口对应方式

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