Adapted simple_system to demonstrate use of tlm_target by reference and
by ingeritance
This commit is contained in:
@ -19,18 +19,16 @@
|
||||
|
||||
#include <util/bit_field.h>
|
||||
#include <sysc/register.h>
|
||||
#include <sysc/tlmtarget.h>
|
||||
#include <sysc/utilities.h>
|
||||
#include <sysc/tlm_target.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
template<unsigned BUSWIDTH=32>
|
||||
class gpio_regs :
|
||||
public sc_core::sc_module,
|
||||
public sysc::tlm_target<BUSWIDTH>,
|
||||
public sysc::resetable
|
||||
{
|
||||
protected:
|
||||
{
|
||||
public:
|
||||
// storage declarations
|
||||
uint32_t r_value;
|
||||
|
||||
@ -86,17 +84,19 @@ protected:
|
||||
sysc::sc_register<uint32_t> out_xor;
|
||||
|
||||
gpio_regs(sc_core::sc_module_name nm);
|
||||
protected:
|
||||
sc_core::sc_time clk;
|
||||
|
||||
template<unsigned BUSWIDTH=32>
|
||||
void registerResources(sysc::tlm_target<BUSWIDTH>& target);
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// member functions
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<unsigned BUSWIDTH>
|
||||
gpio_regs<BUSWIDTH>::gpio_regs(sc_core::sc_module_name nm)
|
||||
inline sysc::gpio_regs::gpio_regs(sc_core::sc_module_name nm)
|
||||
: sc_core::sc_module(nm)
|
||||
, sysc::tlm_target<BUSWIDTH>(clk)
|
||||
, NAMED(value, r_value, 0, *this)
|
||||
, NAMED(input_en, r_input_en, 0, *this)
|
||||
, NAMED(output_en, r_output_en, 0, *this)
|
||||
@ -115,24 +115,27 @@ gpio_regs<BUSWIDTH>::gpio_regs(sc_core::sc_module_name nm)
|
||||
, NAMED(iof_sel, r_iof_sel, 0, *this)
|
||||
, NAMED(out_xor, r_out_xor, 0, *this)
|
||||
{
|
||||
this->socket_map.addEntry(&value, 0x0UL, 0x4UL);
|
||||
this->socket_map.addEntry(&input_en, 0x4UL, 0x4UL);
|
||||
this->socket_map.addEntry(&output_en, 0x8UL, 0x4UL);
|
||||
this->socket_map.addEntry(&port, 0xcUL, 0x4UL);
|
||||
this->socket_map.addEntry(&pue, 0x10UL, 0x4UL);
|
||||
this->socket_map.addEntry(&ds, 0x14UL, 0x4UL);
|
||||
this->socket_map.addEntry(&rise_ie, 0x18UL, 0x4UL);
|
||||
this->socket_map.addEntry(&rise_ip, 0x1cUL, 0x4UL);
|
||||
this->socket_map.addEntry(&fall_ie, 0x20UL, 0x4UL);
|
||||
this->socket_map.addEntry(&fall_ip, 0x24UL, 0x4UL);
|
||||
this->socket_map.addEntry(&high_ie, 0x28UL, 0x4UL);
|
||||
this->socket_map.addEntry(&high_ip, 0x2cUL, 0x4UL);
|
||||
this->socket_map.addEntry(&low_ie, 0x30UL, 0x4UL);
|
||||
this->socket_map.addEntry(&low_ip, 0x34UL, 0x4UL);
|
||||
this->socket_map.addEntry(&iof_en, 0x38UL, 0x4UL);
|
||||
this->socket_map.addEntry(&iof_sel, 0x3cUL, 0x4UL);
|
||||
this->socket_map.addEntry(&out_xor, 0x40UL, 0x4UL);
|
||||
}
|
||||
|
||||
|
||||
template<unsigned BUSWIDTH>
|
||||
inline void sysc::gpio_regs::registerResources(sysc::tlm_target<BUSWIDTH>& target) {
|
||||
target.addResource(value, 0x0UL, 0x4UL);
|
||||
target.addResource(input_en, 0x4UL, 0x4UL);
|
||||
target.addResource(output_en, 0x8UL, 0x4UL);
|
||||
target.addResource(port, 0xcUL, 0x4UL);
|
||||
target.addResource(pue, 0x10UL, 0x4UL);
|
||||
target.addResource(ds, 0x14UL, 0x4UL);
|
||||
target.addResource(rise_ie, 0x18UL, 0x4UL);
|
||||
target.addResource(rise_ip, 0x1cUL, 0x4UL);
|
||||
target.addResource(fall_ie, 0x20UL, 0x4UL);
|
||||
target.addResource(fall_ip, 0x24UL, 0x4UL);
|
||||
target.addResource(high_ie, 0x28UL, 0x4UL);
|
||||
target.addResource(high_ip, 0x2cUL, 0x4UL);
|
||||
target.addResource(low_ie, 0x30UL, 0x4UL);
|
||||
target.addResource(low_ip, 0x34UL, 0x4UL);
|
||||
target.addResource(iof_en, 0x38UL, 0x4UL);
|
||||
target.addResource(iof_sel, 0x3cUL, 0x4UL);
|
||||
target.addResource(out_xor, 0x40UL, 0x4UL);
|
||||
}
|
||||
|
||||
#endif // _GPIO_REGS_H_
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
#include <util/bit_field.h>
|
||||
#include <sysc/register.h>
|
||||
#include <sysc/tlmtarget.h>
|
||||
#include <sysc/utilities.h>
|
||||
#include <sysc/tlm_target.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
#include <util/bit_field.h>
|
||||
#include <sysc/register.h>
|
||||
#include <sysc/tlmtarget.h>
|
||||
#include <sysc/utilities.h>
|
||||
#include <sysc/tlm_target.h>
|
||||
|
||||
namespace sysc {
|
||||
|
||||
|
Reference in New Issue
Block a user