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;
 | |
| 
 |