SC91-A, construction du bloc des registres
SC91-A, construction du bloc des registres

Etape 9 : Implémentation du banc de registres

Suite à cette description, il est maintenant utile de réaliser l'implémentation du banc des resgitres du SC91-A. Celle-ci est légèrement plus détaillée que la description synoptique vue précédemment et pour la résumée, voici la description de l'entitée écrite en VHDL.

      entity registers_bank is
         port (
            RST    : IN  std_ulogic;                         -- reset signal (Active High AH)
            CLK    : IN  std_ulogic;                         -- system clock

            -- Register selection
            RNN    : IN  std_ulogic_vector(4 downto 0);      -- first source operand
            RMM    : IN  std_ulogic_vector(4 downto 0);      -- second source operand
            RDD    : IN  std_ulogic_vector(4 downto 0);      -- destination operand
            LDD    : IN  std_ulogic;                         -- load RDD register with DDD value (AH)


            -- Data buses
            DNN    : OUT  std_ulogic_vector(31 downto 0);    -- first source operand data bus
            DMM    : OUT  std_ulogic_vector(31 downto 0);    -- second source operand data bus
            DDD    : IN   std_ulogic_vector(31 downto 0);    -- destination operand data bus

            -- Specific allways connected PC regsiter
            PC     : OUT  std_ulogic_vector(31 downto 0);    -- Program counter register output
            PCDIR  : IN   std_logic_vector(31 downto 0);     -- Program counter register direct input
            PC_R00 : IN   std_logic_vector(1 downto 0);      -- control PC output as R00 (00) Ddd (01) PCDIR (10)

            -- Specific flag signals
            C      : IN  std_ulogic;                         -- carry signal from ALU
            FL     : OUT std_ulogic_vector(15 downto 0);     -- computed flags for ALU and Instruction
            LFL    : IN  std_ulogic;                         -- update Flags with current result (AH)

            -- Specific Stack pointer signals
            SPP    : IN  std_ulogic;                         -- store in SP (R01) the current value + 4   (AH)
            SPM    : IN  std_ulogic;                         -- put on R01 output current value - 4       (AH)
                                                             -- store in SP (R01) the current value - 4

            -- not use
            NU     : IN std_ulogic                           -- not used, just that last line doesn't need ";"

         );
      end registers_bank;
      

Par rapport à ce qui était prévu, la synthèse de l'aiguillage des bus d'opérandes à l'aide de buffer tri-state ne sera pas possible sur la cible choisit, qui contrairement à d'autres Xilinx, n'intègre pas ce type d'élément dans ses CLB. C'est donc une synthèse de type Multiplexeur qui sera employée, plus lente et surtout beaucoup plus gourmande en ressource. Une fois implémenté, cet élément a une taille équivalente à 21.000 portes occupant environ 40% du composant et limitant la fréquence sur ce composant à environ 100Mhz.

Création d'une première instruction
Simple-Cpu The Simple CPU project The Simple CPU project
Un projet de disk91
Small CPU project