Les registres A,B, et IR

Dans cet article  nous allons mettre  en  place  l'architecture  générale  (une template)  des registres A,B  et IR . Le registre IR est comme son nom l'indique  le registre  qui  stocke le code de l'instruction  à exécuter. En revanche les  registres A et  B  servent  au  stockage  de variables. Tous ces  registres  ont  une  taille d'un byte, c'est  à dire 8 bits, ce qui  nous donne droit de  dire  que le  Macroprecesseur  est  un 8-bit.

Fonctionnement générique des registres

L'idée  de base derrière ces  registres  est de  pouvoir écrire ou lire  le byte  de donnée  en un seul  coup d'horloge; il s'agit donc registre  8 vers  8 parallèles. Ce  registre  doit assurer  une isolation  totale des circuits dans  le cas  de non fonctionnement, ce qui va nous  imposer  l'ajout d'un  bit de  sélection CS (Chip Select).

Si $CS=0$ alors les entrées  sont ramenées  à la valeur  logique  à haute  impédance Z , c'est équivalent  à dire que  le registre est déconnecté. Si  $CS=1$ alors  notre  registre  fonctionne  normalement, un fonctionnement  qui régit  par  deux  autres bits de contrôle qui sont  SET et  CLR fonctionnant selon le tableau de vérité suivant:

CS SET CLR Q(k)
0 X X Z
1 0 0 D(k)
1 0 1 0
1 1 1 U
1 1 0 1

schéma électrique

PCB

Le code VHDL sous XilinX

----------------------------------------------------------------------------------
-- Company: J2Geek
-- Engineer: Jihed Jebari
-- 
-- Create Date:    23:14:52 11/21/2020 
-- Design Name: 
-- Module Name:    Reg8To8 - Behavioral 
-- Project Name: 
-- Target Devices: 
-- Tool versions: 
-- Description: 
--
-- Dependencies: 
--
-- Revision: 
-- Revision 0.01 - File Created
-- Additional Comments: 
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity Reg8To8 is
    Port ( CLK : in  STD_LOGIC;
           CS : in  STD_LOGIC;
           CLR : in  STD_LOGIC;
           SET : in  STD_LOGIC;
           D : in  STD_LOGIC_VECTOR (7 downto 0);
           Q : out  STD_LOGIC_VECTOR (7 downto 0));
end Reg8To8;

architecture Behavioral of Reg8To8 is
begin
process(CS,CLK,CLR,SET)
begin 
if CS<='0' then 
	Q<=(Others =>'Z');
elsif CS<='1' then
	if SET<='0' and CLR<='0' then
		if CLK'event and CLK='1' then
			Q<=D; 
		end if;
	elsif SET<='1' and CLR<='0' then
		Q<=(Others=>'1');
	elsif SET<='0' and CLR<='1' then
		Q<=(Others=>'0');
	elsif SET<='1' and CLR<='1' then
		Q<=(Others=>'U');
	end if;
end if;
end process;
end Behavioral;

Chronogramme de sortie