ich mit der SystemC TLM Bibliothek arbeitete. Ich möchte eine Nutzlast mit zwei Ganzzahlen an ein Modul senden, das eine Operation für diese zwei Ganzzahlen ausführen wird. Meine Frage ist einfach, wie man die Nutzlast einrichtet und decodiert.SystemC Transfer Level Modellierung Extract zwei ganze Zahlen von tlm_generic_payload
Doulos vorgesehen Dokumentation sowohl auf die Einrichtung und Decodierung hier https://www.doulos.com/knowhow/systemc/tlm2/tutorial__1/
Setup-
tlm::tlm_command cmd = static_cast(rand() % 2);
if (cmd == tlm::TLM_WRITE_COMMAND) data = 0xFF000000 | i;
trans->set_command(cmd);
trans->set_address(i);
trans->set_data_ptr(reinterpret_cast<unsigned char*>(&data));
trans->set_data_length(4);
trans->set_streaming_width(4);
trans->set_byte_enable_ptr(0);
trans->set_dmi_allowed(false);
trans->set_response_status(tlm::TLM_INCOMPLETE_RESPONSE);
socket->b_transport(*trans, delay);
Decode
virtual void b_transport(tlm::tlm_generic_payload& trans, sc_time& delay)
{
tlm::tlm_command cmd = trans.get_command();
sc_dt::uint64 adr = trans.get_address()/4;
unsigned char* ptr = trans.get_data_ptr();
unsigned int len = trans.get_data_length();
unsigned char* byt = trans.get_byte_enable_ptr();
unsigned int wid = trans.get_streaming_width();
So ist es mir sieht aus wie Sie einen Zeiger auf eine Speicherstelle senden würde wo zwei Ganzzahlen geschrieben sind.
| ---------------------------------- int1 ---------- --------------- | ---------------------------------- --int2 ------------------------
| ptr + 0x0 | ptr + 0x (wid) | ptr + 0x (2 * wid) | ptr + 0x (3 * wid) | ptr + 0x (4 * wid) | ptr + 0x (5 * wid) | ptr + 0x (6 * wid) | ptr + 0x
---------- |
(7 * wid) |
ist meine Interpretation dieser Dokumentation korrekt?
Wie könnten Sie diese ersten 4 Speicherplätze [3: 0] erhalten und sie zu einem int32 kombinieren und wie könnten Sie die zweite 4 [7: 4] bekommen und in die zweite ganze Zahl verwandeln?
Im Allgemeinen sollten Sie High-Level-Bibliotheken wie SCML verwenden, die benutzerfreundlicher APIs auf dem rohen TLM-2.0 liefern. Generische Nutzdaten sind für die Interoperabilität von Werkzeugen ausgelegt, Endbenutzer sollten besser die vom EDA-Anbieter bereitgestellten High-Level-APIs verwenden. – random
ist SCML Open Source? wo sind die Include-Dateien in v2.3.2 –
Es kann von https://www.synopsys.com/cgi-bin/slcw/kits/reg.cgi heruntergeladen werden. Es gibt andere ähnliche Bibliotheken, zum Beispiel greenlib: https://github.com/GreenSocs/greenlib – random