Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Namn: adressvaljare
  3. -- Filnamn: adressvaljare.vhd
  4. -- Testbench: adressvaljare_tb.vhd
  5. --
  6. -- Insignaler:
  7. -- clk - klocksignal, all uppdatering av register sker vid stigande flank
  8. -- n_rst - synkron resetsignal, aktiv låg
  9. -- DATA - de 6 minst signifikanta bitarna från instruktionen, används då
  10. -- nästa adress anges av instruktionen
  11. -- AddrSrc - bestämmer varifrån nästa adress ska hämtas
  12. -- StackOp - styr stacken i adressväljaren
  13. --
  14. -- Utsignaler:
  15. -- A - nästa adress
  16. -- pc_debug - nuvarande adress, används för att visa adressen på
  17. -- Nexys4 display
  18. ----------------------------------------------------------------------------------
  19.  
  20. library ieee;
  21. use ieee.std_logic_1164.all;
  22. use ieee.numeric_std.all;
  23.  
  24. library work;
  25. use work.all;
  26. use work.cpu_pkg.all;
  27.  
  28. entity adressvaljare is
  29. port(
  30. clk, n_rst : in std_logic;
  31. DATA : in std_logic_vector(5 downto 0);
  32. A : out std_logic_vector(5 downto 0);
  33. AddrSrc : in std_logic_vector(1 downto 0);
  34. StackOp : in std_logic_vector(1 downto 0);
  35. pc_debug : out std_logic_vector(5 downto 0)
  36. );
  37. end entity;
  38.  
  39. architecture structural of adressvaljare is
  40.  
  41. signal PC, PC_PLUS, ToS_data, OUTPUT, AddrSrc_i : std_logic_vector(5 downto 0);
  42. signal ALU8bit, PC_PLUS_8 : std_logic_vector(7 downto 0);
  43. begin
  44.  
  45.  
  46. decode:process(clk)
  47. begin
  48. if AddrSrc = ADDR_PC_PLUS_ONE then
  49. AddrSrc_i <= "00";
  50. end if;
  51. if AddrSrc = ADDR_TOS then
  52. AddrSrc_i <= "01";
  53. end if;
  54. if AddrSrc = ADDR_DATA then
  55. AddrSrc_i <= "10";
  56. end if;
  57. end process;
  58.  
  59. stackReg: entity stack port map(
  60. D => PC_PLUS,
  61. ToS => ToS_data,
  62. clk => clk,
  63. n_rst => n_rst,
  64. StackOp => StackOp
  65. );
  66.  
  67. multiplex: entity MUX3x6 port map(
  68. IN0 => PC_PLUS,
  69. IN1 => ToS_data,
  70. IN2 => DATA,
  71. SEL => AddrSrc,
  72. O => OUTPUT
  73. );
  74.  
  75. ALU8bit <= "00" & PC;
  76. PC_PLUS <= PC_PLUS_8(5 downto 0);
  77. ALU: entity ALU8 port map(
  78. A => ALU8bit,
  79. B => "00000001",
  80. S => "010",
  81. Z => open,
  82. F => PC_PLUS_8
  83. );
  84.  
  85. PCreg: entity REG6 port map(
  86. CLK => clk,
  87. CLR => n_rst,
  88. ENA => '1',
  89. D => OUTPUT,
  90. Q => PC
  91. );
  92.  
  93. pc_debug <= pc;
  94. A <= OUTPUT;
  95.  
  96. end architecture;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement