register enable line use en el bloque 'case' (síntesis de verilog para altera cpld)

1

Tengo lo siguiente en un diseño de verilog dirigido a un CPLD altera (actualmente dirigido a EPM240, aunque el dispositivo de destino no está escrito en piedra):

always @(posedge clk)
    if (we)
    begin
        case (rw_sel)
           3'd0: reg0 <= data_in;
           3'd1: reg1 <= data_in;
           ...
        endcase
    end

Supuse que esto sintetizaría un diseño en el que rw_sel se decodificó en varias líneas de selección diferentes, que se '' y '' con ' we ', y luego se conectaría a la entrada de habilitación del registro. p>

Sin embargo, esto no es lo que se ha hecho: al examinar los resultados en el visor RTL, la línea we se ha conectado directamente a las entradas de habilitación de cada registro, luego la entrada de datos de cada registro se conecta a una mux2 que selecciona entre los datos entrantes o el valor actual del registro.

¿No es esto mucho menos eficiente en espacio que el diseño que esperaba? Y si es así, ¿cómo puedo persuadir a Quartus para que genere la versión más eficiente?

    
pregunta Jules

1 respuesta

0
  

¿No es esto mucho menos eficiente en espacio que el diseño que esperaba?

No; En realidad es mejor.

Considere la estructura de la LE en el CPLD MAX II (de MAX II Architecture ). He destacado un detalle importante:

La entrada para habilitar el reloj del registro no pasa a través de la LUT . Debe ser impulsado por una de las dos señales de habilitación de reloj que se comparten en el LAB.

Su diseño requerirá que cada registro se implemente en un LAB separado, lo que lo dejará sin espacio muy rápidamente. El diseño del sintetizador permite que cada uno de los registros se implemente dentro de un solo LE, probablemente todos dentro de un solo LAB.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas