In the last blog, I showed how to use Modelsim from Vivado and how to compile Xilinx libraries for Modelsim.
https://www.mehmetburakaykenar.com/an-introductory-modelsim-tutorial-for-vivado-xilinx-users/116/
This time I will compile UVVM (Universal VHDL Verification Methodology) library for Modelsim and use util and BFM packages of UVVM to simulate uart_tx.vhd module. You can download uart_tx.vhd file from my github page:
https://github.com/mbaykenar/apis_anatolia/tree/main/VHDL_ile_FPGA_PROGRAMLAMA/ders16
The code is also given below:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity uart_tx is
generic (
c_clkfreq : integer := 100_000_000;
c_baudrate : integer := 115_200;
c_stopbit : integer := 2
);
port (
clk : in std_logic;
din_i : in std_logic_vector (7 downto 0);
tx_start_i : in std_logic;
tx_o : out std_logic;
tx_done_tick_o : out std_logic
);
end uart_tx;
architecture Behavioral of uart_tx is
constant c_bittimerlim : integer := c_clkfreq/c_baudrate;
constant c_stopbitlim : integer := (c_clkfreq/c_baudrate)*c_stopbit;
type states is (S_IDLE, S_START, S_DATA, S_STOP);
signal state : states := S_IDLE;
signal bittimer : integer range 0 to c_stopbitlim := 0;
signal bitcntr : integer range 0 to 7 := 0;
signal shreg : std_logic_vector (7 downto 0) := (others => '0');
begin
P_MAIN : process (clk) begin
if (rising_edge(clk)) then
case state is
when S_IDLE =>
tx_o <= '1';
tx_done_tick_o <= '0';
bitcntr <= 0;
if (tx_start_i = '1') then
state <= S_START;
tx_o <= '0';
shreg <= din_i;
end if;
when S_START =>
if (bittimer = c_bittimerlim-1) then
state <= S_DATA;
tx_o <= shreg(0);
shreg(7) <= shreg(0);
shreg(6 downto 0) <= shreg(7 downto 1);
bittimer <= 0;
else
bittimer <= bittimer + 1;
end if;
when S_DATA =>
if (bitcntr = 7) then
if (bittimer = c_bittimerlim-1) then
bitcntr <= 0;
state <= S_STOP;
tx_o <= '1';
bittimer <= 0;
else
bittimer <= bittimer + 1;
end if;
else
if (bittimer = c_bittimerlim-1) then
shreg(7) <= shreg(0);
shreg(6 downto 0) <= shreg(7 downto 1);
tx_o <= shreg(0);
bitcntr <= bitcntr + 1;
bittimer <= 0;
else
bittimer <= bittimer + 1;
end if;
end if;
when S_STOP =>
if (bittimer = c_stopbitlim-1) then
state <= S_IDLE;
tx_done_tick_o <= '1';
bittimer <= 0;
else
bittimer <= bittimer + 1;
end if;
end case;
end if;
end process;
end Behavioral;
UVVM is defined in its github page as: UVVM (Universal VHDL Verification Methodology) is a free and Open Source Methodology and Library for making very structured VHDL-based testbenches.
UVVM developers suggest first starting with UVVM-Lite library, which includes “util” and “bfm” packages:
https://github.com/UVVM/UVVM_Light
In order to compile UVVM library, I opened Modelsim and run the command below as stated in UVVM Lite github page:
cd C:/Verification/UVVM_Light-master/script
do ../script/compile.do C:/Verification/UVVM_Light-master C:/Verification/uvvm_modelsim/uvvm_compiled After do command, Modelsim console gives the output:
#
# User specified uvvm_light and target directory
#
#
#
# === Compiling UVVM Util to directory: C:/Verification/uvvm_modelsim/uvvm_compiled
#
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/types_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/adaptations_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/string_methods_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/protected_types_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/global_signals_and_shared_variables_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/hierarchy_linked_list_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/alert_hierarchy_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/license_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/methods_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/bfm_common_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/generic_queue_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/data_queue_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/data_fifo_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/data_stack_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_util/uvvm_util_context.vhd
#
#
#
# === Compiling UVVM BFMs to directory: C:/Verification/uvvm_modelsim/uvvm_compiled
#
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/avalon_mm_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/avalon_st_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/axilite_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/axistream_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/axi_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/gmii_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/gpio_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/i2c_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/rgmii_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/sbi_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/spi_bfm_pkg.vhd
# eval vcom -quiet -suppress 1346,1236,1090 -2008 -work uvvm_util C:/Verification/UVVM_Light-master/src_bfm/uart_bfm_pkg.vhd
In the destination folder:
I added compiled UVVM library folder to modelsim.ini library path:
Then I started a new Modelsim project:
Now after opening new project we can see UVVM library is added to the library listings:
I created a testbench file, only using some functions from util library of UVVM:
library ieee;
use ieee.std_logic_1164.all;
library STD;
use std.env.all;
library uvvm_util;
context uvvm_util.uvvm_util_context;
use std.textio.all;
use std.env.finish;
entity uvvm_test_tb is
end uvvm_test_tb;
architecture sim of uvvm_test_tb is
begin
------------------------------------------------
-- PROCESS: p_main
------------------------------------------------
p_main: process
constant C_SCOPE : string := C_TB_SCOPE_DEFAULT;
variable v_time_stamp : time := 0 ns;
begin
-- Print the configuration to the log
report_global_ctrl(VOID);
report_msg_id_panel(VOID);
enable_log_msg(ALL_MESSAGES);
--disable_log_msg(ALL_MESSAGES);
--enable_log_msg(ID_LOG_HDR);
log(ID_LOG_HDR, "Start Simulation of TB for IRQC", C_SCOPE);
--==================================================================================================
-- Ending the simulation
--------------------------------------------------------------------------------------
wait for 1000 ns; -- to allow some time for completion
report_alert_counters(FINAL); -- Report final counters and print conclusion for simulation (Success/Fail)
log(ID_LOG_HDR, "SIMULATION COMPLETED", C_SCOPE);
-- Finish the simulation
std.env.stop;
wait; -- to stop completely
end process p_main;
end architecture;
Then I added this file to the Modelsim project:
I compiled the file and run the simulation. The output of the simulation is:
vsim -gui work.uvvm_test_tb
# vsim -gui work.uvvm_test_tb
# Start time: 23:35:03 on Nov 25,2021
# Loading std.standard
# Loading std.textio(body)
# Loading ieee.std_logic_1164(body)
# Loading std.env(body)
# Loading ieee.numeric_std(body)
# Loading uvvm_util.types_pkg(body)
# Loading uvvm_util.adaptations_pkg(body)
# Loading ieee.math_real(body)
# Loading uvvm_util.string_methods_pkg(body)
# Loading uvvm_util.protected_types_pkg(body)
# Loading uvvm_util.global_signals_and_shared_variables_pkg
# Loading uvvm_util.hierarchy_linked_list_pkg(body)
# Loading uvvm_util.license_pkg(body)
# Loading uvvm_util.alert_hierarchy_pkg(body)
# Loading uvvm_util.methods_pkg(body)
# ** Note:
#
#
# *****************************************************************************************************
# This is a *** LICENSED PRODUCT *** as given in the LICENSE.TXT in the root directory.
# *****************************************************************************************************
#
#
# Time: 0 ps Iteration: 0 Region: /methods_pkg File: C:/Verification/UVVM_Light-master/src_util/methods_pkg.vhd
# ** Note:
#
# =====================================================================================================
# =====================================================================================================
# This info section may be turned off via C_SHOW_UVVM_UTILITY_LIBRARY_INFO in adaptations_pkg.vhd
#
# Important Simulator setup:
# - Set simulator to break on severity 'FAILURE'
# - Set simulator transcript to a monospace font (e.g. Courier new)
#
# UVVM Utility Library setup:
# - It is recommended to go through the two powerpoint presentations provided with the download
# - There is a Quick-Reference in the doc-directory
# - In order to change layout or behaviour - please check the src*/adaptations_pkg.vhd
# This is intended for personal or company customization
#
# License conditions are given in LICENSE.TXT
# =====================================================================================================
# =====================================================================================================
#
#
# Time: 0 ps Iteration: 0 Region: /methods_pkg File: C:/Verification/UVVM_Light-master/src_util/methods_pkg.vhd
# Loading uvvm_util.bfm_common_pkg(body)
# Loading work.uvvm_test_tb(sim)
# ** Warning: Design size of 12927 statements exceeds ModelSim-Intel FPGA Starter Edition recommended capacity.
# Expect performance to be adversely affected.
Then I run the simulation:
run -all
# UVVM:
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM: *** REPORT OF GLOBAL CTRL ***
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM: IGNORE STOP_LIMIT
# UVVM: NOTE : REGARD 0
# UVVM: TB_NOTE : REGARD 0
# UVVM: WARNING : REGARD 0
# UVVM: TB_WARNING : REGARD 0
# UVVM: MANUAL_CHECK : REGARD 0
# UVVM: ERROR : REGARD 1
# UVVM: TB_ERROR : REGARD 1
# UVVM: FAILURE : REGARD 1
# UVVM: TB_FAILURE : REGARD 1
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM:
# UVVM:
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM: *** REPORT OF MSG ID PANEL ***
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM: ID Status
# UVVM: ------------------------ ------
# UVVM: ID_UTIL_BURIED : DISABLED
# UVVM: ID_BITVIS_DEBUG : DISABLED
# UVVM: ID_UTIL_SETUP : ENABLED
# UVVM: ID_LOG_MSG_CTRL : ENABLED
# UVVM: ID_ALERT_CTRL : ENABLED
# UVVM: ID_FINISH_OR_STOP : ENABLED
# UVVM: ID_CLOCK_GEN : ENABLED
# UVVM: ID_GEN_PULSE : ENABLED
# UVVM: ID_BLOCKING : ENABLED
# UVVM: ID_WATCHDOG : ENABLED
# UVVM: ID_POS_ACK : ENABLED
# UVVM: ID_LOG_HDR : ENABLED
# UVVM: ID_LOG_HDR_LARGE : ENABLED
# UVVM: ID_LOG_HDR_XL : ENABLED
# UVVM: ID_SEQUENCER : ENABLED
# UVVM: ID_SEQUENCER_SUB : ENABLED
# UVVM: ID_BFM : ENABLED
# UVVM: ID_BFM_WAIT : ENABLED
# UVVM: ID_BFM_POLL : ENABLED
# UVVM: ID_BFM_POLL_SUMMARY : ENABLED
# UVVM: ID_CHANNEL_BFM : ENABLED
# UVVM: ID_TERMINATE_CMD : ENABLED
# UVVM: ID_SEGMENT_INITIATE : ENABLED
# UVVM: ID_SEGMENT_COMPLETE : ENABLED
# UVVM: ID_SEGMENT_HDR : ENABLED
# UVVM: ID_SEGMENT_DATA : ENABLED
# UVVM: ID_PACKET_INITIATE : ENABLED
# UVVM: ID_PACKET_PREAMBLE : ENABLED
# UVVM: ID_PACKET_COMPLETE : ENABLED
# UVVM: ID_PACKET_HDR : ENABLED
# UVVM: ID_PACKET_DATA : ENABLED
# UVVM: ID_PACKET_CHECKSUM : ENABLED
# UVVM: ID_PACKET_GAP : ENABLED
# UVVM: ID_FRAME_INITIATE : ENABLED
# UVVM: ID_FRAME_COMPLETE : ENABLED
# UVVM: ID_FRAME_HDR : ENABLED
# UVVM: ID_FRAME_DATA : ENABLED
# UVVM: ID_COVERAGE_MAKEBIN : DISABLED
# UVVM: ID_COVERAGE_ADDBIN : DISABLED
# UVVM: ID_COVERAGE_ICOVER : DISABLED
# UVVM: ID_COVERAGE_CONFIG : ENABLED
# UVVM: ID_COVERAGE_SUMMARY : ENABLED
# UVVM: ID_COVERAGE_HOLES : ENABLED
# UVVM: ID_UVVM_SEND_CMD : ENABLED
# UVVM: ID_UVVM_CMD_ACK : ENABLED
# UVVM: ID_UVVM_CMD_RESULT : ENABLED
# UVVM: ID_CMD_INTERPRETER : ENABLED
# UVVM: ID_CMD_INTERPRETER_WAIT : ENABLED
# UVVM: ID_IMMEDIATE_CMD : ENABLED
# UVVM: ID_IMMEDIATE_CMD_WAIT : ENABLED
# UVVM: ID_CMD_EXECUTOR : ENABLED
# UVVM: ID_CMD_EXECUTOR_WAIT : ENABLED
# UVVM: ID_CHANNEL_EXECUTOR : ENABLED
# UVVM: ID_CHANNEL_EXECUTOR_WAIT : ENABLED
# UVVM: ID_NEW_HVVC_CMD_SEQ : ENABLED
# UVVM: ID_INSERTED_DELAY : ENABLED
# UVVM: ID_OLD_AWAIT_COMPLETION : ENABLED
# UVVM: ID_AWAIT_COMPLETION : ENABLED
# UVVM: ID_AWAIT_COMPLETION_LIST : ENABLED
# UVVM: ID_AWAIT_COMPLETION_WAIT : ENABLED
# UVVM: ID_AWAIT_COMPLETION_END : ENABLED
# UVVM: ID_UVVM_DATA_QUEUE : ENABLED
# UVVM: ID_CONSTRUCTOR : ENABLED
# UVVM: ID_CONSTRUCTOR_SUB : ENABLED
# UVVM: ID_VVC_ACTIVITY : ENABLED
# UVVM: ID_MONITOR : ENABLED
# UVVM: ID_MONITOR_ERROR : ENABLED
# UVVM: ID_DATA : ENABLED
# UVVM: ID_CTRL : ENABLED
# UVVM: ID_FILE_OPEN_CLOSE : ENABLED
# UVVM: ID_FILE_PARSER : ENABLED
# UVVM: ID_SPEC_COV : ENABLED
# UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM:
# UVVM: ID_LOG_MSG_CTRL 0.0 ns TB seq. enable_log_msg(ALL_MESSAGES).
# UVVM:
# UVVM:
# UVVM: ID_LOG_HDR 0.0 ns TB seq. Start Simulation of TB for IRQC
# UVVM: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# UVVM:
# UVVM: ====================================================================================================================================================================
# UVVM: *** FINAL SUMMARY OF ALL ALERTS ***
# UVVM: ====================================================================================================================================================================
# UVVM: REGARDED EXPECTED IGNORED Comment?
# UVVM: NOTE : 0 0 0 ok
# UVVM: TB_NOTE : 0 0 0 ok
# UVVM: WARNING : 0 0 0 ok
# UVVM: TB_WARNING : 0 0 0 ok
# UVVM: MANUAL_CHECK : 0 0 0 ok
# UVVM: ERROR : 0 0 0 ok
# UVVM: TB_ERROR : 0 0 0 ok
# UVVM: FAILURE : 0 0 0 ok
# UVVM: TB_FAILURE : 0 0 0 ok
# UVVM: ====================================================================================================================================================================
# UVVM: >> Simulation SUCCESS: No mismatch between counted and expected serious alerts
# UVVM: ====================================================================================================================================================================
# UVVM:
# UVVM:
# UVVM:
# UVVM:
# UVVM: ID_LOG_HDR 1000.0 ns TB seq. SIMULATION COMPLETED
# UVVM: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
# Break in Process p_main at C:/Verification/SimWorkspace/uvvm_test/work/uvvm_test.vhd line 48
Therefore, it is understood that we compiled UVVM util library successfully.
Now it is time to test our uart_tx module. I created a new project in Modelsim named uart_tx:
Then I added uart_tx.vhd file to the project as an existing file and did not copy file:
Then I created a VHDL file and added to the project named tb_uart_tx.vhd, which will create stimulus for uart_tx module and check if the module is working properly.
At the start of testbench file library definitions and usages are included:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
library STD;
use std.env.all;
library uvvm_util;
context uvvm_util.uvvm_util_context;
use uvvm_util.uart_bfm_pkg.all;
use std.textio.all;
use std.env.finish;
The constants and signals are defined:
entity tb_uart_tx is
end tb_uart_tx;
architecture sim of tb_uart_tx is
-- CONSTANTS
constant c_clkperiod : time := 10 ns;
constant c_clkfreq : integer := 100_000_000;
constant c_clock_high_percentage : integer := 50;
signal clk : std_logic := '0';
signal din_i : std_logic_vector (7 downto 0) := (others => '0');
signal tx_start_i : std_logic := '0';
signal tx_o : std_logic;
signal tx_done_tick_o : std_logic;
signal uart_bfm_config : t_uart_bfm_config := C_UART_BFM_CONFIG_DEFAULT;
signal terminate_loop : std_logic := '0';
I instantiated the DUT (design under test) module:
begin
DUT : entity work.uart_tx
generic map(
c_clkfreq => c_clkfreq,
c_baudrate => 115_200,
c_stopbit => 1
)
port map (
clk => clk ,
din_i => din_i ,
tx_start_i => tx_start_i ,
tx_o => tx_o ,
tx_done_tick_o => tx_done_tick_o
);
Then I used clock_generator function, which is defined in methods_pkg package:
-----------------------------------------------------------------------------
-- Clock Generator
-----------------------------------------------------------------------------
clock_generator(clk, c_clkperiod, c_clock_high_percentage);
In the main stimulus process block, constant and variable definitions:
------------------------------------------------
-- PROCESS: p_main
------------------------------------------------
p_main: process
constant C_SCOPE : string := C_TB_SCOPE_DEFAULT;
variable v_time_stamp : time := 0 ns;
variable recv_byte : std_logic_vector (7 downto 0) := (others => '0');
begin
Then I initialized uart configurations:
-- uart initializations
uart_bfm_config.bit_time <= 8.68055 us;
uart_bfm_config.num_data_bits <= 8;
uart_bfm_config.idle_state <= '1';
uart_bfm_config.num_stop_bits <= STOP_BITS_ONE;
uart_bfm_config.parity <= PARITY_NONE;
uart_bfm_config.timeout <= 0 ns;
uart_bfm_config.timeout_severity <= error;
wait for 1 ps;
These lines are just copied from demo testbench of UVVM:
-- Print the configuration to the log
report_global_ctrl(VOID);
report_msg_id_panel(VOID);
enable_log_msg(ALL_MESSAGES);
--disable_log_msg(ALL_MESSAGES);
--enable_log_msg(ID_LOG_HDR);
log(ID_LOG_HDR, "Start Simulation of TB for UART_TX", C_SCOPE);
Then I added a for loop to transmit 256 bytes of data and receive this uart data using uart_receive function, which is defined in uart_bfm_pkg package of UVVM. I also used check_value function to compare transmitted and received data. This function is defined in methods_pkg package of UVVM:
for i in 0 to 255 loop
din_i <= CONV_STD_LOGIC_VECTOR(i,8);
tx_start_i <= '1';
uart_receive(
recv_byte, -- data_value
"data received", -- msg
tx_o, -- rx
terminate_loop, -- terminate_loop
uart_bfm_config, -- config
C_SCOPE, -- scope
shared_msg_id_panel, -- msg_id_panel
"" -- ext_proc_call
);
wait for c_clkperiod;
tx_start_i <= '0';
wait until rising_edge(tx_done_tick_o);
check_value(CONV_STD_LOGIC_VECTOR(i,8), recv_byte, ERROR, "Transmit byte = " & to_string(din_i,HEX) & " Received byte = " & to_string(recv_byte,HEX));
wait for 1 ps;
end loop;
These lines are also copied from demo testbench file of UVVM:
--==================================================================================================
-- Ending the simulation
--------------------------------------------------------------------------------------
wait for 1000 ns; -- to allow some time for completion
report_alert_counters(FINAL); -- Report final counters and print conclusion for simulation (Success/Fail)
log(ID_LOG_HDR, "SIMULATION COMPLETED", C_SCOPE);
-- Finish the simulation
std.env.stop;
wait; -- to stop completely
end process p_main;
end architecture;
I compiled and run the simulation with this testbench file. UVVM creates 2 files named _Alert.txt and _Log.txt. All the text written at the console of the Modelsim is saved in _Log.txt file. Alert related text is saved in _Alert.txt file. The content of the _Alert.txt file can be found in _Log.txt file also. Here is the content of the _Log.txt file:
UVVM:
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM: *** REPORT OF GLOBAL CTRL ***
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM: IGNORE STOP_LIMIT
UVVM: NOTE : REGARD 0
UVVM: TB_NOTE : REGARD 0
UVVM: WARNING : REGARD 0
UVVM: TB_WARNING : REGARD 0
UVVM: MANUAL_CHECK : REGARD 0
UVVM: ERROR : REGARD 1
UVVM: TB_ERROR : REGARD 1
UVVM: FAILURE : REGARD 1
UVVM: TB_FAILURE : REGARD 1
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM:
UVVM:
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM: *** REPORT OF MSG ID PANEL ***
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM: ID Status
UVVM: ------------------------ ------
UVVM: ID_UTIL_BURIED : DISABLED
UVVM: ID_BITVIS_DEBUG : DISABLED
UVVM: ID_UTIL_SETUP : ENABLED
UVVM: ID_LOG_MSG_CTRL : ENABLED
UVVM: ID_ALERT_CTRL : ENABLED
UVVM: ID_FINISH_OR_STOP : ENABLED
UVVM: ID_CLOCK_GEN : ENABLED
UVVM: ID_GEN_PULSE : ENABLED
UVVM: ID_BLOCKING : ENABLED
UVVM: ID_WATCHDOG : ENABLED
UVVM: ID_POS_ACK : ENABLED
UVVM: ID_LOG_HDR : ENABLED
UVVM: ID_LOG_HDR_LARGE : ENABLED
UVVM: ID_LOG_HDR_XL : ENABLED
UVVM: ID_SEQUENCER : ENABLED
UVVM: ID_SEQUENCER_SUB : ENABLED
UVVM: ID_BFM : ENABLED
UVVM: ID_BFM_WAIT : ENABLED
UVVM: ID_BFM_POLL : ENABLED
UVVM: ID_BFM_POLL_SUMMARY : ENABLED
UVVM: ID_CHANNEL_BFM : ENABLED
UVVM: ID_TERMINATE_CMD : ENABLED
UVVM: ID_SEGMENT_INITIATE : ENABLED
UVVM: ID_SEGMENT_COMPLETE : ENABLED
UVVM: ID_SEGMENT_HDR : ENABLED
UVVM: ID_SEGMENT_DATA : ENABLED
UVVM: ID_PACKET_INITIATE : ENABLED
UVVM: ID_PACKET_PREAMBLE : ENABLED
UVVM: ID_PACKET_COMPLETE : ENABLED
UVVM: ID_PACKET_HDR : ENABLED
UVVM: ID_PACKET_DATA : ENABLED
UVVM: ID_PACKET_CHECKSUM : ENABLED
UVVM: ID_PACKET_GAP : ENABLED
UVVM: ID_FRAME_INITIATE : ENABLED
UVVM: ID_FRAME_COMPLETE : ENABLED
UVVM: ID_FRAME_HDR : ENABLED
UVVM: ID_FRAME_DATA : ENABLED
UVVM: ID_COVERAGE_MAKEBIN : DISABLED
UVVM: ID_COVERAGE_ADDBIN : DISABLED
UVVM: ID_COVERAGE_ICOVER : DISABLED
UVVM: ID_COVERAGE_CONFIG : ENABLED
UVVM: ID_COVERAGE_SUMMARY : ENABLED
UVVM: ID_COVERAGE_HOLES : ENABLED
UVVM: ID_UVVM_SEND_CMD : ENABLED
UVVM: ID_UVVM_CMD_ACK : ENABLED
UVVM: ID_UVVM_CMD_RESULT : ENABLED
UVVM: ID_CMD_INTERPRETER : ENABLED
UVVM: ID_CMD_INTERPRETER_WAIT : ENABLED
UVVM: ID_IMMEDIATE_CMD : ENABLED
UVVM: ID_IMMEDIATE_CMD_WAIT : ENABLED
UVVM: ID_CMD_EXECUTOR : ENABLED
UVVM: ID_CMD_EXECUTOR_WAIT : ENABLED
UVVM: ID_CHANNEL_EXECUTOR : ENABLED
UVVM: ID_CHANNEL_EXECUTOR_WAIT : ENABLED
UVVM: ID_NEW_HVVC_CMD_SEQ : ENABLED
UVVM: ID_INSERTED_DELAY : ENABLED
UVVM: ID_OLD_AWAIT_COMPLETION : ENABLED
UVVM: ID_AWAIT_COMPLETION : ENABLED
UVVM: ID_AWAIT_COMPLETION_LIST : ENABLED
UVVM: ID_AWAIT_COMPLETION_WAIT : ENABLED
UVVM: ID_AWAIT_COMPLETION_END : ENABLED
UVVM: ID_UVVM_DATA_QUEUE : ENABLED
UVVM: ID_CONSTRUCTOR : ENABLED
UVVM: ID_CONSTRUCTOR_SUB : ENABLED
UVVM: ID_VVC_ACTIVITY : ENABLED
UVVM: ID_MONITOR : ENABLED
UVVM: ID_MONITOR_ERROR : ENABLED
UVVM: ID_DATA : ENABLED
UVVM: ID_CTRL : ENABLED
UVVM: ID_FILE_OPEN_CLOSE : ENABLED
UVVM: ID_FILE_PARSER : ENABLED
UVVM: ID_SPEC_COV : ENABLED
UVVM: --------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM:
UVVM:
UVVM: *** TB_WARNING #1 ***
UVVM: 0.001 ns (Util buried)
UVVM: Time stamp has been truncated to 1 decimal(s) in the next log message - settable in adaptations_pkg. (Actual time stamp has more decimals than
UVVM: displayed)
UVVM: This alert is shown once only.
UVVM:
UVVM: ID_LOG_MSG_CTRL 0.0 ns TB seq. enable_log_msg(ALL_MESSAGES).
UVVM:
UVVM:
UVVM: ID_LOG_HDR 0.0 ns TB seq. Start Simulation of TB for UART_TX
UVVM: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
UVVM: ID_BFM 82475.2 ns TB seq. uart_receive()=> x"00". 'data received'
UVVM: ID_POS_ACK 86810.0 ns TB seq. check_value() => OK, for slv x"00"'. 'Transmit byte = 00 Received byte = 00'
UVVM: ID_BFM 169285.2 ns TB seq. uart_receive()=> x"1". 'data received'
UVVM: ID_POS_ACK 173620.0 ns TB seq. check_value() => OK, for slv x"01"'. 'Transmit byte = 01 Received byte = 01'
UVVM: ID_BFM 256095.2 ns TB seq. uart_receive()=> x"2". 'data received'
UVVM: ID_POS_ACK 260430.0 ns TB seq. check_value() => OK, for slv x"02"'. 'Transmit byte = 02 Received byte = 02'
UVVM: ID_BFM 342905.2 ns TB seq. uart_receive()=> x"3". 'data received'
UVVM: ID_POS_ACK 347240.0 ns TB seq. check_value() => OK, for slv x"03"'. 'Transmit byte = 03 Received byte = 03'
UVVM: ID_BFM 429715.2 ns TB seq. uart_receive()=> x"4". 'data received'
UVVM: ID_POS_ACK 434050.0 ns TB seq. check_value() => OK, for slv x"04"'. 'Transmit byte = 04 Received byte = 04'
UVVM: ID_BFM 516525.2 ns TB seq. uart_receive()=> x"5". 'data received'
UVVM: ID_POS_ACK 520860.0 ns TB seq. check_value() => OK, for slv x"05"'. 'Transmit byte = 05 Received byte = 05'
UVVM: ID_BFM 603335.2 ns TB seq. uart_receive()=> x"6". 'data received'
UVVM: ID_POS_ACK 607670.0 ns TB seq. check_value() => OK, for slv x"06"'. 'Transmit byte = 06 Received byte = 06'
UVVM: ID_BFM 690145.2 ns TB seq. uart_receive()=> x"7". 'data received'
UVVM: ID_POS_ACK 694480.0 ns TB seq. check_value() => OK, for slv x"07"'. 'Transmit byte = 07 Received byte = 07'
UVVM: ID_BFM 776955.2 ns TB seq. uart_receive()=> x"8". 'data received'
UVVM: ID_POS_ACK 781290.0 ns TB seq. check_value() => OK, for slv x"08"'. 'Transmit byte = 08 Received byte = 08'
UVVM: ID_BFM 863765.2 ns TB seq. uart_receive()=> x"9". 'data received'
UVVM: ID_POS_ACK 868100.0 ns TB seq. check_value() => OK, for slv x"09"'. 'Transmit byte = 09 Received byte = 09'
UVVM: ID_BFM 950575.2 ns TB seq. uart_receive()=> x"A". 'data received'
UVVM: ID_POS_ACK 954910.0 ns TB seq. check_value() => OK, for slv x"0A"'. 'Transmit byte = 0A Received byte = 0A'
UVVM: ID_BFM 1037385.2 ns TB seq. uart_receive()=> x"B". 'data received'
UVVM: ID_POS_ACK 1041720.0 ns TB seq. check_value() => OK, for slv x"0B"'. 'Transmit byte = 0B Received byte = 0B'
UVVM: ID_BFM 1124195.2 ns TB seq. uart_receive()=> x"C". 'data received'
UVVM: ID_POS_ACK 1128530.0 ns TB seq. check_value() => OK, for slv x"0C"'. 'Transmit byte = 0C Received byte = 0C'
UVVM: ID_BFM 1211005.2 ns TB seq. uart_receive()=> x"D". 'data received'
UVVM: ID_POS_ACK 1215340.0 ns TB seq. check_value() => OK, for slv x"0D"'. 'Transmit byte = 0D Received byte = 0D'
UVVM: ID_BFM 1297815.2 ns TB seq. uart_receive()=> x"E". 'data received'
UVVM: ID_POS_ACK 1302150.0 ns TB seq. check_value() => OK, for slv x"0E"'. 'Transmit byte = 0E Received byte = 0E'
UVVM: ID_BFM 1384625.2 ns TB seq. uart_receive()=> x"F". 'data received'
UVVM: ID_POS_ACK 1388960.0 ns TB seq. check_value() => OK, for slv x"0F"'. 'Transmit byte = 0F Received byte = 0F'
UVVM: ID_BFM 1471435.2 ns TB seq. uart_receive()=> x"10". 'data received'
UVVM: ID_POS_ACK 1475770.0 ns TB seq. check_value() => OK, for slv x"10"'. 'Transmit byte = 10 Received byte = 10'
UVVM: ID_BFM 1558245.2 ns TB seq. uart_receive()=> x"11". 'data received'
UVVM: ID_POS_ACK 1562580.0 ns TB seq. check_value() => OK, for slv x"11"'. 'Transmit byte = 11 Received byte = 11'
UVVM: ID_BFM 1645055.2 ns TB seq. uart_receive()=> x"12". 'data received'
UVVM: ID_POS_ACK 1649390.0 ns TB seq. check_value() => OK, for slv x"12"'. 'Transmit byte = 12 Received byte = 12'
UVVM: ID_BFM 1731865.2 ns TB seq. uart_receive()=> x"13". 'data received'
UVVM: ID_POS_ACK 1736200.0 ns TB seq. check_value() => OK, for slv x"13"'. 'Transmit byte = 13 Received byte = 13'
UVVM: ID_BFM 1818675.2 ns TB seq. uart_receive()=> x"14". 'data received'
UVVM: ID_POS_ACK 1823010.0 ns TB seq. check_value() => OK, for slv x"14"'. 'Transmit byte = 14 Received byte = 14'
UVVM: ID_BFM 1905485.2 ns TB seq. uart_receive()=> x"15". 'data received'
UVVM: ID_POS_ACK 1909820.0 ns TB seq. check_value() => OK, for slv x"15"'. 'Transmit byte = 15 Received byte = 15'
UVVM: ID_BFM 1992295.2 ns TB seq. uart_receive()=> x"16". 'data received'
UVVM: ID_POS_ACK 1996630.0 ns TB seq. check_value() => OK, for slv x"16"'. 'Transmit byte = 16 Received byte = 16'
UVVM: ID_BFM 2079105.2 ns TB seq. uart_receive()=> x"17". 'data received'
UVVM: ID_POS_ACK 2083440.0 ns TB seq. check_value() => OK, for slv x"17"'. 'Transmit byte = 17 Received byte = 17'
UVVM: ID_BFM 2165915.2 ns TB seq. uart_receive()=> x"18". 'data received'
UVVM: ID_POS_ACK 2170250.0 ns TB seq. check_value() => OK, for slv x"18"'. 'Transmit byte = 18 Received byte = 18'
UVVM: ID_BFM 2252725.2 ns TB seq. uart_receive()=> x"19". 'data received'
UVVM: ID_POS_ACK 2257060.0 ns TB seq. check_value() => OK, for slv x"19"'. 'Transmit byte = 19 Received byte = 19'
UVVM: ID_BFM 2339535.2 ns TB seq. uart_receive()=> x"1A". 'data received'
UVVM: ID_POS_ACK 2343870.0 ns TB seq. check_value() => OK, for slv x"1A"'. 'Transmit byte = 1A Received byte = 1A'
UVVM: ID_BFM 2426345.2 ns TB seq. uart_receive()=> x"1B". 'data received'
UVVM: ID_POS_ACK 2430680.0 ns TB seq. check_value() => OK, for slv x"1B"'. 'Transmit byte = 1B Received byte = 1B'
UVVM: ID_BFM 2513155.2 ns TB seq. uart_receive()=> x"1C". 'data received'
UVVM: ID_POS_ACK 2517490.0 ns TB seq. check_value() => OK, for slv x"1C"'. 'Transmit byte = 1C Received byte = 1C'
UVVM: ID_BFM 2599965.2 ns TB seq. uart_receive()=> x"1D". 'data received'
UVVM: ID_POS_ACK 2604300.0 ns TB seq. check_value() => OK, for slv x"1D"'. 'Transmit byte = 1D Received byte = 1D'
UVVM: ID_BFM 2686775.2 ns TB seq. uart_receive()=> x"1E". 'data received'
UVVM: ID_POS_ACK 2691110.0 ns TB seq. check_value() => OK, for slv x"1E"'. 'Transmit byte = 1E Received byte = 1E'
UVVM: ID_BFM 2773585.2 ns TB seq. uart_receive()=> x"1F". 'data received'
UVVM: ID_POS_ACK 2777920.0 ns TB seq. check_value() => OK, for slv x"1F"'. 'Transmit byte = 1F Received byte = 1F'
UVVM: ID_BFM 2860395.2 ns TB seq. uart_receive()=> x"20". 'data received'
UVVM: ID_POS_ACK 2864730.0 ns TB seq. check_value() => OK, for slv x"20"'. 'Transmit byte = 20 Received byte = 20'
UVVM: ID_BFM 2947205.2 ns TB seq. uart_receive()=> x"21". 'data received'
UVVM: ID_POS_ACK 2951540.0 ns TB seq. check_value() => OK, for slv x"21"'. 'Transmit byte = 21 Received byte = 21'
UVVM: ID_BFM 3034015.2 ns TB seq. uart_receive()=> x"22". 'data received'
UVVM: ID_POS_ACK 3038350.0 ns TB seq. check_value() => OK, for slv x"22"'. 'Transmit byte = 22 Received byte = 22'
UVVM: ID_BFM 3120825.2 ns TB seq. uart_receive()=> x"23". 'data received'
UVVM: ID_POS_ACK 3125160.0 ns TB seq. check_value() => OK, for slv x"23"'. 'Transmit byte = 23 Received byte = 23'
UVVM: ID_BFM 3207635.2 ns TB seq. uart_receive()=> x"24". 'data received'
UVVM: ID_POS_ACK 3211970.0 ns TB seq. check_value() => OK, for slv x"24"'. 'Transmit byte = 24 Received byte = 24'
UVVM: ID_BFM 3294445.2 ns TB seq. uart_receive()=> x"25". 'data received'
UVVM: ID_POS_ACK 3298780.0 ns TB seq. check_value() => OK, for slv x"25"'. 'Transmit byte = 25 Received byte = 25'
UVVM: ID_BFM 3381255.2 ns TB seq. uart_receive()=> x"26". 'data received'
UVVM: ID_POS_ACK 3385590.0 ns TB seq. check_value() => OK, for slv x"26"'. 'Transmit byte = 26 Received byte = 26'
UVVM: ID_BFM 3468065.2 ns TB seq. uart_receive()=> x"27". 'data received'
UVVM: ID_POS_ACK 3472400.0 ns TB seq. check_value() => OK, for slv x"27"'. 'Transmit byte = 27 Received byte = 27'
UVVM: ID_BFM 3554875.2 ns TB seq. uart_receive()=> x"28". 'data received'
UVVM: ID_POS_ACK 3559210.0 ns TB seq. check_value() => OK, for slv x"28"'. 'Transmit byte = 28 Received byte = 28'
UVVM: ID_BFM 3641685.2 ns TB seq. uart_receive()=> x"29". 'data received'
UVVM: ID_POS_ACK 3646020.0 ns TB seq. check_value() => OK, for slv x"29"'. 'Transmit byte = 29 Received byte = 29'
UVVM: ID_BFM 3728495.2 ns TB seq. uart_receive()=> x"2A". 'data received'
UVVM: ID_POS_ACK 3732830.0 ns TB seq. check_value() => OK, for slv x"2A"'. 'Transmit byte = 2A Received byte = 2A'
UVVM: ID_BFM 3815305.2 ns TB seq. uart_receive()=> x"2B". 'data received'
UVVM: ID_POS_ACK 3819640.0 ns TB seq. check_value() => OK, for slv x"2B"'. 'Transmit byte = 2B Received byte = 2B'
UVVM: ID_BFM 3902115.2 ns TB seq. uart_receive()=> x"2C". 'data received'
UVVM: ID_POS_ACK 3906450.0 ns TB seq. check_value() => OK, for slv x"2C"'. 'Transmit byte = 2C Received byte = 2C'
UVVM: ID_BFM 3988925.2 ns TB seq. uart_receive()=> x"2D". 'data received'
UVVM: ID_POS_ACK 3993260.0 ns TB seq. check_value() => OK, for slv x"2D"'. 'Transmit byte = 2D Received byte = 2D'
UVVM: ID_BFM 4075735.2 ns TB seq. uart_receive()=> x"2E". 'data received'
UVVM: ID_POS_ACK 4080070.0 ns TB seq. check_value() => OK, for slv x"2E"'. 'Transmit byte = 2E Received byte = 2E'
UVVM: ID_BFM 4162545.2 ns TB seq. uart_receive()=> x"2F". 'data received'
UVVM: ID_POS_ACK 4166880.0 ns TB seq. check_value() => OK, for slv x"2F"'. 'Transmit byte = 2F Received byte = 2F'
UVVM: ID_BFM 4249355.2 ns TB seq. uart_receive()=> x"30". 'data received'
UVVM: ID_POS_ACK 4253690.0 ns TB seq. check_value() => OK, for slv x"30"'. 'Transmit byte = 30 Received byte = 30'
UVVM: ID_BFM 4336165.2 ns TB seq. uart_receive()=> x"31". 'data received'
UVVM: ID_POS_ACK 4340500.0 ns TB seq. check_value() => OK, for slv x"31"'. 'Transmit byte = 31 Received byte = 31'
UVVM: ID_BFM 4422975.2 ns TB seq. uart_receive()=> x"32". 'data received'
UVVM: ID_POS_ACK 4427310.0 ns TB seq. check_value() => OK, for slv x"32"'. 'Transmit byte = 32 Received byte = 32'
UVVM: ID_BFM 4509785.2 ns TB seq. uart_receive()=> x"33". 'data received'
UVVM: ID_POS_ACK 4514120.0 ns TB seq. check_value() => OK, for slv x"33"'. 'Transmit byte = 33 Received byte = 33'
UVVM: ID_BFM 4596595.2 ns TB seq. uart_receive()=> x"34". 'data received'
UVVM: ID_POS_ACK 4600930.0 ns TB seq. check_value() => OK, for slv x"34"'. 'Transmit byte = 34 Received byte = 34'
UVVM: ID_BFM 4683405.2 ns TB seq. uart_receive()=> x"35". 'data received'
UVVM: ID_POS_ACK 4687740.0 ns TB seq. check_value() => OK, for slv x"35"'. 'Transmit byte = 35 Received byte = 35'
UVVM: ID_BFM 4770215.2 ns TB seq. uart_receive()=> x"36". 'data received'
UVVM: ID_POS_ACK 4774550.0 ns TB seq. check_value() => OK, for slv x"36"'. 'Transmit byte = 36 Received byte = 36'
UVVM: ID_BFM 4857025.2 ns TB seq. uart_receive()=> x"37". 'data received'
UVVM: ID_POS_ACK 4861360.0 ns TB seq. check_value() => OK, for slv x"37"'. 'Transmit byte = 37 Received byte = 37'
UVVM: ID_BFM 4943835.2 ns TB seq. uart_receive()=> x"38". 'data received'
UVVM: ID_POS_ACK 4948170.0 ns TB seq. check_value() => OK, for slv x"38"'. 'Transmit byte = 38 Received byte = 38'
UVVM: ID_BFM 5030645.2 ns TB seq. uart_receive()=> x"39". 'data received'
UVVM: ID_POS_ACK 5034980.0 ns TB seq. check_value() => OK, for slv x"39"'. 'Transmit byte = 39 Received byte = 39'
UVVM: ID_BFM 5117455.2 ns TB seq. uart_receive()=> x"3A". 'data received'
UVVM: ID_POS_ACK 5121790.0 ns TB seq. check_value() => OK, for slv x"3A"'. 'Transmit byte = 3A Received byte = 3A'
UVVM: ID_BFM 5204265.2 ns TB seq. uart_receive()=> x"3B". 'data received'
UVVM: ID_POS_ACK 5208600.0 ns TB seq. check_value() => OK, for slv x"3B"'. 'Transmit byte = 3B Received byte = 3B'
UVVM: ID_BFM 5291075.2 ns TB seq. uart_receive()=> x"3C". 'data received'
UVVM: ID_POS_ACK 5295410.0 ns TB seq. check_value() => OK, for slv x"3C"'. 'Transmit byte = 3C Received byte = 3C'
UVVM: ID_BFM 5377885.2 ns TB seq. uart_receive()=> x"3D". 'data received'
UVVM: ID_POS_ACK 5382220.0 ns TB seq. check_value() => OK, for slv x"3D"'. 'Transmit byte = 3D Received byte = 3D'
UVVM: ID_BFM 5464695.2 ns TB seq. uart_receive()=> x"3E". 'data received'
UVVM: ID_POS_ACK 5469030.0 ns TB seq. check_value() => OK, for slv x"3E"'. 'Transmit byte = 3E Received byte = 3E'
UVVM: ID_BFM 5551505.2 ns TB seq. uart_receive()=> x"3F". 'data received'
UVVM: ID_POS_ACK 5555840.0 ns TB seq. check_value() => OK, for slv x"3F"'. 'Transmit byte = 3F Received byte = 3F'
UVVM: ID_BFM 5638315.2 ns TB seq. uart_receive()=> x"40". 'data received'
UVVM: ID_POS_ACK 5642650.0 ns TB seq. check_value() => OK, for slv x"40"'. 'Transmit byte = 40 Received byte = 40'
UVVM: ID_BFM 5725125.2 ns TB seq. uart_receive()=> x"41". 'data received'
UVVM: ID_POS_ACK 5729460.0 ns TB seq. check_value() => OK, for slv x"41"'. 'Transmit byte = 41 Received byte = 41'
UVVM: ID_BFM 5811935.2 ns TB seq. uart_receive()=> x"42". 'data received'
UVVM: ID_POS_ACK 5816270.0 ns TB seq. check_value() => OK, for slv x"42"'. 'Transmit byte = 42 Received byte = 42'
UVVM: ID_BFM 5898745.2 ns TB seq. uart_receive()=> x"43". 'data received'
UVVM: ID_POS_ACK 5903080.0 ns TB seq. check_value() => OK, for slv x"43"'. 'Transmit byte = 43 Received byte = 43'
UVVM: ID_BFM 5985555.2 ns TB seq. uart_receive()=> x"44". 'data received'
UVVM: ID_POS_ACK 5989890.0 ns TB seq. check_value() => OK, for slv x"44"'. 'Transmit byte = 44 Received byte = 44'
UVVM: ID_BFM 6072365.2 ns TB seq. uart_receive()=> x"45". 'data received'
UVVM: ID_POS_ACK 6076700.0 ns TB seq. check_value() => OK, for slv x"45"'. 'Transmit byte = 45 Received byte = 45'
UVVM: ID_BFM 6159175.2 ns TB seq. uart_receive()=> x"46". 'data received'
UVVM: ID_POS_ACK 6163510.0 ns TB seq. check_value() => OK, for slv x"46"'. 'Transmit byte = 46 Received byte = 46'
UVVM: ID_BFM 6245985.2 ns TB seq. uart_receive()=> x"47". 'data received'
UVVM: ID_POS_ACK 6250320.0 ns TB seq. check_value() => OK, for slv x"47"'. 'Transmit byte = 47 Received byte = 47'
UVVM: ID_BFM 6332795.2 ns TB seq. uart_receive()=> x"48". 'data received'
UVVM: ID_POS_ACK 6337130.0 ns TB seq. check_value() => OK, for slv x"48"'. 'Transmit byte = 48 Received byte = 48'
UVVM: ID_BFM 6419605.2 ns TB seq. uart_receive()=> x"49". 'data received'
UVVM: ID_POS_ACK 6423940.0 ns TB seq. check_value() => OK, for slv x"49"'. 'Transmit byte = 49 Received byte = 49'
UVVM: ID_BFM 6506415.2 ns TB seq. uart_receive()=> x"4A". 'data received'
UVVM: ID_POS_ACK 6510750.0 ns TB seq. check_value() => OK, for slv x"4A"'. 'Transmit byte = 4A Received byte = 4A'
UVVM: ID_BFM 6593225.2 ns TB seq. uart_receive()=> x"4B". 'data received'
UVVM: ID_POS_ACK 6597560.0 ns TB seq. check_value() => OK, for slv x"4B"'. 'Transmit byte = 4B Received byte = 4B'
UVVM: ID_BFM 6680035.2 ns TB seq. uart_receive()=> x"4C". 'data received'
UVVM: ID_POS_ACK 6684370.0 ns TB seq. check_value() => OK, for slv x"4C"'. 'Transmit byte = 4C Received byte = 4C'
UVVM: ID_BFM 6766845.2 ns TB seq. uart_receive()=> x"4D". 'data received'
UVVM: ID_POS_ACK 6771180.0 ns TB seq. check_value() => OK, for slv x"4D"'. 'Transmit byte = 4D Received byte = 4D'
UVVM: ID_BFM 6853655.2 ns TB seq. uart_receive()=> x"4E". 'data received'
UVVM: ID_POS_ACK 6857990.0 ns TB seq. check_value() => OK, for slv x"4E"'. 'Transmit byte = 4E Received byte = 4E'
UVVM: ID_BFM 6940465.2 ns TB seq. uart_receive()=> x"4F". 'data received'
UVVM: ID_POS_ACK 6944800.0 ns TB seq. check_value() => OK, for slv x"4F"'. 'Transmit byte = 4F Received byte = 4F'
UVVM: ID_BFM 7027275.2 ns TB seq. uart_receive()=> x"50". 'data received'
UVVM: ID_POS_ACK 7031610.0 ns TB seq. check_value() => OK, for slv x"50"'. 'Transmit byte = 50 Received byte = 50'
UVVM: ID_BFM 7114085.2 ns TB seq. uart_receive()=> x"51". 'data received'
UVVM: ID_POS_ACK 7118420.0 ns TB seq. check_value() => OK, for slv x"51"'. 'Transmit byte = 51 Received byte = 51'
UVVM: ID_BFM 7200895.2 ns TB seq. uart_receive()=> x"52". 'data received'
UVVM: ID_POS_ACK 7205230.0 ns TB seq. check_value() => OK, for slv x"52"'. 'Transmit byte = 52 Received byte = 52'
UVVM: ID_BFM 7287705.2 ns TB seq. uart_receive()=> x"53". 'data received'
UVVM: ID_POS_ACK 7292040.0 ns TB seq. check_value() => OK, for slv x"53"'. 'Transmit byte = 53 Received byte = 53'
UVVM: ID_BFM 7374515.2 ns TB seq. uart_receive()=> x"54". 'data received'
UVVM: ID_POS_ACK 7378850.0 ns TB seq. check_value() => OK, for slv x"54"'. 'Transmit byte = 54 Received byte = 54'
UVVM: ID_BFM 7461325.2 ns TB seq. uart_receive()=> x"55". 'data received'
UVVM: ID_POS_ACK 7465660.0 ns TB seq. check_value() => OK, for slv x"55"'. 'Transmit byte = 55 Received byte = 55'
UVVM: ID_BFM 7548135.2 ns TB seq. uart_receive()=> x"56". 'data received'
UVVM: ID_POS_ACK 7552470.0 ns TB seq. check_value() => OK, for slv x"56"'. 'Transmit byte = 56 Received byte = 56'
UVVM: ID_BFM 7634945.2 ns TB seq. uart_receive()=> x"57". 'data received'
UVVM: ID_POS_ACK 7639280.0 ns TB seq. check_value() => OK, for slv x"57"'. 'Transmit byte = 57 Received byte = 57'
UVVM: ID_BFM 7721755.2 ns TB seq. uart_receive()=> x"58". 'data received'
UVVM: ID_POS_ACK 7726090.0 ns TB seq. check_value() => OK, for slv x"58"'. 'Transmit byte = 58 Received byte = 58'
UVVM: ID_BFM 7808565.2 ns TB seq. uart_receive()=> x"59". 'data received'
UVVM: ID_POS_ACK 7812900.0 ns TB seq. check_value() => OK, for slv x"59"'. 'Transmit byte = 59 Received byte = 59'
UVVM: ID_BFM 7895375.2 ns TB seq. uart_receive()=> x"5A". 'data received'
UVVM: ID_POS_ACK 7899710.0 ns TB seq. check_value() => OK, for slv x"5A"'. 'Transmit byte = 5A Received byte = 5A'
UVVM: ID_BFM 7982185.2 ns TB seq. uart_receive()=> x"5B". 'data received'
UVVM: ID_POS_ACK 7986520.0 ns TB seq. check_value() => OK, for slv x"5B"'. 'Transmit byte = 5B Received byte = 5B'
UVVM: ID_BFM 8068995.2 ns TB seq. uart_receive()=> x"5C". 'data received'
UVVM: ID_POS_ACK 8073330.0 ns TB seq. check_value() => OK, for slv x"5C"'. 'Transmit byte = 5C Received byte = 5C'
UVVM: ID_BFM 8155805.2 ns TB seq. uart_receive()=> x"5D". 'data received'
UVVM: ID_POS_ACK 8160140.0 ns TB seq. check_value() => OK, for slv x"5D"'. 'Transmit byte = 5D Received byte = 5D'
UVVM: ID_BFM 8242615.2 ns TB seq. uart_receive()=> x"5E". 'data received'
UVVM: ID_POS_ACK 8246950.0 ns TB seq. check_value() => OK, for slv x"5E"'. 'Transmit byte = 5E Received byte = 5E'
UVVM: ID_BFM 8329425.2 ns TB seq. uart_receive()=> x"5F". 'data received'
UVVM: ID_POS_ACK 8333760.0 ns TB seq. check_value() => OK, for slv x"5F"'. 'Transmit byte = 5F Received byte = 5F'
UVVM: ID_BFM 8416235.2 ns TB seq. uart_receive()=> x"60". 'data received'
UVVM: ID_POS_ACK 8420570.0 ns TB seq. check_value() => OK, for slv x"60"'. 'Transmit byte = 60 Received byte = 60'
UVVM: ID_BFM 8503045.2 ns TB seq. uart_receive()=> x"61". 'data received'
UVVM: ID_POS_ACK 8507380.0 ns TB seq. check_value() => OK, for slv x"61"'. 'Transmit byte = 61 Received byte = 61'
UVVM: ID_BFM 8589855.2 ns TB seq. uart_receive()=> x"62". 'data received'
UVVM: ID_POS_ACK 8594190.0 ns TB seq. check_value() => OK, for slv x"62"'. 'Transmit byte = 62 Received byte = 62'
UVVM: ID_BFM 8676665.2 ns TB seq. uart_receive()=> x"63". 'data received'
UVVM: ID_POS_ACK 8681000.0 ns TB seq. check_value() => OK, for slv x"63"'. 'Transmit byte = 63 Received byte = 63'
UVVM: ID_BFM 8763475.2 ns TB seq. uart_receive()=> x"64". 'data received'
UVVM: ID_POS_ACK 8767810.0 ns TB seq. check_value() => OK, for slv x"64"'. 'Transmit byte = 64 Received byte = 64'
UVVM: ID_BFM 8850285.2 ns TB seq. uart_receive()=> x"65". 'data received'
UVVM: ID_POS_ACK 8854620.0 ns TB seq. check_value() => OK, for slv x"65"'. 'Transmit byte = 65 Received byte = 65'
UVVM: ID_BFM 8937095.2 ns TB seq. uart_receive()=> x"66". 'data received'
UVVM: ID_POS_ACK 8941430.0 ns TB seq. check_value() => OK, for slv x"66"'. 'Transmit byte = 66 Received byte = 66'
UVVM: ID_BFM 9023905.2 ns TB seq. uart_receive()=> x"67". 'data received'
UVVM: ID_POS_ACK 9028240.0 ns TB seq. check_value() => OK, for slv x"67"'. 'Transmit byte = 67 Received byte = 67'
UVVM: ID_BFM 9110715.2 ns TB seq. uart_receive()=> x"68". 'data received'
UVVM: ID_POS_ACK 9115050.0 ns TB seq. check_value() => OK, for slv x"68"'. 'Transmit byte = 68 Received byte = 68'
UVVM: ID_BFM 9197525.2 ns TB seq. uart_receive()=> x"69". 'data received'
UVVM: ID_POS_ACK 9201860.0 ns TB seq. check_value() => OK, for slv x"69"'. 'Transmit byte = 69 Received byte = 69'
UVVM: ID_BFM 9284335.2 ns TB seq. uart_receive()=> x"6A". 'data received'
UVVM: ID_POS_ACK 9288670.0 ns TB seq. check_value() => OK, for slv x"6A"'. 'Transmit byte = 6A Received byte = 6A'
UVVM: ID_BFM 9371145.2 ns TB seq. uart_receive()=> x"6B". 'data received'
UVVM: ID_POS_ACK 9375480.0 ns TB seq. check_value() => OK, for slv x"6B"'. 'Transmit byte = 6B Received byte = 6B'
UVVM: ID_BFM 9457955.2 ns TB seq. uart_receive()=> x"6C". 'data received'
UVVM: ID_POS_ACK 9462290.0 ns TB seq. check_value() => OK, for slv x"6C"'. 'Transmit byte = 6C Received byte = 6C'
UVVM: ID_BFM 9544765.2 ns TB seq. uart_receive()=> x"6D". 'data received'
UVVM: ID_POS_ACK 9549100.0 ns TB seq. check_value() => OK, for slv x"6D"'. 'Transmit byte = 6D Received byte = 6D'
UVVM: ID_BFM 9631575.2 ns TB seq. uart_receive()=> x"6E". 'data received'
UVVM: ID_POS_ACK 9635910.0 ns TB seq. check_value() => OK, for slv x"6E"'. 'Transmit byte = 6E Received byte = 6E'
UVVM: ID_BFM 9718385.2 ns TB seq. uart_receive()=> x"6F". 'data received'
UVVM: ID_POS_ACK 9722720.0 ns TB seq. check_value() => OK, for slv x"6F"'. 'Transmit byte = 6F Received byte = 6F'
UVVM: ID_BFM 9805195.2 ns TB seq. uart_receive()=> x"70". 'data received'
UVVM: ID_POS_ACK 9809530.0 ns TB seq. check_value() => OK, for slv x"70"'. 'Transmit byte = 70 Received byte = 70'
UVVM: ID_BFM 9892005.2 ns TB seq. uart_receive()=> x"71". 'data received'
UVVM: ID_POS_ACK 9896340.0 ns TB seq. check_value() => OK, for slv x"71"'. 'Transmit byte = 71 Received byte = 71'
UVVM: ID_BFM 9978815.2 ns TB seq. uart_receive()=> x"72". 'data received'
UVVM: ID_POS_ACK 9983150.0 ns TB seq. check_value() => OK, for slv x"72"'. 'Transmit byte = 72 Received byte = 72'
UVVM: ID_BFM 10065625.2 ns TB seq. uart_receive()=> x"73". 'data received'
UVVM: ID_POS_ACK 10069960.0 ns TB seq. check_value() => OK, for slv x"73"'. 'Transmit byte = 73 Received byte = 73'
UVVM: ID_BFM 10152435.2 ns TB seq. uart_receive()=> x"74". 'data received'
UVVM: ID_POS_ACK 10156770.0 ns TB seq. check_value() => OK, for slv x"74"'. 'Transmit byte = 74 Received byte = 74'
UVVM: ID_BFM 10239245.2 ns TB seq. uart_receive()=> x"75". 'data received'
UVVM: ID_POS_ACK 10243580.0 ns TB seq. check_value() => OK, for slv x"75"'. 'Transmit byte = 75 Received byte = 75'
UVVM: ID_BFM 10326055.2 ns TB seq. uart_receive()=> x"76". 'data received'
UVVM: ID_POS_ACK 10330390.0 ns TB seq. check_value() => OK, for slv x"76"'. 'Transmit byte = 76 Received byte = 76'
UVVM: ID_BFM 10412865.2 ns TB seq. uart_receive()=> x"77". 'data received'
UVVM: ID_POS_ACK 10417200.0 ns TB seq. check_value() => OK, for slv x"77"'. 'Transmit byte = 77 Received byte = 77'
UVVM: ID_BFM 10499675.2 ns TB seq. uart_receive()=> x"78". 'data received'
UVVM: ID_POS_ACK 10504010.0 ns TB seq. check_value() => OK, for slv x"78"'. 'Transmit byte = 78 Received byte = 78'
UVVM: ID_BFM 10586485.2 ns TB seq. uart_receive()=> x"79". 'data received'
UVVM: ID_POS_ACK 10590820.0 ns TB seq. check_value() => OK, for slv x"79"'. 'Transmit byte = 79 Received byte = 79'
UVVM: ID_BFM 10673295.2 ns TB seq. uart_receive()=> x"7A". 'data received'
UVVM: ID_POS_ACK 10677630.0 ns TB seq. check_value() => OK, for slv x"7A"'. 'Transmit byte = 7A Received byte = 7A'
UVVM: ID_BFM 10760105.2 ns TB seq. uart_receive()=> x"7B". 'data received'
UVVM: ID_POS_ACK 10764440.0 ns TB seq. check_value() => OK, for slv x"7B"'. 'Transmit byte = 7B Received byte = 7B'
UVVM: ID_BFM 10846915.2 ns TB seq. uart_receive()=> x"7C". 'data received'
UVVM: ID_POS_ACK 10851250.0 ns TB seq. check_value() => OK, for slv x"7C"'. 'Transmit byte = 7C Received byte = 7C'
UVVM: ID_BFM 10933725.2 ns TB seq. uart_receive()=> x"7D". 'data received'
UVVM: ID_POS_ACK 10938060.0 ns TB seq. check_value() => OK, for slv x"7D"'. 'Transmit byte = 7D Received byte = 7D'
UVVM: ID_BFM 11020535.2 ns TB seq. uart_receive()=> x"7E". 'data received'
UVVM: ID_POS_ACK 11024870.0 ns TB seq. check_value() => OK, for slv x"7E"'. 'Transmit byte = 7E Received byte = 7E'
UVVM: ID_BFM 11107345.2 ns TB seq. uart_receive()=> x"7F". 'data received'
UVVM: ID_POS_ACK 11111680.0 ns TB seq. check_value() => OK, for slv x"7F"'. 'Transmit byte = 7F Received byte = 7F'
UVVM: ID_BFM 11194155.2 ns TB seq. uart_receive()=> x"80". 'data received'
UVVM: ID_POS_ACK 11198490.0 ns TB seq. check_value() => OK, for slv x"80"'. 'Transmit byte = 80 Received byte = 80'
UVVM: ID_BFM 11280965.2 ns TB seq. uart_receive()=> x"81". 'data received'
UVVM: ID_POS_ACK 11285300.0 ns TB seq. check_value() => OK, for slv x"81"'. 'Transmit byte = 81 Received byte = 81'
UVVM: ID_BFM 11367775.2 ns TB seq. uart_receive()=> x"82". 'data received'
UVVM: ID_POS_ACK 11372110.0 ns TB seq. check_value() => OK, for slv x"82"'. 'Transmit byte = 82 Received byte = 82'
UVVM: ID_BFM 11454585.2 ns TB seq. uart_receive()=> x"83". 'data received'
UVVM: ID_POS_ACK 11458920.0 ns TB seq. check_value() => OK, for slv x"83"'. 'Transmit byte = 83 Received byte = 83'
UVVM: ID_BFM 11541395.2 ns TB seq. uart_receive()=> x"84". 'data received'
UVVM: ID_POS_ACK 11545730.0 ns TB seq. check_value() => OK, for slv x"84"'. 'Transmit byte = 84 Received byte = 84'
UVVM: ID_BFM 11628205.2 ns TB seq. uart_receive()=> x"85". 'data received'
UVVM: ID_POS_ACK 11632540.0 ns TB seq. check_value() => OK, for slv x"85"'. 'Transmit byte = 85 Received byte = 85'
UVVM: ID_BFM 11715015.2 ns TB seq. uart_receive()=> x"86". 'data received'
UVVM: ID_POS_ACK 11719350.0 ns TB seq. check_value() => OK, for slv x"86"'. 'Transmit byte = 86 Received byte = 86'
UVVM: ID_BFM 11801825.2 ns TB seq. uart_receive()=> x"87". 'data received'
UVVM: ID_POS_ACK 11806160.0 ns TB seq. check_value() => OK, for slv x"87"'. 'Transmit byte = 87 Received byte = 87'
UVVM: ID_BFM 11888635.2 ns TB seq. uart_receive()=> x"88". 'data received'
UVVM: ID_POS_ACK 11892970.0 ns TB seq. check_value() => OK, for slv x"88"'. 'Transmit byte = 88 Received byte = 88'
UVVM: ID_BFM 11975445.2 ns TB seq. uart_receive()=> x"89". 'data received'
UVVM: ID_POS_ACK 11979780.0 ns TB seq. check_value() => OK, for slv x"89"'. 'Transmit byte = 89 Received byte = 89'
UVVM: ID_BFM 12062255.2 ns TB seq. uart_receive()=> x"8A". 'data received'
UVVM: ID_POS_ACK 12066590.0 ns TB seq. check_value() => OK, for slv x"8A"'. 'Transmit byte = 8A Received byte = 8A'
UVVM: ID_BFM 12149065.2 ns TB seq. uart_receive()=> x"8B". 'data received'
UVVM: ID_POS_ACK 12153400.0 ns TB seq. check_value() => OK, for slv x"8B"'. 'Transmit byte = 8B Received byte = 8B'
UVVM: ID_BFM 12235875.2 ns TB seq. uart_receive()=> x"8C". 'data received'
UVVM: ID_POS_ACK 12240210.0 ns TB seq. check_value() => OK, for slv x"8C"'. 'Transmit byte = 8C Received byte = 8C'
UVVM: ID_BFM 12322685.2 ns TB seq. uart_receive()=> x"8D". 'data received'
UVVM: ID_POS_ACK 12327020.0 ns TB seq. check_value() => OK, for slv x"8D"'. 'Transmit byte = 8D Received byte = 8D'
UVVM: ID_BFM 12409495.2 ns TB seq. uart_receive()=> x"8E". 'data received'
UVVM: ID_POS_ACK 12413830.0 ns TB seq. check_value() => OK, for slv x"8E"'. 'Transmit byte = 8E Received byte = 8E'
UVVM: ID_BFM 12496305.2 ns TB seq. uart_receive()=> x"8F". 'data received'
UVVM: ID_POS_ACK 12500640.0 ns TB seq. check_value() => OK, for slv x"8F"'. 'Transmit byte = 8F Received byte = 8F'
UVVM: ID_BFM 12583115.2 ns TB seq. uart_receive()=> x"90". 'data received'
UVVM: ID_POS_ACK 12587450.0 ns TB seq. check_value() => OK, for slv x"90"'. 'Transmit byte = 90 Received byte = 90'
UVVM: ID_BFM 12669925.2 ns TB seq. uart_receive()=> x"91". 'data received'
UVVM: ID_POS_ACK 12674260.0 ns TB seq. check_value() => OK, for slv x"91"'. 'Transmit byte = 91 Received byte = 91'
UVVM: ID_BFM 12756735.2 ns TB seq. uart_receive()=> x"92". 'data received'
UVVM: ID_POS_ACK 12761070.0 ns TB seq. check_value() => OK, for slv x"92"'. 'Transmit byte = 92 Received byte = 92'
UVVM: ID_BFM 12843545.2 ns TB seq. uart_receive()=> x"93". 'data received'
UVVM: ID_POS_ACK 12847880.0 ns TB seq. check_value() => OK, for slv x"93"'. 'Transmit byte = 93 Received byte = 93'
UVVM: ID_BFM 12930355.2 ns TB seq. uart_receive()=> x"94". 'data received'
UVVM: ID_POS_ACK 12934690.0 ns TB seq. check_value() => OK, for slv x"94"'. 'Transmit byte = 94 Received byte = 94'
UVVM: ID_BFM 13017165.2 ns TB seq. uart_receive()=> x"95". 'data received'
UVVM: ID_POS_ACK 13021500.0 ns TB seq. check_value() => OK, for slv x"95"'. 'Transmit byte = 95 Received byte = 95'
UVVM: ID_BFM 13103975.2 ns TB seq. uart_receive()=> x"96". 'data received'
UVVM: ID_POS_ACK 13108310.0 ns TB seq. check_value() => OK, for slv x"96"'. 'Transmit byte = 96 Received byte = 96'
UVVM: ID_BFM 13190785.2 ns TB seq. uart_receive()=> x"97". 'data received'
UVVM: ID_POS_ACK 13195120.0 ns TB seq. check_value() => OK, for slv x"97"'. 'Transmit byte = 97 Received byte = 97'
UVVM: ID_BFM 13277595.2 ns TB seq. uart_receive()=> x"98". 'data received'
UVVM: ID_POS_ACK 13281930.0 ns TB seq. check_value() => OK, for slv x"98"'. 'Transmit byte = 98 Received byte = 98'
UVVM: ID_BFM 13364405.2 ns TB seq. uart_receive()=> x"99". 'data received'
UVVM: ID_POS_ACK 13368740.0 ns TB seq. check_value() => OK, for slv x"99"'. 'Transmit byte = 99 Received byte = 99'
UVVM: ID_BFM 13451215.2 ns TB seq. uart_receive()=> x"9A". 'data received'
UVVM: ID_POS_ACK 13455550.0 ns TB seq. check_value() => OK, for slv x"9A"'. 'Transmit byte = 9A Received byte = 9A'
UVVM: ID_BFM 13538025.2 ns TB seq. uart_receive()=> x"9B". 'data received'
UVVM: ID_POS_ACK 13542360.0 ns TB seq. check_value() => OK, for slv x"9B"'. 'Transmit byte = 9B Received byte = 9B'
UVVM: ID_BFM 13624835.2 ns TB seq. uart_receive()=> x"9C". 'data received'
UVVM: ID_POS_ACK 13629170.0 ns TB seq. check_value() => OK, for slv x"9C"'. 'Transmit byte = 9C Received byte = 9C'
UVVM: ID_BFM 13711645.2 ns TB seq. uart_receive()=> x"9D". 'data received'
UVVM: ID_POS_ACK 13715980.0 ns TB seq. check_value() => OK, for slv x"9D"'. 'Transmit byte = 9D Received byte = 9D'
UVVM: ID_BFM 13798455.2 ns TB seq. uart_receive()=> x"9E". 'data received'
UVVM: ID_POS_ACK 13802790.0 ns TB seq. check_value() => OK, for slv x"9E"'. 'Transmit byte = 9E Received byte = 9E'
UVVM: ID_BFM 13885265.2 ns TB seq. uart_receive()=> x"9F". 'data received'
UVVM: ID_POS_ACK 13889600.0 ns TB seq. check_value() => OK, for slv x"9F"'. 'Transmit byte = 9F Received byte = 9F'
UVVM: ID_BFM 13972075.2 ns TB seq. uart_receive()=> x"A0". 'data received'
UVVM: ID_POS_ACK 13976410.0 ns TB seq. check_value() => OK, for slv x"A0"'. 'Transmit byte = A0 Received byte = A0'
UVVM: ID_BFM 14058885.2 ns TB seq. uart_receive()=> x"A1". 'data received'
UVVM: ID_POS_ACK 14063220.0 ns TB seq. check_value() => OK, for slv x"A1"'. 'Transmit byte = A1 Received byte = A1'
UVVM: ID_BFM 14145695.2 ns TB seq. uart_receive()=> x"A2". 'data received'
UVVM: ID_POS_ACK 14150030.0 ns TB seq. check_value() => OK, for slv x"A2"'. 'Transmit byte = A2 Received byte = A2'
UVVM: ID_BFM 14232505.2 ns TB seq. uart_receive()=> x"A3". 'data received'
UVVM: ID_POS_ACK 14236840.0 ns TB seq. check_value() => OK, for slv x"A3"'. 'Transmit byte = A3 Received byte = A3'
UVVM: ID_BFM 14319315.2 ns TB seq. uart_receive()=> x"A4". 'data received'
UVVM: ID_POS_ACK 14323650.0 ns TB seq. check_value() => OK, for slv x"A4"'. 'Transmit byte = A4 Received byte = A4'
UVVM: ID_BFM 14406125.2 ns TB seq. uart_receive()=> x"A5". 'data received'
UVVM: ID_POS_ACK 14410460.0 ns TB seq. check_value() => OK, for slv x"A5"'. 'Transmit byte = A5 Received byte = A5'
UVVM: ID_BFM 14492935.2 ns TB seq. uart_receive()=> x"A6". 'data received'
UVVM: ID_POS_ACK 14497270.0 ns TB seq. check_value() => OK, for slv x"A6"'. 'Transmit byte = A6 Received byte = A6'
UVVM: ID_BFM 14579745.2 ns TB seq. uart_receive()=> x"A7". 'data received'
UVVM: ID_POS_ACK 14584080.0 ns TB seq. check_value() => OK, for slv x"A7"'. 'Transmit byte = A7 Received byte = A7'
UVVM: ID_BFM 14666555.2 ns TB seq. uart_receive()=> x"A8". 'data received'
UVVM: ID_POS_ACK 14670890.0 ns TB seq. check_value() => OK, for slv x"A8"'. 'Transmit byte = A8 Received byte = A8'
UVVM: ID_BFM 14753365.2 ns TB seq. uart_receive()=> x"A9". 'data received'
UVVM: ID_POS_ACK 14757700.0 ns TB seq. check_value() => OK, for slv x"A9"'. 'Transmit byte = A9 Received byte = A9'
UVVM: ID_BFM 14840175.2 ns TB seq. uart_receive()=> x"AA". 'data received'
UVVM: ID_POS_ACK 14844510.0 ns TB seq. check_value() => OK, for slv x"AA"'. 'Transmit byte = AA Received byte = AA'
UVVM: ID_BFM 14926985.2 ns TB seq. uart_receive()=> x"AB". 'data received'
UVVM: ID_POS_ACK 14931320.0 ns TB seq. check_value() => OK, for slv x"AB"'. 'Transmit byte = AB Received byte = AB'
UVVM: ID_BFM 15013795.2 ns TB seq. uart_receive()=> x"AC". 'data received'
UVVM: ID_POS_ACK 15018130.0 ns TB seq. check_value() => OK, for slv x"AC"'. 'Transmit byte = AC Received byte = AC'
UVVM: ID_BFM 15100605.2 ns TB seq. uart_receive()=> x"AD". 'data received'
UVVM: ID_POS_ACK 15104940.0 ns TB seq. check_value() => OK, for slv x"AD"'. 'Transmit byte = AD Received byte = AD'
UVVM: ID_BFM 15187415.2 ns TB seq. uart_receive()=> x"AE". 'data received'
UVVM: ID_POS_ACK 15191750.0 ns TB seq. check_value() => OK, for slv x"AE"'. 'Transmit byte = AE Received byte = AE'
UVVM: ID_BFM 15274225.2 ns TB seq. uart_receive()=> x"AF". 'data received'
UVVM: ID_POS_ACK 15278560.0 ns TB seq. check_value() => OK, for slv x"AF"'. 'Transmit byte = AF Received byte = AF'
UVVM: ID_BFM 15361035.2 ns TB seq. uart_receive()=> x"B0". 'data received'
UVVM: ID_POS_ACK 15365370.0 ns TB seq. check_value() => OK, for slv x"B0"'. 'Transmit byte = B0 Received byte = B0'
UVVM: ID_BFM 15447845.2 ns TB seq. uart_receive()=> x"B1". 'data received'
UVVM: ID_POS_ACK 15452180.0 ns TB seq. check_value() => OK, for slv x"B1"'. 'Transmit byte = B1 Received byte = B1'
UVVM: ID_BFM 15534655.2 ns TB seq. uart_receive()=> x"B2". 'data received'
UVVM: ID_POS_ACK 15538990.0 ns TB seq. check_value() => OK, for slv x"B2"'. 'Transmit byte = B2 Received byte = B2'
UVVM: ID_BFM 15621465.2 ns TB seq. uart_receive()=> x"B3". 'data received'
UVVM: ID_POS_ACK 15625800.0 ns TB seq. check_value() => OK, for slv x"B3"'. 'Transmit byte = B3 Received byte = B3'
UVVM: ID_BFM 15708275.2 ns TB seq. uart_receive()=> x"B4". 'data received'
UVVM: ID_POS_ACK 15712610.0 ns TB seq. check_value() => OK, for slv x"B4"'. 'Transmit byte = B4 Received byte = B4'
UVVM: ID_BFM 15795085.2 ns TB seq. uart_receive()=> x"B5". 'data received'
UVVM: ID_POS_ACK 15799420.0 ns TB seq. check_value() => OK, for slv x"B5"'. 'Transmit byte = B5 Received byte = B5'
UVVM: ID_BFM 15881895.2 ns TB seq. uart_receive()=> x"B6". 'data received'
UVVM: ID_POS_ACK 15886230.0 ns TB seq. check_value() => OK, for slv x"B6"'. 'Transmit byte = B6 Received byte = B6'
UVVM: ID_BFM 15968705.2 ns TB seq. uart_receive()=> x"B7". 'data received'
UVVM: ID_POS_ACK 15973040.0 ns TB seq. check_value() => OK, for slv x"B7"'. 'Transmit byte = B7 Received byte = B7'
UVVM: ID_BFM 16055515.2 ns TB seq. uart_receive()=> x"B8". 'data received'
UVVM: ID_POS_ACK 16059850.0 ns TB seq. check_value() => OK, for slv x"B8"'. 'Transmit byte = B8 Received byte = B8'
UVVM: ID_BFM 16142325.2 ns TB seq. uart_receive()=> x"B9". 'data received'
UVVM: ID_POS_ACK 16146660.0 ns TB seq. check_value() => OK, for slv x"B9"'. 'Transmit byte = B9 Received byte = B9'
UVVM: ID_BFM 16229135.2 ns TB seq. uart_receive()=> x"BA". 'data received'
UVVM: ID_POS_ACK 16233470.0 ns TB seq. check_value() => OK, for slv x"BA"'. 'Transmit byte = BA Received byte = BA'
UVVM: ID_BFM 16315945.2 ns TB seq. uart_receive()=> x"BB". 'data received'
UVVM: ID_POS_ACK 16320280.0 ns TB seq. check_value() => OK, for slv x"BB"'. 'Transmit byte = BB Received byte = BB'
UVVM: ID_BFM 16402755.2 ns TB seq. uart_receive()=> x"BC". 'data received'
UVVM: ID_POS_ACK 16407090.0 ns TB seq. check_value() => OK, for slv x"BC"'. 'Transmit byte = BC Received byte = BC'
UVVM: ID_BFM 16489565.2 ns TB seq. uart_receive()=> x"BD". 'data received'
UVVM: ID_POS_ACK 16493900.0 ns TB seq. check_value() => OK, for slv x"BD"'. 'Transmit byte = BD Received byte = BD'
UVVM: ID_BFM 16576375.2 ns TB seq. uart_receive()=> x"BE". 'data received'
UVVM: ID_POS_ACK 16580710.0 ns TB seq. check_value() => OK, for slv x"BE"'. 'Transmit byte = BE Received byte = BE'
UVVM: ID_BFM 16663185.2 ns TB seq. uart_receive()=> x"BF". 'data received'
UVVM: ID_POS_ACK 16667520.0 ns TB seq. check_value() => OK, for slv x"BF"'. 'Transmit byte = BF Received byte = BF'
UVVM: ID_BFM 16749995.2 ns TB seq. uart_receive()=> x"C0". 'data received'
UVVM: ID_POS_ACK 16754330.0 ns TB seq. check_value() => OK, for slv x"C0"'. 'Transmit byte = C0 Received byte = C0'
UVVM: ID_BFM 16836805.2 ns TB seq. uart_receive()=> x"C1". 'data received'
UVVM: ID_POS_ACK 16841140.0 ns TB seq. check_value() => OK, for slv x"C1"'. 'Transmit byte = C1 Received byte = C1'
UVVM: ID_BFM 16923615.2 ns TB seq. uart_receive()=> x"C2". 'data received'
UVVM: ID_POS_ACK 16927950.0 ns TB seq. check_value() => OK, for slv x"C2"'. 'Transmit byte = C2 Received byte = C2'
UVVM: ID_BFM 17010425.2 ns TB seq. uart_receive()=> x"C3". 'data received'
UVVM: ID_POS_ACK 17014760.0 ns TB seq. check_value() => OK, for slv x"C3"'. 'Transmit byte = C3 Received byte = C3'
UVVM: ID_BFM 17097235.2 ns TB seq. uart_receive()=> x"C4". 'data received'
UVVM: ID_POS_ACK 17101570.0 ns TB seq. check_value() => OK, for slv x"C4"'. 'Transmit byte = C4 Received byte = C4'
UVVM: ID_BFM 17184045.2 ns TB seq. uart_receive()=> x"C5". 'data received'
UVVM: ID_POS_ACK 17188380.0 ns TB seq. check_value() => OK, for slv x"C5"'. 'Transmit byte = C5 Received byte = C5'
UVVM: ID_BFM 17270855.2 ns TB seq. uart_receive()=> x"C6". 'data received'
UVVM: ID_POS_ACK 17275190.0 ns TB seq. check_value() => OK, for slv x"C6"'. 'Transmit byte = C6 Received byte = C6'
UVVM: ID_BFM 17357665.2 ns TB seq. uart_receive()=> x"C7". 'data received'
UVVM: ID_POS_ACK 17362000.0 ns TB seq. check_value() => OK, for slv x"C7"'. 'Transmit byte = C7 Received byte = C7'
UVVM: ID_BFM 17444475.2 ns TB seq. uart_receive()=> x"C8". 'data received'
UVVM: ID_POS_ACK 17448810.0 ns TB seq. check_value() => OK, for slv x"C8"'. 'Transmit byte = C8 Received byte = C8'
UVVM: ID_BFM 17531285.2 ns TB seq. uart_receive()=> x"C9". 'data received'
UVVM: ID_POS_ACK 17535620.0 ns TB seq. check_value() => OK, for slv x"C9"'. 'Transmit byte = C9 Received byte = C9'
UVVM: ID_BFM 17618095.2 ns TB seq. uart_receive()=> x"CA". 'data received'
UVVM: ID_POS_ACK 17622430.0 ns TB seq. check_value() => OK, for slv x"CA"'. 'Transmit byte = CA Received byte = CA'
UVVM: ID_BFM 17704905.2 ns TB seq. uart_receive()=> x"CB". 'data received'
UVVM: ID_POS_ACK 17709240.0 ns TB seq. check_value() => OK, for slv x"CB"'. 'Transmit byte = CB Received byte = CB'
UVVM: ID_BFM 17791715.2 ns TB seq. uart_receive()=> x"CC". 'data received'
UVVM: ID_POS_ACK 17796050.0 ns TB seq. check_value() => OK, for slv x"CC"'. 'Transmit byte = CC Received byte = CC'
UVVM: ID_BFM 17878525.2 ns TB seq. uart_receive()=> x"CD". 'data received'
UVVM: ID_POS_ACK 17882860.0 ns TB seq. check_value() => OK, for slv x"CD"'. 'Transmit byte = CD Received byte = CD'
UVVM: ID_BFM 17965335.2 ns TB seq. uart_receive()=> x"CE". 'data received'
UVVM: ID_POS_ACK 17969670.0 ns TB seq. check_value() => OK, for slv x"CE"'. 'Transmit byte = CE Received byte = CE'
UVVM: ID_BFM 18052145.2 ns TB seq. uart_receive()=> x"CF". 'data received'
UVVM: ID_POS_ACK 18056480.0 ns TB seq. check_value() => OK, for slv x"CF"'. 'Transmit byte = CF Received byte = CF'
UVVM: ID_BFM 18138955.2 ns TB seq. uart_receive()=> x"D0". 'data received'
UVVM: ID_POS_ACK 18143290.0 ns TB seq. check_value() => OK, for slv x"D0"'. 'Transmit byte = D0 Received byte = D0'
UVVM: ID_BFM 18225765.2 ns TB seq. uart_receive()=> x"D1". 'data received'
UVVM: ID_POS_ACK 18230100.0 ns TB seq. check_value() => OK, for slv x"D1"'. 'Transmit byte = D1 Received byte = D1'
UVVM: ID_BFM 18312575.2 ns TB seq. uart_receive()=> x"D2". 'data received'
UVVM: ID_POS_ACK 18316910.0 ns TB seq. check_value() => OK, for slv x"D2"'. 'Transmit byte = D2 Received byte = D2'
UVVM: ID_BFM 18399385.2 ns TB seq. uart_receive()=> x"D3". 'data received'
UVVM: ID_POS_ACK 18403720.0 ns TB seq. check_value() => OK, for slv x"D3"'. 'Transmit byte = D3 Received byte = D3'
UVVM: ID_BFM 18486195.2 ns TB seq. uart_receive()=> x"D4". 'data received'
UVVM: ID_POS_ACK 18490530.0 ns TB seq. check_value() => OK, for slv x"D4"'. 'Transmit byte = D4 Received byte = D4'
UVVM: ID_BFM 18573005.2 ns TB seq. uart_receive()=> x"D5". 'data received'
UVVM: ID_POS_ACK 18577340.0 ns TB seq. check_value() => OK, for slv x"D5"'. 'Transmit byte = D5 Received byte = D5'
UVVM: ID_BFM 18659815.2 ns TB seq. uart_receive()=> x"D6". 'data received'
UVVM: ID_POS_ACK 18664150.0 ns TB seq. check_value() => OK, for slv x"D6"'. 'Transmit byte = D6 Received byte = D6'
UVVM: ID_BFM 18746625.2 ns TB seq. uart_receive()=> x"D7". 'data received'
UVVM: ID_POS_ACK 18750960.0 ns TB seq. check_value() => OK, for slv x"D7"'. 'Transmit byte = D7 Received byte = D7'
UVVM: ID_BFM 18833435.2 ns TB seq. uart_receive()=> x"D8". 'data received'
UVVM: ID_POS_ACK 18837770.0 ns TB seq. check_value() => OK, for slv x"D8"'. 'Transmit byte = D8 Received byte = D8'
UVVM: ID_BFM 18920245.2 ns TB seq. uart_receive()=> x"D9". 'data received'
UVVM: ID_POS_ACK 18924580.0 ns TB seq. check_value() => OK, for slv x"D9"'. 'Transmit byte = D9 Received byte = D9'
UVVM: ID_BFM 19007055.2 ns TB seq. uart_receive()=> x"DA". 'data received'
UVVM: ID_POS_ACK 19011390.0 ns TB seq. check_value() => OK, for slv x"DA"'. 'Transmit byte = DA Received byte = DA'
UVVM: ID_BFM 19093865.2 ns TB seq. uart_receive()=> x"DB". 'data received'
UVVM: ID_POS_ACK 19098200.0 ns TB seq. check_value() => OK, for slv x"DB"'. 'Transmit byte = DB Received byte = DB'
UVVM: ID_BFM 19180675.2 ns TB seq. uart_receive()=> x"DC". 'data received'
UVVM: ID_POS_ACK 19185010.0 ns TB seq. check_value() => OK, for slv x"DC"'. 'Transmit byte = DC Received byte = DC'
UVVM: ID_BFM 19267485.2 ns TB seq. uart_receive()=> x"DD". 'data received'
UVVM: ID_POS_ACK 19271820.0 ns TB seq. check_value() => OK, for slv x"DD"'. 'Transmit byte = DD Received byte = DD'
UVVM: ID_BFM 19354295.2 ns TB seq. uart_receive()=> x"DE". 'data received'
UVVM: ID_POS_ACK 19358630.0 ns TB seq. check_value() => OK, for slv x"DE"'. 'Transmit byte = DE Received byte = DE'
UVVM: ID_BFM 19441105.2 ns TB seq. uart_receive()=> x"DF". 'data received'
UVVM: ID_POS_ACK 19445440.0 ns TB seq. check_value() => OK, for slv x"DF"'. 'Transmit byte = DF Received byte = DF'
UVVM: ID_BFM 19527915.2 ns TB seq. uart_receive()=> x"E0". 'data received'
UVVM: ID_POS_ACK 19532250.0 ns TB seq. check_value() => OK, for slv x"E0"'. 'Transmit byte = E0 Received byte = E0'
UVVM: ID_BFM 19614725.2 ns TB seq. uart_receive()=> x"E1". 'data received'
UVVM: ID_POS_ACK 19619060.0 ns TB seq. check_value() => OK, for slv x"E1"'. 'Transmit byte = E1 Received byte = E1'
UVVM: ID_BFM 19701535.2 ns TB seq. uart_receive()=> x"E2". 'data received'
UVVM: ID_POS_ACK 19705870.0 ns TB seq. check_value() => OK, for slv x"E2"'. 'Transmit byte = E2 Received byte = E2'
UVVM: ID_BFM 19788345.2 ns TB seq. uart_receive()=> x"E3". 'data received'
UVVM: ID_POS_ACK 19792680.0 ns TB seq. check_value() => OK, for slv x"E3"'. 'Transmit byte = E3 Received byte = E3'
UVVM: ID_BFM 19875155.2 ns TB seq. uart_receive()=> x"E4". 'data received'
UVVM: ID_POS_ACK 19879490.0 ns TB seq. check_value() => OK, for slv x"E4"'. 'Transmit byte = E4 Received byte = E4'
UVVM: ID_BFM 19961965.2 ns TB seq. uart_receive()=> x"E5". 'data received'
UVVM: ID_POS_ACK 19966300.0 ns TB seq. check_value() => OK, for slv x"E5"'. 'Transmit byte = E5 Received byte = E5'
UVVM: ID_BFM 20048775.2 ns TB seq. uart_receive()=> x"E6". 'data received'
UVVM: ID_POS_ACK 20053110.0 ns TB seq. check_value() => OK, for slv x"E6"'. 'Transmit byte = E6 Received byte = E6'
UVVM: ID_BFM 20135585.2 ns TB seq. uart_receive()=> x"E7". 'data received'
UVVM: ID_POS_ACK 20139920.0 ns TB seq. check_value() => OK, for slv x"E7"'. 'Transmit byte = E7 Received byte = E7'
UVVM: ID_BFM 20222395.2 ns TB seq. uart_receive()=> x"E8". 'data received'
UVVM: ID_POS_ACK 20226730.0 ns TB seq. check_value() => OK, for slv x"E8"'. 'Transmit byte = E8 Received byte = E8'
UVVM: ID_BFM 20309205.2 ns TB seq. uart_receive()=> x"E9". 'data received'
UVVM: ID_POS_ACK 20313540.0 ns TB seq. check_value() => OK, for slv x"E9"'. 'Transmit byte = E9 Received byte = E9'
UVVM: ID_BFM 20396015.2 ns TB seq. uart_receive()=> x"EA". 'data received'
UVVM: ID_POS_ACK 20400350.0 ns TB seq. check_value() => OK, for slv x"EA"'. 'Transmit byte = EA Received byte = EA'
UVVM: ID_BFM 20482825.2 ns TB seq. uart_receive()=> x"EB". 'data received'
UVVM: ID_POS_ACK 20487160.0 ns TB seq. check_value() => OK, for slv x"EB"'. 'Transmit byte = EB Received byte = EB'
UVVM: ID_BFM 20569635.2 ns TB seq. uart_receive()=> x"EC". 'data received'
UVVM: ID_POS_ACK 20573970.0 ns TB seq. check_value() => OK, for slv x"EC"'. 'Transmit byte = EC Received byte = EC'
UVVM: ID_BFM 20656445.2 ns TB seq. uart_receive()=> x"ED". 'data received'
UVVM: ID_POS_ACK 20660780.0 ns TB seq. check_value() => OK, for slv x"ED"'. 'Transmit byte = ED Received byte = ED'
UVVM: ID_BFM 20743255.2 ns TB seq. uart_receive()=> x"EE". 'data received'
UVVM: ID_POS_ACK 20747590.0 ns TB seq. check_value() => OK, for slv x"EE"'. 'Transmit byte = EE Received byte = EE'
UVVM: ID_BFM 20830065.2 ns TB seq. uart_receive()=> x"EF". 'data received'
UVVM: ID_POS_ACK 20834400.0 ns TB seq. check_value() => OK, for slv x"EF"'. 'Transmit byte = EF Received byte = EF'
UVVM: ID_BFM 20916875.2 ns TB seq. uart_receive()=> x"F0". 'data received'
UVVM: ID_POS_ACK 20921210.0 ns TB seq. check_value() => OK, for slv x"F0"'. 'Transmit byte = F0 Received byte = F0'
UVVM: ID_BFM 21003685.2 ns TB seq. uart_receive()=> x"F1". 'data received'
UVVM: ID_POS_ACK 21008020.0 ns TB seq. check_value() => OK, for slv x"F1"'. 'Transmit byte = F1 Received byte = F1'
UVVM: ID_BFM 21090495.2 ns TB seq. uart_receive()=> x"F2". 'data received'
UVVM: ID_POS_ACK 21094830.0 ns TB seq. check_value() => OK, for slv x"F2"'. 'Transmit byte = F2 Received byte = F2'
UVVM: ID_BFM 21177305.2 ns TB seq. uart_receive()=> x"F3". 'data received'
UVVM: ID_POS_ACK 21181640.0 ns TB seq. check_value() => OK, for slv x"F3"'. 'Transmit byte = F3 Received byte = F3'
UVVM: ID_BFM 21264115.2 ns TB seq. uart_receive()=> x"F4". 'data received'
UVVM: ID_POS_ACK 21268450.0 ns TB seq. check_value() => OK, for slv x"F4"'. 'Transmit byte = F4 Received byte = F4'
UVVM: ID_BFM 21350925.2 ns TB seq. uart_receive()=> x"F5". 'data received'
UVVM: ID_POS_ACK 21355260.0 ns TB seq. check_value() => OK, for slv x"F5"'. 'Transmit byte = F5 Received byte = F5'
UVVM: ID_BFM 21437735.2 ns TB seq. uart_receive()=> x"F6". 'data received'
UVVM: ID_POS_ACK 21442070.0 ns TB seq. check_value() => OK, for slv x"F6"'. 'Transmit byte = F6 Received byte = F6'
UVVM: ID_BFM 21524545.2 ns TB seq. uart_receive()=> x"F7". 'data received'
UVVM: ID_POS_ACK 21528880.0 ns TB seq. check_value() => OK, for slv x"F7"'. 'Transmit byte = F7 Received byte = F7'
UVVM: ID_BFM 21611355.2 ns TB seq. uart_receive()=> x"F8". 'data received'
UVVM: ID_POS_ACK 21615690.0 ns TB seq. check_value() => OK, for slv x"F8"'. 'Transmit byte = F8 Received byte = F8'
UVVM: ID_BFM 21698165.2 ns TB seq. uart_receive()=> x"F9". 'data received'
UVVM: ID_POS_ACK 21702500.0 ns TB seq. check_value() => OK, for slv x"F9"'. 'Transmit byte = F9 Received byte = F9'
UVVM: ID_BFM 21784975.2 ns TB seq. uart_receive()=> x"FA". 'data received'
UVVM: ID_POS_ACK 21789310.0 ns TB seq. check_value() => OK, for slv x"FA"'. 'Transmit byte = FA Received byte = FA'
UVVM: ID_BFM 21871785.2 ns TB seq. uart_receive()=> x"FB". 'data received'
UVVM: ID_POS_ACK 21876120.0 ns TB seq. check_value() => OK, for slv x"FB"'. 'Transmit byte = FB Received byte = FB'
UVVM: ID_BFM 21958595.2 ns TB seq. uart_receive()=> x"FC". 'data received'
UVVM: ID_POS_ACK 21962930.0 ns TB seq. check_value() => OK, for slv x"FC"'. 'Transmit byte = FC Received byte = FC'
UVVM: ID_BFM 22045405.2 ns TB seq. uart_receive()=> x"FD". 'data received'
UVVM: ID_POS_ACK 22049740.0 ns TB seq. check_value() => OK, for slv x"FD"'. 'Transmit byte = FD Received byte = FD'
UVVM: ID_BFM 22132215.2 ns TB seq. uart_receive()=> x"FE". 'data received'
UVVM: ID_POS_ACK 22136550.0 ns TB seq. check_value() => OK, for slv x"FE"'. 'Transmit byte = FE Received byte = FE'
UVVM: ID_BFM 22219025.2 ns TB seq. uart_receive()=> x"FF". 'data received'
UVVM: ID_POS_ACK 22223360.0 ns TB seq. check_value() => OK, for slv x"FF"'. 'Transmit byte = FF Received byte = FF'
UVVM:
UVVM: ====================================================================================================================================================================
UVVM: *** FINAL SUMMARY OF ALL ALERTS ***
UVVM: ====================================================================================================================================================================
UVVM: REGARDED EXPECTED IGNORED Comment?
UVVM: NOTE : 0 0 0 ok
UVVM: TB_NOTE : 0 0 0 ok
UVVM: WARNING : 0 0 0 ok
UVVM: TB_WARNING : 1 0 0 *** TB_WARNING ***
UVVM: MANUAL_CHECK : 0 0 0 ok
UVVM: ERROR : 0 0 0 ok
UVVM: TB_ERROR : 0 0 0 ok
UVVM: FAILURE : 0 0 0 ok
UVVM: TB_FAILURE : 0 0 0 ok
UVVM: ====================================================================================================================================================================
UVVM: >> Simulation SUCCESS: No mismatch between counted and expected serious alerts
UVVM: ====================================================================================================================================================================
UVVM:
UVVM:
UVVM:
UVVM:
UVVM: ID_LOG_HDR 22224360.0 ns TB seq. SIMULATION COMPLETED
UVVM: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Therefore, it seems the uart_tx module works correctly. I wanted to add a error injection. So I add a wrong desired output check by adding the following lines to the testbench code:
wait for 10*c_clkperiod;
din_i <= CONV_STD_LOGIC_VECTOR(55,8);
tx_start_i <= '1';
uart_receive(
recv_byte, -- data_value
"data received", -- msg
tx_o, -- rx
terminate_loop, -- terminate_loop
uart_bfm_config, -- config
C_SCOPE, -- scope
shared_msg_id_panel, -- msg_id_panel
"" -- ext_proc_call
);
wait for c_clkperiod;
tx_start_i <= '0';
wait until rising_edge(tx_done_tick_o);
check_value(CONV_STD_LOGIC_VECTOR(54,8), recv_byte, ERROR, "Transmit byte = " & to_string(din_i,HEX) & " Received byte = " & to_string(recv_byte,HEX));
wait for 1 ps;
I transmit 55 but check for the value of 54. This time Modelsim stopped and gave the output:
# UVVM: ID_BFM 22305935.2 ns TB seq. uart_receive()=> x"37". 'data received'
# UVVM:
# UVVM: =========================================================================================================================================================================
# UVVM: *** ERROR #1 ***
# UVVM: 22310270 ns TB seq.
# UVVM: check_value() => Failed. slv Was x"36". Expected x"37".
# UVVM: Transmit byte = 37 Received byte = 37
# UVVM:
# UVVM: Simulator has been paused as requested after 1 ERROR
# UVVM: *** To find the root cause of this alert, step out the HDL calling stack in your simulator. ***
# UVVM: *** For example, step out until you reach the call from the test sequencer. ***
# UVVM: =========================================================================================================================================================================
# UVVM:
# UVVM:
# ** Note: stop
# Time: 22310270 ns Iteration: 2 Instance: /tb_uart_tx
And here is the data from _Alert.txt
UVVM:
UVVM: *** TB_WARNING #1 ***
UVVM: 0.001 ns (Util buried)
UVVM: Time stamp has been truncated to 1 decimal(s) in the next log message - settable in adaptations_pkg. (Actual time stamp has more decimals than
UVVM: displayed)
UVVM: This alert is shown once only.
UVVM:
UVVM:
UVVM: =========================================================================================================================================================================
UVVM: *** ERROR #1 ***
UVVM: 22310270 ns TB seq.
UVVM: check_value() => Failed. slv Was x"36". Expected x"37".
UVVM: Transmit byte = 37 Received byte = 37
UVVM:
UVVM: Simulator has been paused as requested after 1 ERROR
UVVM: *** To find the root cause of this alert, step out the HDL calling stack in your simulator. ***
UVVM: *** For example, step out until you reach the call from the test sequencer. ***
UVVM: =========================================================================================================================================================================
In this post, I showed how to compile UVVM for Modelsim. I created a simple testbench file for uart_tx module. The testbench transmits 256 bytes of uart data. I utilized uart_receive and check_value functions to verify if the received bytes are correct. This was the first example I coverd using UVVM library. If you are using first time UVVM, it will take some time to learn the functions and types defined in the library. I hope learning curve will be speedy for me as I understanding the VHDL code is easier for me in UVVM. Also the code is open-source, you can learn easily by just reading the function implementations and try to using them in testbench files.
I plan to show more examples using UVVM in the near future.
Regards,
Mehmet Burak AYKENAR
You can connect me via LinledIn: Just sent me an invitation