mirror of
https://github.com/Klagarge/Cursor.git
synced 2024-11-23 18:03:27 +00:00
103 lines
3.0 KiB
VHDL
103 lines
3.0 KiB
VHDL
|
LIBRARY BoardTester_test;
|
||
|
USE BoardTester_test.testUtils.all;
|
||
|
|
||
|
ARCHITECTURE test OF flash_tester IS
|
||
|
|
||
|
constant T_W2: time := 0 ns;
|
||
|
constant T_W3: time := 70 ns;
|
||
|
constant T_W4: time := 50 ns;
|
||
|
constant T_W5: time := 55 ns;
|
||
|
constant T_W6: time := 10 ns;
|
||
|
constant T_R3: time := 120 ns;
|
||
|
|
||
|
signal addr: natural;
|
||
|
signal data: integer;
|
||
|
|
||
|
signal writeFlash: std_ulogic := '0';
|
||
|
signal readFlash: std_ulogic := '0';
|
||
|
|
||
|
constant separator : string(1 to 80) := (others => '-');
|
||
|
constant indent : string(1 to 2) := (others => ' ');
|
||
|
|
||
|
BEGIN
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
-- Test
|
||
|
------------------------------------------------------------------------------
|
||
|
process
|
||
|
begin
|
||
|
RP_n <= '1';
|
||
|
wait for 1 us;
|
||
|
print(cr & separator);
|
||
|
-- erase block 0
|
||
|
print(sprintf("%tu", now) & ": Erasing block 0");
|
||
|
addr <= 16#10000#;
|
||
|
data <= 16#20#;
|
||
|
writeFlash <= '1', '0' after 1 ns;
|
||
|
wait for 100 ns;
|
||
|
data <= 16#D0#;
|
||
|
writeFlash <= '1', '0' after 1 ns;
|
||
|
wait for 2 us;
|
||
|
-- program word
|
||
|
print(sprintf("%tu", now) & ": Writing data into Flash");
|
||
|
addr <= 16#0000#;
|
||
|
data <= 16#0040#;
|
||
|
writeFlash <= '1', '0' after 1 ns;
|
||
|
wait for 100 ns;
|
||
|
addr <= 16#0010#;
|
||
|
data <= 16#CAFE#;
|
||
|
writeFlash <= '1', '0' after 1 ns;
|
||
|
wait for 2 us;
|
||
|
-- read word
|
||
|
print(sprintf("%tu", now) & ": Reading data from Flash");
|
||
|
addr <= 16#0000#;
|
||
|
readFlash <= '1', '0' after 1 ns;
|
||
|
wait for 500 ns;
|
||
|
-- read word
|
||
|
print(sprintf("%tu", now) & ": Reading data from Flash");
|
||
|
addr <= 16#0010#;
|
||
|
readFlash <= '1', '0' after 1 ns;
|
||
|
wait for 500 ns;
|
||
|
|
||
|
wait;
|
||
|
end process;
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
-- Board connections
|
||
|
------------------------------------------------------------------------------
|
||
|
CE(2 downto 1) <= (others => '0');
|
||
|
BYTE_n <= '1';
|
||
|
|
||
|
|
||
|
------------------------------------------------------------------------------
|
||
|
-- Write access
|
||
|
------------------------------------------------------------------------------
|
||
|
process
|
||
|
begin
|
||
|
CE(0) <= '1';
|
||
|
WE_N <= '1';
|
||
|
OE_N <= '1';
|
||
|
DQ <= (others => 'Z');
|
||
|
wait on writeFlash, readFlash;
|
||
|
if rising_edge(writeFlash) then
|
||
|
A <= to_unsigned(addr, A'length) after T_W3 - T_W5;
|
||
|
DQ <= std_logic_vector(to_unsigned(data, DQ'length)) after T_W3 - T_W4;
|
||
|
CE(0) <= '0';
|
||
|
wait for T_W2;
|
||
|
WE_N <= '0';
|
||
|
wait for T_W3;
|
||
|
WE_N <= '1';
|
||
|
wait for T_W6;
|
||
|
-- CE(0) <= '1';
|
||
|
elsif rising_edge(readFlash) then
|
||
|
OE_N <= '0';
|
||
|
A <= to_unsigned(addr, A'length);
|
||
|
CE(0) <= '0';
|
||
|
wait for T_R3 + 10 ns;
|
||
|
-- CE(0) <= '1';
|
||
|
end if;
|
||
|
end process;
|
||
|
|
||
|
END ARCHITECTURE test;
|
||
|
|