0

我用过inoutwith 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
4

2 回答 2

3

inout不能按程序分配端口。没有任何迹象表明该值在端口上保持多长时间。这是任何wire. 但是电线有一个强度机制,可以让多个连续驱动器,最高强度获胜。因此,您可以使用连续赋值来选择性地驱动一个值或通过驱动一个值来关闭它z

wire c;
reg c_reg;

assign c = c_reg;

现在您可以在程序上分配c_reg一个值或8'bz

有关电线和 reg 类型的更多信息,请参阅我的文章。

于 2018-06-13T14:26:08.740 回答
3

在veriloginout中是端口的方向。wire或者reg是信号的类型。如果你想驱动一个双向端口,它应该声明为inout wireorinout并用使能信号驱动它 这里是一个双向端口的例子。

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
于 2018-06-12T16:11:20.563 回答