SystemVerilog接口时钟块信号输入输出方向判定咨询
怎么确定SystemVerilog接口时钟块中信号的输入/输出方向?
嘿,这个问题绝对是刚上手SystemVerilog接口时钟块的同学最容易踩的坑!核心逻辑其实一句话就能点透:时钟块里的信号方向,是站在测试台(testbench)的视角来定义的,而不是DUT的视角!
我结合你给的代码例子拆解一下,你马上就能明白:
先明确两个视角的区别
我们先把你的代码摆出来对照:
DUT模块定义
module A(o,clk,rst,i); output o; input i,clk,rst; ... endmodule
接口的时钟块
interface my_if(input bit clk); logic o,rst,i; wire clk; clocking cb@(posedge clk); input o; // 此处为何定义为input? output i,rst; // 此处为何定义为output? endclocking ... endinterface
逐个信号分析
信号
o的方向:
在DUT里o是output——意味着这个信号是从DUT发出来的,最终要被testbench读取。站在testbench的角度,这个信号是输入到testbench的,所以在时钟块里要定义为input。信号
i和rst的方向:
在DUT里这两个是input——意味着testbench要把信号发给DUT。站在testbench的角度,这是从testbench输出出去的信号,所以在时钟块里定义为output。
总结成可套用的规则
你以后遇到这种情况,就按这两步来:
- 第一步:先搞清楚这个信号在DUT里是
input还是output - 第二步:切换到testbench视角判断:
- 如果信号是DUT的
output→ testbench要读它 → 时钟块里写input - 如果信号是DUT的
input→ testbench要驱动它 → 时钟块里写output
- 如果信号是DUT的
额外小提醒
别把接口本身的信号类型(比如logic o,rst,i)和时钟块的方向搞混!接口里的信号是无方向的(或者说只是声明数据类型),而时钟块的方向是专门用来定义testbench和DUT同步交互时的数据流方向的。
内容的提问来源于stack exchange,提问作者Rocky Zheng
相关产品推荐
相关产品推荐

