1
0
mirror of https://github.com/Klagarge/Cursor.git synced 2024-11-26 19:23:27 +00:00
Cursor/Libs/Lcd_test/hdl/lcdDemo_tester_test.vhd
2021-11-24 10:50:51 +01:00

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;