84 lines
2.4 KiB
VHDL
84 lines
2.4 KiB
VHDL
|
ARCHITECTURE test OF bram_tester IS
|
||
|
|
||
|
constant clockFrequencyA: real := 66.0E6;
|
||
|
constant clockFrequencyB: real := 20.0E6;
|
||
|
constant clockPeriodA: time := (1.0/clockFrequencyA) * 1 sec;
|
||
|
constant clockPeriodB: time := (1.0/clockFrequencyB) * 1 sec;
|
||
|
signal clockA_int: std_uLogic := '1';
|
||
|
signal clockB_int: std_uLogic := '1';
|
||
|
|
||
|
signal addressA_int: natural;
|
||
|
signal dataA_int: integer;
|
||
|
|
||
|
signal addressB_int: natural;
|
||
|
signal dataB_int: integer;
|
||
|
|
||
|
BEGIN
|
||
|
------------------------------------------------------------------------------
|
||
|
-- clocks
|
||
|
clockA_int <= not clockA_int after clockPeriodA/2;
|
||
|
clockA <= transport clockA_int after clockPeriodA*9/10;
|
||
|
|
||
|
clockB_int <= not clockB_int after clockPeriodB/2;
|
||
|
clockB <= transport clockB_int after clockPeriodB*9/10;
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
-- test sequence
|
||
|
portA: process
|
||
|
begin
|
||
|
enA <= '0';
|
||
|
writeEnA <= '0';
|
||
|
addressA_int <= 0;
|
||
|
dataA_int <= 0;
|
||
|
-- read initial BRAM data
|
||
|
wait for 5*clockPeriodA;
|
||
|
addressA_int <= 40;
|
||
|
enA <= '1';
|
||
|
wait for clockPeriodA;
|
||
|
enA <= '0';
|
||
|
-- write data on port A
|
||
|
wait for 10*clockPeriodA;
|
||
|
addressA_int <= 10;
|
||
|
dataA_int <= 5;
|
||
|
enA <= '1';
|
||
|
writeEnA <= '1';
|
||
|
wait for clockPeriodA;
|
||
|
enA <= '0';
|
||
|
writeEnA <= '0';
|
||
|
|
||
|
wait;
|
||
|
end process portA;
|
||
|
|
||
|
addressA <= std_ulogic_vector(to_unsigned(addressA_int, addressA'length));
|
||
|
dataInA <= std_ulogic_vector(to_signed(dataA_int, dataInA'length));
|
||
|
|
||
|
portB: process
|
||
|
begin
|
||
|
enB <= '0';
|
||
|
writeEnB <= '0';
|
||
|
addressB_int <= 0;
|
||
|
dataB_int <= 0;
|
||
|
-- write data on port B
|
||
|
wait for 10*clockPeriodB;
|
||
|
addressB_int <= 20;
|
||
|
dataB_int <= 10;
|
||
|
enB <= '1';
|
||
|
writeEnB <= '1';
|
||
|
wait for clockPeriodB;
|
||
|
enB <= '0';
|
||
|
writeEnB <= '0';
|
||
|
-- read data written on port A
|
||
|
wait for 2*clockPeriodB;
|
||
|
addressB_int <= 10;
|
||
|
enB <= '1';
|
||
|
wait for clockPeriodB;
|
||
|
enB <= '0';
|
||
|
|
||
|
wait;
|
||
|
end process portB;
|
||
|
|
||
|
addressB <= std_ulogic_vector(to_unsigned(addressB_int, addressB'length));
|
||
|
dataInB <= std_ulogic_vector(to_signed(dataB_int, dataInB'length));
|
||
|
|
||
|
END ARCHITECTURE test;
|