The compiled program can be executed by passing in as arguments the Or1ksim configuration file and the OpenRISC 1000 binary. The result is shown in Figure 5.3.
$ ./sysc-models/logger/logger ../simple.cfg progs-or32/logger-test SystemC 2.2.0 --- May 16 2008 10:30:46 Copyright (c) 1996-2006 by all Contributors ALL RIGHTS RESERVED ... <Or1ksim initialization messages> Writing byte 0xa5 to address 0x090000000 Logging Command: Write Address: 0x90000000 Byte enables: 0x000000ff Data: 0x003f54a5 Writing half word 0xbeef to address 0x090000002 Logging Command: Write Address: 0x90000000 Byte enables: 0xffff0000 Data: 0xefbe8fc4 ... <More test program output> Read half word 0x0FFFF from address 0x090000002 Logging Command: Read Address: 0x90000004 Byte enables: 0xffffffff Read full word 0x028372F09 from address 0x090000004 exit(0) @reset : cycles 0, insn #0 @exit : cycles 33297, insn #16581 diff : cycles 33297, insn #16581 $
Figure 5.3. Output from the logger test of the Or1ksim wrapper module.
Each access from the application program generates the expected transactional access. All accesses are 32 bits wide, but for byte and half-word access the relevant bytes are masked off. The reads return meaningless values (the logger was not designed to package a return value), but in each case the value returned fits in the size requested as expected.
Note | |
---|---|
The Or1ksim ISS can be configured to model little-endian architectures. The TLM 2.0 payloads are always packed with data using the endianness of the model. If the exercise were repeated with a little-endian version of Or1ksim the addresses of the access would be unchanged (they are word aligned), but the byte enable masks for the byte and half word accesses would be inverted. |