芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 7171|回复: 0

【Modelsim常见问题】TestBench中端口reg和wire定义解惑

[复制链接]
  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 423

    主题

    782

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15855
    QQ
    发表于 2019-1-3 11:17:22 | 显示全部楼层 |阅读模式
    TestBench中端口reg和wire定义解惑


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


    1. reg clk;
    2. initial clk = 0;
    3. always #10 clk = ~clk;

    4. led_run led_run
    5. (
    6.     .clk50(clk),
    7.     .led(led)
    8. );
    复制代码


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

    1. reg clk;
    2. initial clk = 0;
    3. always #10 clk = ~clk;

    4. wire clkin;

    5. assign clkin = clk;

    6. led_run led_run
    7. (
    8.     .clk50(clkin),
    9.     .led(led)
    10. );
    复制代码

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


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


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


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-4-26 08:50 , Processed in 0.147238 second(s), 32 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表