Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------------------------------
- -- Namn: adressvaljare
- -- Filnamn: adressvaljare.vhd
- -- Testbench: adressvaljare_tb.vhd
- --
- -- Insignaler:
- -- clk - klocksignal, all uppdatering av register sker vid stigande flank
- -- n_rst - synkron resetsignal, aktiv låg
- -- DATA - de 6 minst signifikanta bitarna från instruktionen, används då
- -- nästa adress anges av instruktionen
- -- AddrSrc - bestämmer varifrån nästa adress ska hämtas
- -- StackOp - styr stacken i adressväljaren
- --
- -- Utsignaler:
- -- A - nästa adress
- -- pc_debug - nuvarande adress, används för att visa adressen på
- -- Nexys4 display
- ----------------------------------------------------------------------------------
- library ieee;
- use ieee.std_logic_1164.all;
- use ieee.numeric_std.all;
- library work;
- use work.all;
- use work.cpu_pkg.all;
- entity adressvaljare is
- port(
- clk, n_rst : in std_logic;
- DATA : in std_logic_vector(5 downto 0);
- A : out std_logic_vector(5 downto 0);
- AddrSrc : in std_logic_vector(1 downto 0);
- StackOp : in std_logic_vector(1 downto 0);
- pc_debug : out std_logic_vector(5 downto 0)
- );
- end entity;
- architecture structural of adressvaljare is
- signal PC, PC_PLUS, ToS_data, OUTPUT, AddrSrc_i : std_logic_vector(5 downto 0);
- signal ALU8bit, PC_PLUS_8 : std_logic_vector(7 downto 0);
- begin
- decode:process(clk)
- begin
- if AddrSrc = ADDR_PC_PLUS_ONE then
- AddrSrc_i <= "00";
- end if;
- if AddrSrc = ADDR_TOS then
- AddrSrc_i <= "01";
- end if;
- if AddrSrc = ADDR_DATA then
- AddrSrc_i <= "10";
- end if;
- end process;
- stackReg: entity stack port map(
- D => PC_PLUS,
- ToS => ToS_data,
- clk => clk,
- n_rst => n_rst,
- StackOp => StackOp
- );
- multiplex: entity MUX3x6 port map(
- IN0 => PC_PLUS,
- IN1 => ToS_data,
- IN2 => DATA,
- SEL => AddrSrc,
- O => OUTPUT
- );
- ALU8bit <= "00" & PC;
- PC_PLUS <= PC_PLUS_8(5 downto 0);
- ALU: entity ALU8 port map(
- A => ALU8bit,
- B => "00000001",
- S => "010",
- Z => open,
- F => PC_PLUS_8
- );
- PCreg: entity REG6 port map(
- CLK => clk,
- CLR => n_rst,
- ENA => '1',
- D => OUTPUT,
- Q => PC
- );
- pc_debug <= pc;
- A <= OUTPUT;
- end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement