Guest User

Untitled

a guest
Jul 14th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.93 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4. package A_PKG is
  5.  
  6.     type tA is array (0 to 2**8-1) of std_logic_vector(32-1 downto 0);
  7.  
  8. end package A_PKG;
  9.  
  10. package body A_PKG is
  11.  
  12. end package body A_PKG;
  13.  
  14. library ieee;
  15. use ieee.std_logic_1164.all;
  16. use work.A_PKG.all;
  17.  
  18. entity E is
  19.     port (
  20.         iCLK : in  std_logic;
  21.         iCLR : in  std_logic;
  22.         iA   : in  tA;
  23.         oA   : out tA
  24.     );
  25. begin
  26. end entity E;
  27.  
  28. architecture RTL of E is
  29.  
  30.     constant cA : tA := (0 to 2**8-1 => (32-1 downto 0 => '0'));
  31.     signal   rA : tA := cA;
  32.  
  33. begin
  34.  
  35.     P_rA : process (iCLK)
  36.     begin
  37.         if (rising_edge(iCLK)) then
  38.             if (iCLR = '1') then
  39.                 rA <= cA;
  40.             else
  41.                 rA <= iA;
  42.             end if;
  43.         end if;
  44.     end process P_rA;
  45.  
  46.     oA <= rA;
  47.  
  48. end architecture RTL;
  49.  
  50. library ieee;
  51. use ieee.std_logic_1164.all;
  52. use work.A_PKG.all;
  53.  
  54. entity E2E is
  55.     port (
  56.         iCLK : in  std_logic;
  57.         iCLR : in  std_logic;
  58.         iA   : in  tA;
  59.         oA   : out tA
  60.     );
  61. begin
  62. end entity E2E;
  63.  
  64. architecture STRUCTURE of E2E is
  65.  
  66.     component E is
  67.         port (
  68.             iCLK : in  std_logic;
  69.             iCLR : in  std_logic;
  70.             iA   : in  tA;
  71.             oA   : out tA
  72.         );
  73.     end component E;
  74.     for all : E use entity work.E(RTL);
  75.  
  76.     signal sE1_oA : tA;
  77.  
  78. begin
  79.  
  80.     U_E1 : E
  81.     port map (
  82.         iCLK => iCLK,
  83.         iCLR => iCLR,
  84.         iA   => iA,
  85.         oA   => sE1_oA
  86.     );
  87.  
  88.     U_E2 : E
  89.     port map (
  90.         iCLK => iCLK,
  91.         iCLR => iCLR,
  92.         iA   => sE1_oA,
  93.         oA   => oA
  94.     );
  95.  
  96. end architecture STRUCTURE;
  97.  
  98. -- RTL_SYNTHESIS OFF
  99. library ieee;
  100. use ieee.std_logic_1164.all;
  101. use work.A_PKG.all;
  102.  
  103. entity BENCH_E2E is
  104. begin
  105. end entity BENCH_E2E;
  106.  
  107. architecture BENCH of BENCH_E2E is
  108.  
  109.     constant cCLK_PERIOD : time := 1.0 ns;
  110.     constant cCLR_TIME   : time := 3*cCLK_PERIOD;
  111.  
  112.     signal sCLK  : std_logic := '0';
  113.     signal sCLR  : std_logic := '1';
  114.     signal rDONE : std_logic := '0';
  115.  
  116.     component E2E is
  117.         port (
  118.             iCLK : in  std_logic;
  119.             iCLR : in  std_logic;
  120.             iA   : in  tA;
  121.             oA   : out tA
  122.         );
  123.     end component E2E;
  124.     for all : E2E use entity work.E2E(STRUCTURE);
  125.  
  126.     signal rE2E_iA : tA := (0 to 2**8-1 => (32-1 downto 0 => '0'));
  127.     signal sE2E_oA : tA;
  128.  
  129. begin
  130.  
  131.     P_sCLK : process
  132.     begin
  133.         W_sCLK : while (rDONE /= '1') loop
  134.             sCLK <= '0'; wait for cCLK_PERIOD/2;
  135.             sCLK <= '1'; wait for cCLK_PERIOD/2;
  136.         end loop W_sCLK;
  137.         wait;
  138.     end process P_sCLK;
  139.  
  140.     P_sCLR : process
  141.     begin
  142.         sCLR <= '1'; wait for cCLR_TIME;
  143.         sCLR <= '0'; wait;
  144.     end process P_sCLR;
  145.  
  146.     P_STIM : process
  147.     begin
  148.         wait until (sCLR /= '1');
  149.         wait until (rising_edge(sCLK));
  150.  
  151.         F_STIM_i : for i in 0 to 2**8-1 loop
  152.             F_STIM_j : for j in 32-1 downto 0 loop
  153.                 rE2E_iA(i)(j) <= '1';
  154.                 wait until (rising_edge(sCLK));
  155.             end loop F_STIM_j;
  156.         end loop F_STIM_i;
  157.  
  158.         wait for 2*cCLK_PERIOD; -- NOTE: I/O latency of E2E.
  159.         wait until (rising_edge(sCLK));
  160.  
  161.         rDONE <= '1';
  162.         wait;
  163.     end process P_STIM;
  164.  
  165.     U_E2E : E2E
  166.     port map (
  167.         iCLK => sCLK,
  168.         iCLR => sCLR,
  169.         iA   => rE2E_iA,
  170.         oA   => sE2E_oA
  171.     );
  172.  
  173. end architecture BENCH;
  174. -- RTL_SYNTHESIS ON
Add Comment
Please, Sign In to add comment