Banco de Registros Patricia Borensztejn Primer Cuatrimestre 2016 Diseño de Sistemas con FPGA Banco de Registros • Vamos a hacer un banco de registros , de 4 registros de 8 bits generales • El Banco es dual port, es decir podemos leer y escribir dos registros en un mismo ciclo • El efecto de escribir en el mismo registro dos valores distintos usando ambos puertos es indeterminado Dual Port Register File module dualPortRegisterFile( input clk, input wrEn_A, input [1:0] wrAddr_A, input [1:0] rdAddr_A, input [7:0] inData_A, output reg[7:0] outData_A, input wrEn_B, input [1:0] wrAddr_B, input [1:0] rdAddr_B, input [7:0] inData_B, output reg[7:0] outData_B ); Lectura Doble Puerto reg0 @ outDataB reg1 0 reg0 outDataA 1 2 3 reg2 rdAddrA reg3 rdAddrB Dos Multiplexores Envian la Salida a los Ports A y B Lectura de Doble Puerto // read Port A reg [7:0]reg0,reg1,reg2,reg3; reg [7:0]reg0_next,reg1_next,reg2_next,reg3_next; always @ * begin case (rdAddr_A) 0: outData_A=reg0; // read Port B 1: outData_A=reg1; always @ * 2: outData_A=reg2; begin 3: outData_A=reg3; case (rdAddr_B) endcase 0: outData_B=reg0; end 1: outData_B=reg1; 2: outData_B=reg2; 3: outData_B=reg3; endcase end wrEn_A wrAddr_A inData_A Escritura Doble Puerto reg0_next reg0 reg1_next wrEn_B wrAddr_B inData_B reg2_next reg3_next reg0 reg1 reg2 reg3 Escritura Doble puerto always @ (posedge clk) begin reg0<=reg0_next; reg1<=reg1_next; reg2<=reg2_next; reg3<=reg3_next; end always @ * begin reg0_next=reg0; reg1_next=reg1; reg2_next=reg2; reg3_next=reg3; if (wrEn_A) case (wrAddr_A) 0: reg0_next<=inData_A; 1: reg1_next<=inData_A; 2: reg2_next<=inData_A; 3: reg3_next<=inData_A; endcase if (wrEn_B) case (wrAddr_B) 0: reg0_next<=inData_B; 1: reg1_next<=inData_B; 2: reg2_next<=inData_B; 3: reg3_next<=inData_B; endcase end Simulación Banco de Registros Dual