Banco de Registros

Anuncio
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
Documentos relacionados
Descargar