【问题标题】:inout with reg type in verilog在verilog中带有reg类型的inout
【发布时间】:2018-06-12 15:45:58
【问题描述】:

我已经将inoutc 一起使用,但要使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


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      wire c;
      reg c_reg;
      
      assign c = c_reg;
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多