我已经使用了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
答案 0 :(得分:1)
在verilog inout
中是端口的方向。 wire
或reg
是信号的类型。
如果您想要驱动双向端口,则应将其声明为inout wire
或inout
并使用启用信号驱动它
以下是双向端口示例。
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