Verilog: Implementación usando módulos primitivos frente a operadores de bits

1

El libro de texto que estoy leyendo implementa sumadores de 1 bit utilizando módulos primitivos integrados:

module yAdder1(z, cout, a, b, cin);
     output[0:0] z, cout;
     input[0:0] a, b, cin;
     wire[0:0] tmp, outL, outR;

     xor left_xor(tmp, a, b);
     xor right_xor(z, cin, tmp);
     and left_and(outL, a, b);
     and right_and(outR, tmp, cin);
     or my_or(cout, outR, outL);
endmodule

¿Pero por qué no usar operadores de bit-wise? Parece más simple.

module yAdder1(z, cout, a, b, cin);
     output[0:0] z, cout;
     input[0:0] a, b, cin;

     assign z = (a ^ b) ^ cin;
     assign cout = (a & b) | ((a ^ b) & cin);
endmodule

¿A menos que los operadores de bit-bit utilicen implícitamente módulos primitivos?

    
pregunta NoName

2 respuestas

2

¿Por qué no usar operadores booleanos?

assign Z = (a != b) != c; 
assign cout = (a && b) || ((a != b) && cin);

Las tres opciones son formas funcionalmente equivalentes de implementar un sumador completo estándar.

La respuesta simple a su pregunta (y a mi retórica) probablemente sea simplemente que su libro de texto está tratando de acumular conocimientos, comenzando con un diseño de bajo nivel y elaborando.

En el módulo Verilog que enseñamos en la universidad, comenzamos con primitivas (nivel de puerta), luego pasamos a los operadores bilingües y bilingües de Verilog, luego nos movemos a niveles más altos de abstracción (por ejemplo, {cout, Z} = a + b + cin ). Descubrimos que esto ayuda a introducir a las personas que pueden no tener una programación sólida o antecedentes digitales en el diseño de FPGA, lo que les permite tener una idea de cómo funcionan los niveles de abstracción cada vez más altos.

    
respondido por el Tom Carpenter
1

Nadie en la industria usa modelos de bits. Menos mecanografía, funcionalidad equivalente. Quizás más optimizado en el simulador.

    
respondido por el Brian Carlton

Lea otras preguntas en las etiquetas