Cómo encontrar el máximo o el mínimo en Verilog de codificación?

la pregunta es simple, me escuchó que assign out = (a>b)?a:b está mal. ¿está mal? si es así, ¿hay otra manera de encontrar a MAX?

InformationsquelleAutor frequent94 | 2013-12-15

3 Kommentare

  1. 3

    Es correcto si y sólo si out es un wire. Si es un registro, entonces usted tiene que hacer algo como esto:

    always @* begin
      if (a>b)
        out = a;
      else
        out = b;
    end
    

    Tomar en cuenta que en Verilog, una variable de tipo reg puede inferir de un alambre o un pestillo, o de un verdadero registro. Depende de cómo especificar el comportamiento del módulo que utiliza la reg:

    Combinacional (out se implementa como un wire aunque es un reg)

    module max (input [7:0] a, 
                input [7:0] b, 
                output reg [7:0] out);
      always @* begin
        if (a>b)
          out = a;
        else
          out = b;
      end
    endmodule
    

    Combinacional (out se implementa como un wire y se define como un wire)

    module max (input [7:0] a, 
                input [7:0] b, 
                output [7:0] out);
      assign out = (a>b)? a : b;
    endmodule
    

    Latch (out es un reg, y se implementa como un pestillo que almacena el último resultado producido si las condiciones no hacen el cambio, es decir, si a==b, que por cierto, no puede proporcionar una salida correcta en ese caso)

    module max (input [7:0] a, 
                input [7:0] b, 
                output reg [7:0] out);
      always @* begin
        if (a>b)
          out = a;
        else if (a<b)
          out = b;
      end
    endmodule
    

    Registro (out se implementa como un verdadero registro, del borde de reloj activa)

    module max (input clk,
                input [7:0] a, 
                input [7:0] b, 
                output reg [7:0] out);
      always @(posedge clk) begin
        if (a>b)
          out <= a;
        else if (a<=b)
          out <= b;
      end
    endmodule
    
    • Es seguro que a la razón que el Registro de ejemplo, se puede omitir el «si (a<=b)»?
  2. -1

    Usted puede hacer esto mediante el uso del restador. El uso de un restador es un área menor costo caro y más rápido – si fpga tienen sub/agregar componentes o aritmética sub/agregar soporte a la operación y no tiene comperator componentes.

    http://teahlab.com/4-Bit_Signed_Comparator/

    De verificación función booleana en la final. Comprobar sólo 3 bits.

    Lo siento por mi inglés.

    • ¿Qué es un comparador que evalúa (a>b)?
    • Un restador NO es un reemplazo para un comparador. Si la diferencia es pequeña (menos de la mitad del rango de valores posibles), el bit más significativo podría ser utilizable como comparar un poco. Pero si la diferencia es grande (más de la mitad del rango de valores posibles), a continuación, el MSB es el contrario del caso anterior.
    • No estoy de acuerdo con usted: teahlab.com/4-Bit_Signed_Comparator

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...