Arquitectura MicroMIPS en VHDL: Guia Pràctica de Components, Señals i Processos
Pràctica VHDL del MicroMIPS
1) Llibreria
2) ENTITY MicroMIPS IS PORT (DATOS ENUNCIADO: señales sin vector, poner reset y clock); END MicroMIPS; (poner el END COMPONENT después)
3) ARCHITECTURE PRACTICA OF MicroMIPS IS
3.1) Component ALUMIPS
PORT (op1, op2, ALUControl de entrada, Z sin vector)
3.2) Component REGMIPS
PORT (añadir clk, reset y we3, todas IN sin vector)
3.3) Component UNIDADCONTROL
PORT (solo poner vector donde haya números)
3.4) Señales (sin IN ni OUT)
BEGIN
4) Valor de OPCODE y FUNCT (con lo que sale de Memoria Instr)
OPCODE <= MEMPROGDATA(31 DOWNTO 26);
FUNCT <= MEMPROGDATA(5 DOWNTO 0);
4.1) Operación AND entre Z y BRANCH
4.2) Ciclos de reloj: PCAUX <= SALIDAPC + 4;
4.3) Operación BTA (desplazada 2 a la izquierda)
DespBTA <= ExtSign(29 DOWNTO 0) & "00";
BTA <= DespBTA + PCAux;
4.4) Dato que entra en la memoria de datos desde el banco de registros
MemDataDataWrite <= RD2;
5) Multiplexores
PROCESS (cables que intervienen para el 0-1, nombre multiplexor SIN MUX)
BEGIN
CASE MULTI_SIN_MUX IS
WHEN '0' => MUXMULTI <= CABLE_QUE_DA_EL_0;
END CASE;
END PROCESS;
6) Entrada a PC con el multiplexor correspondiente
ENTRADAPC <= MUX____;
6.1) Proceso PC
PROCESS (NRst, Clk) -- lleva rst porque es asíncrono
BEGIN
if NRst = '0' then -- Reset activo bajo (enunciado)
salidaPC <= (OTHERS => '0');
elsif rising_edge(Clk) then
salidaPC <= entradaPC;
end if;
END PROCESS;
6.2) Entrada a la memoria de instrucciones
MemProgAddr <= salidaPC;
6.3) Extensión de cero
extcero <= "0000000000000000" & MemProgData(15 DOWNTO 0);
6.4) Extensión de signo (con el 15:0)
ExtSign <= MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15) & MemProgData(15 DOWNTO 0);
7) Seguir con los multiplexores
7.1) Señal que habilita escribir en memoria (vienen encima de la memoria de datos)
MemDataWE <= MemWRITE;
7.2) Entrada en memoria
MemDataAddr <= ResOut;
8) Port maps (parecido a los components)
Regs: RegMIPS PORT MAP ( );
Componente del RegMIPS => a lo que se corresponden en el dibujo (we3 es el palito de arriba).
ALU: ALUMIPS PORT MAP ( );
res => resOut;
UC: UnidadControl PORT MAP ( );
opcode => OPCODE
extcero => multiplexor del ext cero, algo como ExtCero2