Opdracht 4: Register file

Na het maken van de ALU in de vorige opdracht, moet er voor opdracht 4 een Register file gemaakt worden.

Een register file is een onderdeel van een processor dat eigenlijk niet veel meer bevat dan een set registers. De specificaties van de register file voor deze opdracht zijn als volgt:

  • de data-breedte is 32 bits
  • er zijn 8 registers in de register file
  • de reg file beschikt over 2 lees-poorten
    • src1 & data1
    • src2 & data2
  • de reg file beschikt over 1 schrijf-poort
    • dest, data & we

Blokschema van de register file

Waveform van de register file

  • Voor de lees-poorten wordt de src_x input gebruikt om de inhoud van het overeenkomende registeraan de data_x uitgang te zetten. Beide leespoorten werken onafhankelijk van elkaar.
  • Voor de schrijf-poort wordt de inhoud op de data input gekopieerd naar het register dat aangeduid wordt met ingang dest op voorwaarde dat de write enable hoog is.

Entity van de register file

entity regfile is
    generic (
        G_WIDTH : natural := 32; -- Breedte van de registers
        G_REGCOUNT_LOG2 : natural := 3 -- log2(# registers)
    );
    port(
        clock : in STD_LOGIC;
        reset : in STD_LOGIC;
        we : in std_logic;
        src1 : in std_logic_vector(G_REGCOUNT_LOG2-1 downto 0);
        src2 : in std_logic_vector(G_REGCOUNT_LOG2-1 downto 0);
        dest : in std_logic_vector(G_REGCOUNT_LOG2-1 downto 0);
        data : in std_logic_vector(G_WIDTH-1 downto 0);
        data1 : out std_logic_vector(G_WIDTH-1 downto 0);
        data2 : out std_logic_vector(G_WIDTH-1 downto 0)
    );
end entity regfile;

Don’t Panic!

Het zou kunnen dat het bovenstaande schema er nogal “druk en overweldigend” uitziet … en dat is perfect ok. Dit is ook nog maar de 4 opdracht die er gemaakt moet worden. Als een probleem te groot lijkt, helpt het vaak om het op te delen in kleindere problemen die gemakkelijker te overwinnen zijn.

Blokschema van de register file

De tweede leespoort, is gewoon een kopie van de eerste leespoort.

De tweede leespoort weglaten is een gemakkelijke tussenstap.

De n-1 registers zijn allemaal gelijkaardig aan het ne register.