Re: [patch][commit] Base address for hw-glue-probe-bus

Dave Brolley <[email protected]>
Newsgroups gmane.comp.emulators.sid.devel
Message-ID <[email protected]>
Frank Ch. Eigler wrote:

>Right, go ahead with your patch.  For the documentation of this new
>attribute though, please make a mention of the possibility of the
>probed device being multiply mapped.
>
>  
>
OK. I've committed the attached patch which adds the requested 
documentation and a correction to the code which ensures that 
base-address is also reflected in the out generated when the trace? 
attribute is set.

Dave
bus-probe1.patch.txt (text/plain, 6.1 KB)
Index: sid/component/glue/glue.cxx
===================================================================
RCS file: /cvs/src/src/sid/component/glue/glue.cxx,v
retrieving revision 1.13
diff -c -p -r1.13 glue.cxx
*** sid/component/glue/glue.cxx	29 Aug 2006 17:47:22 -0000	1.13
--- sid/component/glue/glue.cxx	29 Aug 2006 20:31:19 -0000
*************** probing_bus::writeAny(host_int_4 addr, D
*** 469,480 ****
        this->counter ++;
        if (this->counter >= this->prober->sample_interval)
  	{
  	  if (this->verbose_p)
  	    this->traceAccess (addr, data, code, s);
  
  	  this->counter = 0;
  	  // drive informational pins
! 	  this->prober->address_pin.drive (this->prober->base_address + addr);
  	  typename DataType::host_int_type d_host = data; // natural endianness
  	  host_int_8 d_wide(d_host); // widen
  	  this->prober->data_high_pin.drive ((d_wide >> 32) & 0xFFFFFFFF);
--- 469,481 ----
        this->counter ++;
        if (this->counter >= this->prober->sample_interval)
  	{
+ 	  addr += this->prober->base_address;
  	  if (this->verbose_p)
  	    this->traceAccess (addr, data, code, s);
  
  	  this->counter = 0;
  	  // drive informational pins
! 	  this->prober->address_pin.drive (addr);
  	  typename DataType::host_int_type d_host = data; // natural endianness
  	  host_int_8 d_wide(d_host); // widen
  	  this->prober->data_high_pin.drive ((d_wide >> 32) & 0xFFFFFFFF);
*************** probing_bus::readAny(host_int_4 addr, Da
*** 505,516 ****
        this->counter ++;
        if (this->counter >= this->prober->sample_interval)
  	{
  	  if (this->verbose_p)
  	    this->traceAccess (addr, data, code, s);
  
  	  this->counter = 0;
  	  // drive informational pins
! 	  this->prober->address_pin.drive (this->prober->base_address + addr);
  	  typename DataType::host_int_type d_host = data; // natural endianness
  	  host_int_8 d_wide(d_host); // widen
  	  this->prober->data_high_pin.drive ((d_wide >> 32) & 0xFFFFFFFF);
--- 506,518 ----
        this->counter ++;
        if (this->counter >= this->prober->sample_interval)
  	{
+ 	  addr += this->prober->base_address;
  	  if (this->verbose_p)
  	    this->traceAccess (addr, data, code, s);
  
  	  this->counter = 0;
  	  // drive informational pins
! 	  this->prober->address_pin.drive (addr);
  	  typename DataType::host_int_type d_host = data; // natural endianness
  	  host_int_8 d_wide(d_host); // widen
  	  this->prober->data_high_pin.drive ((d_wide >> 32) & 0xFFFFFFFF);
Index: sid/component/glue/hw-glue-probe-bus.xml
===================================================================
RCS file: /cvs/src/src/sid/component/glue/hw-glue-probe-bus.xml,v
retrieving revision 1.3
diff -c -p -r1.3 hw-glue-probe-bus.xml
*** sid/component/glue/hw-glue-probe-bus.xml	29 Aug 2006 17:47:22 -0000	1.3
--- sid/component/glue/hw-glue-probe-bus.xml	29 Aug 2006 20:31:19 -0000
***************
*** 18,24 ****
      <defpin name="type" direction="out" legalvalues="enum values" behaviors="bus traffic sampling" />
  
      <!-- attributes -->
!     <defattribute name="base-address" category="setting" legalvalues="numeric" defaultvalue="0" behaviors="bus traffic tracing" />
      <defattribute name="trace?" category="setting" legalvalues="boolean" defaultvalue="0" behaviors="bus traffic tracing" />
      <defattribute name="sample-interval" category="setting" legalvalues="numeric" defaultvalue="1" behaviors="bus traffic sampling" />
      <defattribute name="interval-counter" category="register" legalvalues="numeric" behaviors="bus traffic sampling" />
--- 18,24 ----
      <defpin name="type" direction="out" legalvalues="enum values" behaviors="bus traffic sampling" />
  
      <!-- attributes -->
!     <defattribute name="base-address" category="setting" legalvalues="numeric" defaultvalue="0" behaviors="bus traffic sampling" />
      <defattribute name="trace?" category="setting" legalvalues="boolean" defaultvalue="0" behaviors="bus traffic tracing" />
      <defattribute name="sample-interval" category="setting" legalvalues="numeric" defaultvalue="1" behaviors="bus traffic sampling" />
      <defattribute name="interval-counter" category="register" legalvalues="numeric" behaviors="bus traffic sampling" />
***************
*** 55,61 ****
  	  pins.  In sequence, the following output pins are driven:</p>
  	<ul>
  	  <li>
! 	    <name>address</name> - address parameter added to the value of the <attribute>base-address</attribute> attribute</li>
  	  <li>
  	    <name>data-high</name> - top 32 bits of bus data being read/written</li>
  	  <li>
--- 55,62 ----
  	  pins.  In sequence, the following output pins are driven:</p>
  	<ul>
  	  <li>
! 	    <name>address</name> - address parameter added to the value of the
!             <attribute>base-address</attribute> attribute</li>
  	  <li>
  	    <name>data-high</name> - top 32 bits of bus data being read/written</li>
  	  <li>
***************
*** 146,151 ****
--- 147,173 ----
      	<p>
  	  A statistics-gathering component could attach to the sampling output
  	  pins to maintain a picture of a program's memory access patterns.</p>
+ 
+         <p>
+           The <attribute>base-address</attribute> attribute should only be used if
+           the downstream component has a fixed address within the system. The
+           <attribute>base-address</attribute> attribute is not suitable for situations in
+           which more than one address range is mapped onto the <bus>upstream</bus> bus.</p>
+         <p>
+           Consider the example below in which a single hw-glue-probe-bus is used to trace
+           two address ranges.</p>
+ 
+ 	<code>	new hw-glue-probe-bus bus-prober
+ 	new SOME_KIND_OF_CPU cpu
+         new SOME_KIND_OF_TRANSPARENT_MAPPER probe-mapper
+         new SOME_KIND_OF_MAPPER mapper
+         connect-bus cpu insn-memory probe-mapper access-port
+         connect-bus probe-mapper [0-1023] bus-prober upstream
+         connect-bus probe-mapper [1024-2047] mapper access-port
+         connect-bus probe-mapper [2048-3071] bus-prober upstream
+         connect-bus bus-prober downstream mapper access-port
+         set bus-prober trace? 1</code>
+ 	
        </p>
      </p>
    </env>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.