Ejemplo RTL

Una de las dudas que suele surgirle a un diseñador cuando maneja los arrays muldimensionales de SystemVerilog es si dichos códigos son sintetizables.

Afortunadamente la mayoría de los sintetizadores de hoy en día los admiten sin problemas. Para que sirva de ejemplo veamos el código de un shifter 2D de 32 etapas de 8 bits

module shifter_2d(clock,reset,enable,clear,shift,entrada_serie, salida_serie);
parameter tamanyo=32;
input clock; //senyal de reloj
input reset; //reset asincrono
input enable;
input [7:0]entrada_serie;
input clear;
input shift;
output [7:0] salida_serie ;
logic [tamanyo-1:0][7:0] aux;
always_ff @(posedge clock or negedge reset)
if (!reset)
        aux<={tamanyo{8'b0}};
else
	if (!clear)
			if (shift==1'b1)
				aux<={entrada_serie,aux[tamanyo-1:1]};
	else
				aux<={tamanyo{8'b0}};
assign salida_serie=aux[0];
endmodule