Initial commit
This commit is contained in:
79
Libs/RS232_test/hdl/uvmRs232Monitor_sim.vhd
Normal file
79
Libs/RS232_test/hdl/uvmRs232Monitor_sim.vhd
Normal file
@@ -0,0 +1,79 @@
|
||||
LIBRARY Common_test;
|
||||
USE Common_test.testUtils.all;
|
||||
|
||||
ARCHITECTURE RTL OF uvmRs232Monitor IS
|
||||
|
||||
constant uartDataBitNb: positive := 8;
|
||||
signal baudPeriod: time;
|
||||
signal rxWord, txWord: natural;
|
||||
signal startup, rxReceived, txReceived: std_ulogic;
|
||||
|
||||
BEGIN
|
||||
------------------------------------------------------------------------------
|
||||
baudPeriod <= 1.0/baudRate * 1 sec;
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- receive RxD
|
||||
receiveRxD: process
|
||||
variable rxData: unsigned(uartDataBitNb-1 downto 0);
|
||||
begin
|
||||
rxReceived <= '0';
|
||||
-- start bit
|
||||
wait until falling_edge(RxD);
|
||||
wait for 1.5 * baudPeriod;
|
||||
-- data bits
|
||||
for index in rxData'reverse_range loop
|
||||
rxData(index) := RxD;
|
||||
wait for baudPeriod;
|
||||
end loop;
|
||||
-- store information
|
||||
rxWord <= to_integer(rxData);
|
||||
rxReceived <= '1';
|
||||
wait for 0 ns;
|
||||
end process receiveRxD;
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
-- receive RxD
|
||||
receiveTxD: process
|
||||
variable txData: unsigned(uartDataBitNb-1 downto 0);
|
||||
begin
|
||||
txReceived <= '0';
|
||||
-- start bit
|
||||
wait until falling_edge(TxD);
|
||||
wait for 1.5 * baudPeriod;
|
||||
-- data bits
|
||||
for index in txData'reverse_range loop
|
||||
txData(index) := TxD;
|
||||
wait for baudPeriod;
|
||||
end loop;
|
||||
-- store information
|
||||
txWord <= to_integer(txData);
|
||||
txReceived <= '1';
|
||||
wait for 0 ns;
|
||||
end process receiveTxD;
|
||||
|
||||
--============================================================================
|
||||
-- monitor acesses
|
||||
startup <= '1', '0' after 1 ns;
|
||||
|
||||
reportBusAccess: process(startup, rxReceived, txReceived)
|
||||
begin
|
||||
if startup = '1' then
|
||||
monitorTransaction <= pad(
|
||||
"idle",
|
||||
monitorTransaction'length
|
||||
);
|
||||
elsif rising_edge(rxReceived) then
|
||||
monitorTransaction <= pad(
|
||||
reportStart & " sent " & sprintf("%02X", rxWord),
|
||||
monitorTransaction'length
|
||||
);
|
||||
elsif rising_edge(txReceived) then
|
||||
monitorTransaction <= pad(
|
||||
reportStart & " received " & sprintf("%02X", txWord),
|
||||
monitorTransaction'length
|
||||
);
|
||||
end if;
|
||||
end process reportBusAccess;
|
||||
|
||||
END ARCHITECTURE RTL;
|
||||
Reference in New Issue
Block a user