Initial commit
This commit is contained in:
92
Libs/RS232_test/hdl/uvmRs232_tester_test.vhd
Normal file
92
Libs/RS232_test/hdl/uvmRs232_tester_test.vhd
Normal file
@@ -0,0 +1,92 @@
|
||||
LIBRARY Common_test;
|
||||
USE Common_test.testUtils.all;
|
||||
|
||||
ARCHITECTURE test OF uvmRs232_tester IS
|
||||
-- reset and clock
|
||||
constant clockPeriod: time := (1.0/clockFrequency) * 1 sec;
|
||||
signal clock_int: std_uLogic := '1';
|
||||
-- RS232 speed
|
||||
constant rs232Period: time := (1.0/rs232BaudRate) * 1 sec;
|
||||
-- RS232 Rx
|
||||
signal rs232RxChar : character := ' ';
|
||||
-- RS232 Tx
|
||||
signal rs232TxString : string(1 to 32);
|
||||
signal rs232SendString: std_uLogic;
|
||||
signal rs232SendDone: 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;
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- Tx sequence
|
||||
txSequence : process
|
||||
begin
|
||||
rs232SendString <= '0';
|
||||
rs232TxString <= (others => ' ');
|
||||
wait for 500 us;
|
||||
-- send 'Hi'
|
||||
rs232TxString <= pad("Hi", rs232TxString'length);
|
||||
rs232SendString <= '1', '0' after 1 ns;
|
||||
wait until rs232SendDone = '1';
|
||||
-- end of transmission
|
||||
wait;
|
||||
end process txSequence;
|
||||
|
||||
--============================================================================
|
||||
-- RS232 Rx
|
||||
storeRxByte: process(clock_int)
|
||||
begin
|
||||
if rising_edge(clock_int) then
|
||||
if dataValid = '1' then
|
||||
rs232RxChar <= character'val(to_integer(unsigned(dataOut)));
|
||||
end if;
|
||||
end if;
|
||||
end process storeRxByte;
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- RS232 Tx
|
||||
rsSendString: process
|
||||
constant rs232CharPeriod : time := 15*rs232Period;
|
||||
variable outStringRight: natural;
|
||||
variable outchar: character;
|
||||
begin
|
||||
-- wait for command
|
||||
send <= '0';
|
||||
dataIn <= (others => '0');
|
||||
rs232SendDone <= '0';
|
||||
wait until rising_edge(rs232SendString);
|
||||
-- find string length
|
||||
outStringRight := rs232TxString'right;
|
||||
while rs232TxString(outStringRight) = ' ' loop
|
||||
outStringRight := outStringRight-1;
|
||||
end loop;
|
||||
-- send characters
|
||||
for index in rs232TxString'left to outStringRight loop
|
||||
outchar := rs232TxString(index);
|
||||
dataIn <= std_ulogic_vector(to_unsigned(
|
||||
character'pos(outchar), dataIn'length
|
||||
));
|
||||
wait until rising_edge(clock_int);
|
||||
send <= '1', '0' after clockPeriod;
|
||||
wait for rs232CharPeriod;
|
||||
end loop;
|
||||
-- send carriage return
|
||||
outchar := cr;
|
||||
dataIn <= std_ulogic_vector(to_unsigned(
|
||||
character'pos(outchar), dataIn'length
|
||||
));
|
||||
wait until rising_edge(clock_int);
|
||||
send <= '1', '0' after clockPeriod;
|
||||
wait for rs232CharPeriod;
|
||||
-- signal end of sending
|
||||
rs232SendDone <= '1';
|
||||
wait for 1 ns;
|
||||
|
||||
end process rsSendString;
|
||||
|
||||
END ARCHITECTURE test;
|
||||
Reference in New Issue
Block a user