Home Articles

在verilog中输入reg类型

Asked
Viewed 1930 times
-1

我使用了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 Answers

  • 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
    
  • 0

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

    电线c; reg c_reg;

    assign c = c_reg;

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

    见我的article for more info about wires and reg types .

Related