如何在verilog任务中处理双向引脚(inout)

时间:2017-03-15 10:38:07

标签: task verilog bidirectional inout

我想在我的控制器中使用双向数据总线。这是代码

module controller ( clk, data_out);
// Port Declaration
input   clk;
inout   [7:0] data_out;

reg     [7:0] a;
reg     [7:0] b;
wire    [7:0] c;

// data should write to data_out (data_out act as output)

task write; 
input c;
begin

assign data_out = a;
data_out <= c;

end
endtask

// data should read from data_out (data_out act as input)

task read; 
output b;
begin

assign data_out = 8'bz;
b <= data_out;

end
endtask

endmodule

当我编译本文时,我收到错误

  

程序连续分配中的LHS可能不是net:data_out。

它说assign data_out = a;assign data_out = 8'bz;出错了 我知道assign应该在always或initial块中完成,但在使用这些块的任务中没用/给eroor

那么,我们如何才能在一项任务中改变公交车的方向?

1 个答案:

答案 0 :(得分:1)

你不应该在initial和always块中使用assign。我不明白为什么你一定想要它在任务中? 只需单独使用分配。为双向端口分配值需要一个标志,指定应该执行什么操作 - 读取或写入。语法如下:

  assign bidir_port = [flag] ? a : 1'bz;