
This model is completely untimed. It executes the behavior of the design, and for that reason such models are useful in system verification.
The next stages will add timing to this model. To allow this to be demonstrated, add some logging to the UART and terminal to report the timing of reads and writes.
Edit the rxMethod in
UartSC, to print out the time when a
character is received from the terminal.
void
UartSC::rxMethod()
{
regs.rbr = rx.read();
sc_core::sc_time now = sc_core::sc_time_stamp();
cout << "Char " << (char)(regs.rbr) << " read at " << sc_time_stamp ()
<< endl;
set( regs.lsr, UART_LSR_DR ); // Mark data ready
genIntr( UART_IER_RBFI ); // Interrupt if enabled
} // rxMethod()
Similarly edit the rxMethod function in
TermSC, to print out the time when a
character is received from the UART.
void
TermSC::rxMethod()
{
xtermWrite( rx.read() ); // Write it to the screen
cout << "Char written at " << sc_time_stamp() << endl;
} // rxMethod()
In both cases the C++ iostream header will be
needed at the top of the file (UartSC.cpp and
TermSC.cpp), and the entities used will need to
be brought into the local namespace.
#include <iostream> using sc_core::sc_time_stamp; using std::cout; using std::endl;
![]() | Note |
|---|---|
For convenience these changes are already made in the files in the
distribution, but the two Once removed, the commenting should stay removed for all the future examples, since they all need to show timing details. |
The model can now be rerun as before, and will print out precise timing. The output is shown in Figure 7.6.
$ ./build/sysc-models/simple-soc simple.cfg progs_or32/uart-loop
SystemC 2.2.0 --- May 16 2008 10:30:46
Copyright (c) 1996-2006 by all Contributors
ALL RIGHTS RESERVED
... <Or1ksim initialization messages>
Char read at 0 s
Read: 'F'
Char written at 0 s
Char read at 0 s
Read: 'a'
Char written at 0 s
Char read at 0 s
Read: 'r'
... <Lots more output>
Figure 7.6. UART loop back program log output with timing annotation.
As can be seen all the reads and writes occur at time zero.
