verilog inout信号testbench写法

inout类型的变量,仿真时必须定义为wire类型
那怎么作为输入端给它赋值呢?
eg:
data = oe ? data_reg : 1'bz;
data是wire类型,oe和data_reg是reg类型
oe=1时data是输出,那么oe=0时怎么给data赋值啊....(testbench中,reg类型才可以被赋值啊...)

当oe=0时,inout类型的data在这个模块是作为输入的啊,本来就不能赋值,也不需要赋值(使用的输入值)。
作为输入时,应该是和这个模块连接的另一个模块中进行赋值,那个模块中的输出是这个模块的输入(那个模块的输出还是reg的)。追问

实际应用时当然不需要给值,但是仿真的时候需要给值啊...

追答

所以说仿真时在另外的模块中给激励。看上面回答的后一句话

追问

inout就是顶层的IO了,不会有另外模块的。
而且,仿真时只要是输出就是wire,reg是输入.....

追答

testbench顶层的怎么会有inout?顶层的就不需要有端口了,只要调用其他模块就行。被测试模块的顶层才有inout,如果调用的模块有inout端口,那么就用两个信号连接就可以。
首先要搞清楚的是in和out是对哪个模块来说的。问题中的例子都是被调用模块的情况,不是testbench的。

追问

谢了...回答得很耐心,但是另一个人文档说的正好是我要解决的。我是在写testbench,搞不懂inout信号为什么在testbench中必须定义为wire类型、但却仍既做输出、又做输入。还是很感谢你!

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-21

reg [39:0] data$inout$reg;    //data$inout$reg当成一个变量

wire [39:0] data = data$inout$reg;

date直接例化双向口,输入的时候data的值就是data$inout$reg,看一下那个文档,解释的挺详细的。


追问

资料是挺好,但我使用的是verilog....看不懂VHDL....谢了

追答

里面verilog和VHDL都有例子的,仔细看!

本回答被提问者采纳
第2个回答  推荐于2017-10-10
  对于testbench而言,端口应当和被测试的module一一对应。端口分为input,output和inout类型产生激励信号的时候,input对应的端口应当申明为reg, output对应的端口申明为wire,inout端口比较特殊;
  一般用initial块给信号赋初值,initial块执行一次,always或者forever表示由事件激发反复执行。
  .一般在testbench的开头定义时间单位和仿真 精度,比如`timescale 1ns/1ps,前面一个是代表时间单位,后面一个代表仿真时间精度。
  对于一个设计而言,时间刻度应该统一,如果设计文件和testbench里面的时间刻度不一致,仿真 器默认以testbench为准。一个较好的办法是写一个global.v文件,然后用include的办法,可以防止这个问题。
相似回答