打印
[FPGA]

【工程源码】【Modelsim常见问题】TestBench中端口reg和wire定...

[复制链接]
620|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zgmxs|  楼主 | 2020-2-22 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文和设计代码由FPGA爱好者小梅哥编写,未经作者许可,本文仅允许网络论坛复制转载,且转载时请标明原作者。



TestBench中端口reg和wire定义解惑

很多学员在学习TestBench的编写的时候,容易死记概念,最典型的就是,被测试模块的输入端口在测试文件中要定义成reg,输出端口要定义为wire。
例如,最典型的这种写法,大家都能看得懂。

reg clk;
initial clk = 0;
always #10 clk = ~clk;
led_run led_run
(
    .clk50(clk),
    .led(led)
);

那我现在换一种写法,我定义一个中间信号,名叫clkin,然后按照下述方法写:

reg clk;
initial clk = 0;
always #10 clk = ~clk;
wire clkin;
assign clkin = clk;
led_run led_run
(
    .clk50(clkin),
    .led(led)
);

这个时候,被测试模块的输入端口就链接到了clkin这个被定义为wire型的信号上,是不是就与我们所说的基本规律相违背了呢?

这个实际就是看你有没有真正理解激励信号的意义,使用reg定义激励信号,然后我们可以通过对reg信号在不同的时候赋予不同的值来产生激励。如果使用reg信号定义的信号名称和你的被测试模块的端口在测试文件中的命名一样,就可以默认连接上,第一种写法就是这种形式。在第二种写法中,增加了一个中间信号,这个信号是个wire型的,一端连接到了reg型的clk这个信号上,另一端连接到了被测试模块的clk50输入端口。实质上等同于直接将reg型的clk信号直接连接到被测试模块的clk50上,所以并没有冲突。

为什么我在最开始讲测试文件的编写时候要重点使用示波器和信号发生器来类比,就是希望大家真正理解这些信号的实质。


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

104

帖子

3

粉丝