Dear SimFlex Users,

We invite all of you to attend an upcoming SimFlex tutorial, which will 
be hosted at PACT 2008 this year (Oct 25 in Toronto, Canada). We 
encourage you to sign up soon at 
http://www.eecg.toronto.edu/pact/registration.html.  The tutorial will 
cover the SimFlex infrastructure in detail and how it achieves fast 
simulation turnaround by leveraging the SMARTS simulation sampling 
framework.  Attendees will be given the opportunity to develop hands-on 
experience with the infrastructure and will also be given a hands-on 
technology preview of ProtoFlex, which is our FPGA-accelerated 
functional simulation platform on the Berkeley Emulation Engine 2.  A 
more detailed description of the tutorial can be found at 
http://www.eecg.toronto.edu/pact/workshops.html.  See you there!

Regards,
Eric Chung
From venkat.nathan at gmail.com  Mon Oct  6 21:46:44 2008
From: venkat.nathan at gmail.com (Venkatanathan Annamalai)
List-Post: [email protected]
Date: Tue Oct  7 09:58:23 2008
Subject: [Simflex] finding opcode of an x86 instruction
Message-ID: <[email protected]>

Hi,
 I am new to simics and flexus. I am simulating an x86 architecture in
simics and my aim is to find the opcode of an instruction. I printed
the instruction opcode in "dispatchInstruction" function under
<flexus-home>/components/Execute/ExecuteImpl.cpp , but I get only 0 as
the opcode. I looked at the forums and the code-base and found that
reading x86-instruction-opcode is not supported in "SimicsTracer.hpp"
. Please guide me on how to proceed.

Thanks,
Venkat.
From evlachos at ece.cmu.edu  Tue Oct  7 13:02:39 2008
From: evlachos at ece.cmu.edu (Evangelos Vlachos)
List-Post: [email protected]
Date: Tue Oct  7 13:02:52 2008
Subject: [Simflex] finding opcode of an x86 instruction
In-Reply-To: <[email protected]>
References: <[email protected]>
Message-ID: <[email protected]>


Hi Venkat,

Flexus is mainly interested in memory references, and specifically 
in intruction fetch and data loads and stores. This information is 
provided by Simics automatically, without having us to identify what 
instructions access memory. So in general the opcode is not necessary.

x86 ISA has a variable size instruction word, so identifying the opcode is 
a little bit tricky, if you want to be done efficiently. Practically you 
will need an x86 decoder built in Flexus, which is quite a lot of work. If 
you decide to do so, then what you need to do is to read the actuall 
memory of the application where the instruction resides and perform the 
decoding. For example, check  components/InorderSimicsFeeder/SimicsTracer.hpp
line 622. There we want to see if the current x86 instruction is a 'hlt' 
instruction (although 'hlt' is not really an instruction, Simics will 
treat that as a NOP instruction). In this case, though, we know what the 
opcode is and we know that it is 1 byte long.
In general, if someone was interested to decode x86 instructions, this 
place is the right place to do so. After disassembling any information 
generated (e.g., opcode) will have to be added in the 
"ArchitecturalInstruction" object that it is also built in that place.

Alternatively, the easy way to get information about an instruction that 
has just been fetched is to ask Simics to perform the disassebly of the 
instruction. Check the documentation of Simics, and specifically
simics-reference-manual-public-all.pdf at page 265. There you will find 
SIM_disassemble(), which will give you a string representation of the 
instruction. I suspect though, that this way might be expensive in terms 
of execution time. Again, SimicsTracer.hpp lines 588 - 702 is where we 
handle instruction fetch. You want to add you code in there, where the 
instrance of the "ArchitecturalInstruction" object is built.

Please let us know if you have any other questions.

Regards,
Evangelos


On Tue, 7 Oct 2008, Venkatanathan Annamalai wrote:

> Hi,
> I am new to simics and flexus. I am simulating an x86 architecture in
> simics and my aim is to find the opcode of an instruction. I printed
> the instruction opcode in "dispatchInstruction" function under
> <flexus-home>/components/Execute/ExecuteImpl.cpp , but I get only 0 as
> the opcode. I looked at the forums and the code-base and found that
> reading x86-instruction-opcode is not supported in "SimicsTracer.hpp"
> . Please guide me on how to proceed.
>
> Thanks,
> Venkat.
> _______________________________________________
> SimFlex mailing list
> [email protected]
> https://sos.ece.cmu.edu/mailman/listinfo/simflex
> SimFlex web page: http://www.ece.cmu.edu/~simflex
>
From jason.zebchuk at gmail.com  Sun Oct 12 23:40:03 2008
From: jason.zebchuk at gmail.com (Jason Zebchuk)
List-Post: [email protected]
Date: Sun Oct 12 23:40:16 2008
Subject: [Simflex] undefined symbol caused by DBG_() statement
Message-ID: <[email protected]>

Hi guys,

I'm getting an error when I try to load a flexus module:

Error loading module 'flexus-VMTileCMP.OoO-v9-iface-gcc': Failed to load 
module 'flexus-VMTileCMP.OoO-v9-iface-gcc' 
('/home/apps/flexus/runs/zebchuk-empty/simics/x86-linux/lib/libflexus_VMTileCMP.OoO_v9_iface_gcc.so'):
 
"undefined symbol: _ZN5boost14dynamic_bitsetImSaImEE4nposE"



I can get rid of the error by commenting out all of the "DBG_()" 
statements in one of my .cpp files. There isn't anything fancy about the 
statements that should be causing the problem. Simply adding:

DBG_(Trace, ( << "Hello World!" ));

to the file causes the above error.

Interestingly, the same file has a number of "DBG_Assert()" statements 
that don't seem to cause any problems.

I figure I must be missing a header or something related to the debug 
system, but I have no idea what.

Do you have any suggestions? or can I just not have DBG_() statements in
this file?



Jason

Reply via email to