2017-03-15 46 views
0

我想在我的controller.Here的代码如何在Verilog的任务处理双向引脚(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; 我知道分配错误应该总是或初始块,但在使用这些区块的无用/给eroor

然后一个任务来完成,我们如何能够改变公共汽车在方向任务?

回答

1

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

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

*不能*应替换为***不应该***。程序性分配(始终分配/初始化)目前是合法的,尽管计划弃用。 [IEEE1800-2012](http://standards.ieee.org/getieee/1800/download/1800-2012.pdf)附件C.4.2“程序分配和撤销分配声明可能是设计错误的根源,可能是阻碍工具实施程序性分配和撤销分配声明不能提供避免这些问题的另一种方法无法完成的能力,因此程序性分配和分配声明在弃用清单上。 – Greg

+0

@Greg谢谢,完成:) – Laleh