mirror of
https://github.com/Klagarge/Cursor.git
synced 2024-11-26 19:23:27 +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;
|