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, in te stellen mbv de generic G_WIDTH
  • het aantal registers wordt bepaald door de generic G_REGCOUNT_LOG2 en er zijn 2G_REGCOUNT_LOG2 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

In VHDL kan een machtsverheffing gedaan worden (voor indices en metadata) door de operator ** te gebruiken. Bv 2**3 wordt vertaald naar 8

  • 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.

Het volledige ontwerp.

De tweede leespoort, is een kopie (inclusief multiplexer) van de eerste leespoort.

De tweede leespoort weglaten is een gemakkelijke tussenstap.

De 2G_REGCOUNT_LOG2 registers zijn allemaal gelijkaardig aan met enkel een verschil in het we signaal.