/* LABORATÓRIO DE ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES II PARTE 3 - PROJETO 1 ERICK HENRIQUE DUTRA DE SOUZA MARINA BERNARDES DINIZ */ module cacheL1(clock, tag, data, wren); //RAM reg clock_RAM, wren_RAM; reg [4:0] address_RAM; reg [7:0] data_RAM; wire [7:0] saida_RAM; //entradas input clock,wren; input [7:0] data; input [4:0] tag; //MemoriaCache reg [7:0] cache [0:3][0:1]; //cache[tag][valor] reg [0:3] valido; reg [0:3] dirty; reg [1:0] LRU [0:3]; reg [7:0] saidaCache; reg [7:0] cacheTAG; reg [7:0] cacheVALOR; // inicializando a cache initial begin cache[0][0] = 0; cache[0][1] = 5; cache[1][0] = 2; cache[1][1] = 1; cache[2][0] = 5; cache[2][1] = 5; cache[3][0] = 1; cache[3][1] = 3; valido[0] = 1; valido[1] = 1; valido[2] = 0; valido[3] = 1; dirty[0] = 0; dirty[1] = 0; dirty[2] = 0; dirty[3] = 0; LRU[0] = 0; LRU[1] = 1; LRU[2] = 3; LRU[3] = 2; end integer contador, tam_cache, HitMiss, posicao, antigoMaior, WriteBack, paraemnomedeJesus, lru_Entrou, j; always@(posedge clock) begin tam_cache = 4; paraemnomedeJesus = 0; WriteBack = 0; //verificando Miss ou Hit for(contador = 0; contador < tam_cache; contador = contador + 1) begin if(paraemnomedeJesus != 5) begin if(tag == cache[contador][0] && valido[contador] == 1) //deu hit begin HitMiss = 1; posicao = contador; paraemnomedeJesus = 5; end else if(tag == cache[contador][0] && valido[contador] == 0) //deu miss begin HitMiss = 0; posicao = contador; paraemnomedeJesus = 5; end else begin HitMiss = 0; //deu miss de novo end end end //LRU search antigoMaior = 0; for(contador = 0; contador < tam_cache; contador = contador+1) begin if(LRU[contador] == tam_cache-1) begin antigoMaior = contador; end end //cresce LRU, cresce minha filha 3 0 1 2 //cresce LRU, cresce minha filha 0 //cresce LRU, cresce minha filha //cresce LRU, cresce minha filha 0 0 1 2 //cresce LRU, cresce minha filha 0 1 2 3 if(HitMiss == 1) begin lru_Entrou = LRU[posicao]; for(contador = 0; contador < tam_cache; contador = contador + 1) begin if(LRU[contador]