El puerto de salida de Verilog es de alta impedancia (Z) cuando es controlado por un submódulo

1

Estoy escribiendo código para desplazar 4 bits usando el indicador de acarreo para generar retardo mediante la creación de instancias, pero cuando estoy creando una instancia en la salida del módulo superior del módulo superior temp1 siempre permanecerá en un estado de alta impedancia. donde estoy haciendo mal? En un banco de pruebas, doy win=4'b1100 como datos ...

El código siguiente:

module iir_model(temp1,win,clk);
    input [3:0] win;
    input clk;
    output reg [3:0] temp1;

    delay_4   a1(temp1,win,clk);
endmodule


module delay_4(data_out,data_in,clk);
    input [3:0] data_in;
    input clk;
    output [3:0] data_out;

    reg [3:0] data_out;
    reg [2:0] counter=4'b000;
    reg [3:0] temp;
    reg carry;

    integer i=0;
    always @(posedge clk)
    begin 
        i=i+1;
        if(i==1)
            temp=data_in;
        if(i>1)
        begin
            if(counter!=4'b100)
            begin
                carry=temp[0];
                temp=temp>>1'b1;
                temp[3]=carry;
                $monitor ($time," clk=%b,  counter=%b ,temp=%b ,carry=%b,data_out=%b",clk, counter,temp,carry,data_out);
                counter=counter+1;
            end
            data_out=(temp==data_in)?temp:4'b0000;
        end
    end
endmodule 
    
pregunta Shreyas Patel

1 respuesta

3

Creo que temp1 en el nivel superior debería ser un wire , no un reg , ya que no se pretende que reg sea impulsado desde un puerto de salida de un módulo.

Intenta cambiar solo a output [3:0] temp1;

    
respondido por el Tim

Lea otras preguntas en las etiquetas