我使用了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
在verilog中 inout 是端口的方向 . wire 或 reg 是信号的类型 . 如果你想驱动一个双向端口,它应该声明为 inout wire 或 inout 并用启用信号驱动它这是一个双向端口的例子 .
inout
wire
reg
inout wire
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
无法在程序上分配 inout 端口 . 没有任何东西可以表明在端口上持有该值多长时间 . 这是任何 wire 的问题 . 但是电线具有多个连续驱动器的强度机制,最高强度获胜 . 因此,您可以使用连续分配来选择性地驱动值,或通过驱动 z 值将其关闭 .
z
电线c; reg c_reg;
assign c = c_reg;
现在,您可以在程序上将 c_reg 分配给值或 8'bz
c_reg
8'bz
见我的article for more info about wires and reg types .
2 回答
在verilog中
inout
是端口的方向 .wire
或reg
是信号的类型 . 如果你想驱动一个双向端口,它应该声明为inout wire
或inout
并用启用信号驱动它这是一个双向端口的例子 .无法在程序上分配
inout
端口 . 没有任何东西可以表明在端口上持有该值多长时间 . 这是任何wire
的问题 . 但是电线具有多个连续驱动器的强度机制,最高强度获胜 . 因此,您可以使用连续分配来选择性地驱动值,或通过驱动z
值将其关闭 .电线c; reg c_reg;
assign c = c_reg;
现在,您可以在程序上将
c_reg
分配给值或8'bz
见我的article for more info about wires and reg types .