Line 42... |
Line 42... |
prev_uP : in STD_LOGIC_VECTOR (7 downto 0);
|
prev_uP : in STD_LOGIC_VECTOR (7 downto 0);
|
next_uP : out STD_LOGIC_VECTOR (7 downto 0));
|
next_uP : out STD_LOGIC_VECTOR (7 downto 0));
|
end mini_uP_x16;
|
end mini_uP_x16;
|
|
|
architecture Behavioral of mini_uP_x16 is
|
architecture Behavioral of mini_uP_x16 is
|
|
-- Data bus
|
signal dataBus1, dataBus2: std_logic_vector(15 downto 0); -- For ALU data1 and data2
|
signal dataBus1, dataBus2: std_logic_vector(15 downto 0); -- For ALU data1 and data2
|
signal accumulator: std_logic_vector(15 downto 0);
|
|
signal mainDataBus: std_logic_vector(15 downto 0);
|
signal mainDataBus: std_logic_vector(15 downto 0);
|
|
|
|
-- ALU signals (driven by both the ALU and the identifier)
|
|
signal accumulator: std_logic_vector(15 downto 0);
|
|
signal ALUoverflow: std_logic;
|
signal opCode: ALU_OPCODE;
|
signal opCode: ALU_OPCODE;
|
|
|
|
-- Control signals (driven by the controler)
|
signal register_control: std_logic_vector(7 downto 0); -- re1 we1 re2 we2 re3 we3 re4 we4
|
signal register_control: std_logic_vector(7 downto 0); -- re1 we1 re2 we2 re3 we3 re4 we4
|
signal stack_control : std_logic_vector(1 downto 0); -- en push/pop
|
signal stack_control : std_logic_vector(1 downto 0); -- en push/pop
|
signal PC_control : std_logic;
|
signal PC_control : std_logic;
|
signal inc_PC: std_logic;
|
signal inc_PC: std_logic;
|
|
|
|
-- Id signal (driven by the identifier)
|
signal uP_id: std_logic_vector(7 downto 0);
|
signal uP_id: std_logic_vector(7 downto 0);
|
|
|
|
-- Watchdog (driven by both the watchdog and the controler)
|
signal watchdog_left: std_logic_vector(15 downto 0);
|
signal watchdog_left: std_logic_vector(15 downto 0);
|
signal watchdog_rst_value: std_logic_vector(15 downto 0);
|
signal watchdog_rst_value: std_logic_vector(15 downto 0);
|
signal watchdog_rst: std_logic;
|
signal watchdog_rst: std_logic;
|
signal watchdog_control : std_logic_vector(1 downto 0);
|
signal watchdog_control : std_logic_vector(1 downto 0);
|
|
|
Line 127... |
Line 133... |
dataA : out STD_LOGIC_VECTOR (15 downto 0);
|
dataA : out STD_LOGIC_VECTOR (15 downto 0);
|
op : in ALU_OPCODE;
|
op : in ALU_OPCODE;
|
overflow: out STD_LOGIC );
|
overflow: out STD_LOGIC );
|
end component;
|
end component;
|
begin
|
begin
|
|
-- The program counter
|
program_counter: binary_counter_x16
|
program_counter: binary_counter_x16
|
port map( clk => clk,
|
port map( clk => clk,
|
set => PC_control,
|
set => PC_control,
|
inc => inc_PC,
|
inc => inc_PC,
|
set_value => mainDataBus,
|
set_value => mainDataBus,
|
count => PC);
|
count => PC);
|
|
|
|
-- The watchdog and its access to the main databus
|
watchdog_re: bus_access_x16
|
watchdog_re: bus_access_x16
|
port map ( clk => clk,
|
port map ( clk => clk,
|
en => watchdog_control(1),
|
en => watchdog_control(1),
|
dataRead => mainDataBus,
|
dataRead => mainDataBus,
|
dataWrite => watchdog_rst_value);
|
dataWrite => watchdog_rst_value);
|
Line 155... |
Line 163... |
myId => uP_id,
|
myId => uP_id,
|
|
|
watchdog_left => watchdog_left,
|
watchdog_left => watchdog_left,
|
watchdog_rst_value => watchdog_rst_value,
|
watchdog_rst_value => watchdog_rst_value,
|
watchdog_rst => watchdog_rst);
|
watchdog_rst => watchdog_rst);
|
|
|
|
-- The stack
|
stack: stack_x16
|
stack: stack_x16
|
generic map( STACK_SIZE => 8)
|
generic map( STACK_SIZE => 8)
|
port map( clk => clk,
|
port map( clk => clk,
|
reset => reset,
|
reset => reset,
|
dataPort => mainDataBus,
|
dataPort => mainDataBus,
|
push => stack_control(1),
|
push => stack_control(1),
|
pop => stack_control(0));
|
pop => stack_control(0));
|
|
|
-- The 4 Registers
|
-- The 4 Registers
|
R1: bus_register_x16
|
R1: bus_register_x16
|
port ( clk=>clk ,
|
port map ( clk=>clk ,
|
re=>register_control(0),
|
re=>register_control(0),
|
we=>register_control(1),
|
we=>register_control(1),
|
reset=>reset,
|
reset=>reset,
|
dataport=> mainDataBus);
|
dataport=> mainDataBus);
|
|
|
R2: bus_register_x16
|
R2: bus_register_x16
|
port ( clk=>clk ,
|
port map ( clk=>clk ,
|
re=>register_control(2),
|
re=>register_control(2),
|
we=>register_control(3),
|
we=>register_control(3),
|
reset=>reset,
|
reset=>reset,
|
dataport=> mainDataBus);
|
dataport=> mainDataBus);
|
|
|
R3: bus_register_x16
|
R3: bus_register_x16
|
port ( clk=>clk ,
|
port map ( clk=>clk ,
|
re=>register_control(4),
|
re=>register_control(4),
|
we=>register_control(5),
|
we=>register_control(5),
|
reset=>reset,
|
reset=>reset,
|
dataport=> mainDataBus);
|
dataport=> mainDataBus);
|
|
|
R4: bus_register_x16
|
R4: bus_register_x16
|
port ( clk=>clk ,
|
port map ( clk=>clk ,
|
re=>register_control(6),
|
re=>register_control(6),
|
we=>register_control(7),
|
we=>register_control(7),
|
reset=>reset,
|
reset=>reset,
|
dataport=> mainDataBus);
|
dataport=> mainDataBus);
|
|
|
-- The ALU
|
-- The ALU
|
alu : ALU
|
the_alu : ALU
|
port( data1 => dataBus1;
|
port map( data1 => dataBus1,
|
data2 => dataBus2;
|
data2 => dataBus2,
|
dataA => accumulator;
|
dataA => accumulator,
|
op => op;
|
op => opCode,
|
overflow => overflow);
|
overflow => ALUoverflow);
|
|
|
end Behavioral;
|
end Behavioral;
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|