mirror of
				https://github.com/Klagarge/Cursor.git
				synced 2025-10-30 21:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
| ARCHITECTURE test OF lcdDemo_tester IS
 | |
| 
 | |
|   constant clockPeriod: time := (1.0/clockFrequency) * 1 sec;
 | |
|   signal clock_int: std_ulogic := '1';
 | |
| 
 | |
|   constant testInterval:time := 0.1 ms;
 | |
|   constant initSequenceLength:time := 20 us;
 | |
|   constant helloSequenceLength:time := 1 ms;
 | |
| 
 | |
|   constant rs232Frequency: real := real(baudRate);
 | |
|   constant rs232Period: time := (1.0/rs232Frequency) * 1 sec;
 | |
|   constant rs232WriteInterval: time := 10*rs232Period;
 | |
|   
 | |
|   signal rs232OutString : string(1 to 32);
 | |
|   signal rs232SendOutString: std_uLogic;
 | |
|   signal rs232SendOutDone: std_uLogic;
 | |
|   signal rs232OutByte: character;
 | |
|   signal rs232SendOutByte: std_uLogic;
 | |
|   
 | |
| BEGIN
 | |
|   ------------------------------------------------------------------------------
 | |
|                                                               -- reset and clock
 | |
|   reset <= '1', '0' after 2*clockPeriod;
 | |
| 
 | |
|   clock_int <= not clock_int after clockPeriod/2;
 | |
|   clock <= transport clock_int after clockPeriod*9/10;
 | |
| 
 | |
|   ------------------------------------------------------------------------------
 | |
|                                                                 -- test sequence
 | |
|   process
 | |
|   begin
 | |
|     rs232SendOutString <= '0';
 | |
|     buttons <= (others => '0');
 | |
|     wait for initSequenceLength + helloSequenceLength;
 | |
|                                                   -- send bytes from serial port
 | |
|     rs232OutString <= "a                               ";
 | |
|     rs232SendOutString <= '1', '0' after 1 ns;
 | |
|     wait until rs232SendOutDone = '1';
 | |
|     wait for rs232WriteInterval;
 | |
| 
 | |
|     rs232OutString <= "hello world                     ";
 | |
|     rs232SendOutString <= '1', '0' after 1 ns;
 | |
|     wait until rs232SendOutDone = '1';
 | |
|     wait for rs232WriteInterval;
 | |
|     wait for testInterval;
 | |
|                                                            -- send hello message
 | |
|     wait until rising_edge(clock_int);
 | |
|     for index in buttons'range loop
 | |
|       buttons(index) <= '1';
 | |
|       wait until rising_edge(clock_int);
 | |
|       buttons(index) <= '0';
 | |
|       wait until rising_edge(clock_int);
 | |
|     end loop;
 | |
|     wait for helloSequenceLength;
 | |
|     wait for testInterval;
 | |
|                                                             -- end of simulation
 | |
|     assert false
 | |
|       report "End of simulation"
 | |
|       severity failure;
 | |
|     wait;
 | |
|   end process;
 | |
| 
 | |
| --============================================================================
 | |
|                                                                  -- RS232 send
 | |
|   rsSendSerialString: process
 | |
|     constant rs232BytePeriod : time := 15*rs232Period;
 | |
|     variable commandRight: natural;
 | |
|   begin
 | |
|     rs232SendOutByte <= '0';
 | |
|     rs232SendOutDone <= '0';
 | |
| 
 | |
|     wait until rising_edge(rs232SendOutString);
 | |
| 
 | |
|     commandRight := rs232OutString'right;
 | |
|     while rs232OutString(commandRight) = ' ' loop
 | |
|       commandRight := commandRight-1;
 | |
|     end loop;
 | |
| 
 | |
|     for index in rs232OutString'left to commandRight loop
 | |
|       rs232OutByte <= rs232OutString(index);
 | |
|       rs232SendOutByte <= '1', '0' after 1 ns;
 | |
|       wait for rs232BytePeriod;
 | |
|     end loop;
 | |
| 
 | |
|     rs232OutByte <= cr;
 | |
|     rs232SendOutByte <= '1', '0' after 1 ns;
 | |
|     wait for rs232BytePeriod;
 | |
| 
 | |
|     rs232SendOutDone <= '1';
 | |
|     wait for 1 ns;
 | |
|   end process rsSendSerialString;
 | |
|                                                                   -- send byte
 | |
|   rsSendSerialByte: process
 | |
|     variable txData: unsigned(7 downto 0);
 | |
|   begin
 | |
|     RxD <= '1';
 | |
| 
 | |
|     wait until rising_edge(rs232SendOutByte);
 | |
|     txData := to_unsigned(character'pos(rs232OutByte), txData'length);
 | |
| 
 | |
|     RxD <= '0';
 | |
|     wait for rs232Period;
 | |
| 
 | |
|     for index in txData'reverse_range loop
 | |
|       RxD <= txData(index);
 | |
|       wait for rs232Period;
 | |
|     end loop;
 | |
| 
 | |
|   end process rsSendSerialByte;
 | |
| 
 | |
| END ARCHITECTURE test;
 |