Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
-------------------------------------------------------------------------------
-- Project ELE8304 : Circuits intégrés à très grande échelle
-------------------------------------------------------------------------------
-- File riscv_pc_tb.vhd
-- Authors Titouan Luard <luardtitouan@gmail.com>
-- Yann Roberge <yann.roberge@polymtl.ca>
-- Lab GRM - Polytechnique Montreal
-- Date 2021-11-19
-------------------------------------------------------------------------------
-- Brief Full adder, supports sign-extension, addition-subtraction,
-- signed and unsigned.
-------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.math_real.all;
library work;
use work.riscv_pkg.all;
entity riscv_pc_tb is
end riscv_pc_tb;
architecture tb of riscv_pc_tb is
constant XLEN : positive := 32;
signal target : std_logic_vector(XLEN-1 downto 0);
signal clk : std_logic;
signal stall : std_logic;
signal transfert : std_logic;
signal rstn : std_logic;
signal pc : std_logic_vector(XLEN-1 downto 0);
signal expected_result : std_logic_vector(XLEN-1 downto 0);
constant PERIOD : time := 10 ns;
begin
-- DUT
dut: entity work.riscv_pc
generic map (
RESET_VECTOR => (others => '0')
)
port map (
i_target => target,
i_clk => clk,
i_stall => stall,
i_transfert => transfert,
i_rstn => rstn,
o_pc => pc
);
drive_clk : process
begin
clk <= '0';
wait for PERIOD/2;
clk <= '1';
wait for PERIOD/2;
end process drive_clk;
-- Main TB process
p_main : process
begin
-- Vecteurs de tests
report "BEGIN SIMULATION";
report "initialisation";
rstn <= '0' ;
expected_result<=(others => '0');
wait for PERIOD;
report "init error" severity error;
wait for PERIOD;
report "pasage dans l'adder";
rstn <= '1';
wait for PERIOD;
transfert<= '0';
expected_result<=(2 downto 0 => "100",others => '0');
report "adder error" severity error;
wait for PERIOD;
report "target";
transfert <= '1';
target <= (0 downto 0 =>'1', others => '0' );
expected_result<=(0 downto 0 =>'1', others => '0');
report "target error" severity error;
wait for PERIOD;
report "reset";
assert pc = expected_result
report "reset error" severity error;
wait for PERIOD;
report "SIMULATION DONE";
wait;
end process p_main;
end architecture tb;