inout类型
inout类型,顾名思义,是输入输出引脚。也就是同样的引脚,既可以作为输出也可以作为输入。那么这就带来一个问题,怎么控制它输入输出?
解决方案
将inout看成是一个三态门。利用一个使能控制信号,来对inout进行选择。
注意事项
首先,在程序的 主体上,我们使用控制信号,来判断的是,输出模式的状态。
也就是说,使用控制信号来进行选择的时候是使得inout处于out状态以及高阻态。而当inout作为输入的时候,不用去选择。
举例:
inout [7:0]data,
///
对inout类型的操作
reg [7:0]data_out_sb;//将想要输出数据先寄存到此处
reg en_output; //使能控制,1:选择data_out_sb;0:高阻态
assign data=en_output?data_out_sb:1’bz;//处于高阻态是输入状态
//
仿真
在仿真的时候,当我们想要使得inout作为输入,输入数据的时候。千万不能给data直接赋值,或者在testbench文件里面再写一个上面的选择判断的语句。如果这样,会导致完全无法输出。同时,inout类型在testbench文件里面应该定义为wire
假如,我们想先使得inout输出,使得器件得到初始化;然后在使得inout输入,得到器件的输出。
如果我们再测试文件里面对inout类型初始化,或者赋值或者是向上面一样利用一个状态控制,这些方法都不行。如果这样做,会导致inout类型,无法工作,堵塞。
仿真解决方案,使用force
当你想使得inout类型,作为输入。就在testbench文件里面,使用force类型。
wire[7:0]data;//inout类型
initial begin
force data=8'd100;
end