在verilog中输入reg类型

时间:2018-06-12 15:45:58

标签: verilog inout

我已经使用了inout with c但是对于c来说是程序赋值的LHS,它需要是一个reg类型变量。任何人都可以帮我解决这个问题吗?

module multiedgeclk(input clk ,[7:0] a,b,d, inout [7:0] c, output reg [7:0]f); 
always @(posedge clk)
c <= a + b;
always @(negedge clk)
f = c & d;
endmodule

2 个答案:

答案 0 :(得分:1)

在verilog inout中是端口的方向。 wirereg是信号的类型。 如果您想要驱动双向端口,则应将其声明为inout wireinout并使用启用信号驱动它 以下是双向端口示例。

module ABC( inout [7:0] c );
reg [7:0] c_out;
reg out_en;
assign c = out_en ? 8'hz : c_out; 
/* something here
... 
*/
endmodule

答案 1 :(得分:0)

无法在程序上分配inout端口。没有任何东西可以表明在端口上持有该值多长时间。这是任何wire的问题。但是电线具有多个连续驱动器的强度机制,最高强度获胜。因此,您可以使用连续分配来选择性地驱动值,或通过驱动z值将其关闭。

电线c; reg c_reg;

指定c = c_reg;

现在,您可以在程序上将c_reg分配给值或8'bz

查看我的article for more info about wires and reg types