From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GFnwW-0003Wz-Bz for qemu-devel@nongnu.org; Wed, 23 Aug 2006 04:18:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GFnwU-0003Vs-FS for qemu-devel@nongnu.org; Wed, 23 Aug 2006 04:18:31 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GFnwU-0003VZ-0M for qemu-devel@nongnu.org; Wed, 23 Aug 2006 04:18:30 -0400 Received: from [195.46.51.98] (helo=fra-del-02.spheriq.net) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.52) id 1GFo4G-0003Y8-5T for qemu-devel@nongnu.org; Wed, 23 Aug 2006 04:26:33 -0400 Received: from fra-out-03.spheriq.net (fra-out-03.spheriq.net [195.46.51.131]) by fra-del-02.spheriq.net with ESMTP id k7N8IO7n003246 for ; Wed, 23 Aug 2006 08:18:24 GMT Received: from fra-cus-01.spheriq.net (fra-cus-01.spheriq.net [195.46.51.37]) by fra-out-03.spheriq.net with ESMTP id k7N8ILug010920 for ; Wed, 23 Aug 2006 08:18:22 GMT Message-ID: <44EC0F49.8090904@laposte.net> Date: Wed, 23 Aug 2006 10:18:17 +0200 From: Nicolas SAUZEDE-NONST MIME-Version: 1.0 References: <44EAC199.7070509@st.com> In-Reply-To: Content-Type: multipart/mixed; boundary="------------060900040409080803030602" Subject: [Qemu-devel] systemc trial Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alessandro Corradi Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------060900040409080803030602 Content-Type: multipart/alternative; boundary="------------060303050101000209010707" --------------060303050101000209010707 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by fra-del-02.spheriq.net id k7N8IO7n003246 Hi Alessandro, Ah OK, I see, your project seems to be way more ambitious than mine :-) So my project may not help you as much as you could expect.. Maybe only the sysc/tcpip glue mechanism.. Anyway, attached is a tarball of my project, containing a patch against=20 qemu-snapshot-2006-07-23_23 (I can provide it if it fails to patch=20 against more recent versions) plus the directory related to sysc. See sysc/README for more info.. Will be interested by your return.. and also by your PCI/sysc=20 experiments also.. tell me if you manage to compile/run it (watch out the sysc signal trace=20 log which is generated) Can send me something from your project, just by curiosity ? :-) I would be particularly interested by other sysc/qemu glue mechanism,=20 and also to see if you managed to generate interrupts from sysc, and=20 handled within qemu guest OS... Good luck for your project, NS. ps: oops, I was not supposed to send my professional signature in the=20 mail I sent you (fwd to the ML), well nevermind, I'll use another mail=20 identity from now on.. :-) pps: I also fwd it to the ML, in order for other interested people to=20 have a look at it if anyone is interested.. Alessandro Corradi a =E9crit : > Hi Nicolas, > Thank you for reply! The "only" trouble is that I need to descrive it=20 > as a pci device. Taking the parallel port as an example is very=20 > usefull for simple hardware as you made. But I need some info for=20 > write my device into qemu, in particular the init function for pci=20 > device as the ne2000 (In init function of network card it set=20 > pci_conf, should I need to set up? And what arguments should I put in=20 > pci_register_io_region function?). > My emulated device for the moment need to run in i386 architeture so I=20 > have not to be completeness about cpu target etc... > Anyway I appreciate if you can send me your written device so I can=20 > see if it can help me! > > Thanks > > Ale > > 2006/8/22, Nicolas SAUZEDE: > > Hi Alessandro, > > Concerning your cosimulation problem, I may help a little bit, > because when you first posted on the qemu dev list about your sysc > project, > it motivated me to first learn about systemc (which I didn't know) > and to > start hacking qemu to connect them together. > > Well I must admit I'm pretty satisfied of the results, > I managed to build some small sysc dumb devices (gates, counters, > ram/buffers, fpu etc..) > (with a FIR filter in mind indeed), defined some sort of sysc writt= en > "interface" that offers a bus+signals to sysc, while connecting to > qemu > via a socket. > Within qemu, I created a parallel-like device (as you said on the m= l > recently) and so I can probe my device from within guest OS (dos, > linux, > etc..) > the device is called remote.c (like a "remote" parallel-like device= ) > > If you want I can send you some rough version of my project to see = how > (ugly) I did > and maybe we can share our experiences... > > Regards, > > NS. > > --------------060303050101000209010707 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Hi Alessandro,

Ah OK, I see, your project seems to be way more ambitious than mine :-)
So my project may not help you as much as you could expect..
Maybe only the sysc/tcpip glue mechanism..

Anyway, attached is a tarball of my project, containing a patch against qemu-snapshot-2006-07-23_23 (I can provide it if it fails to patch against more recent versions) plus the directory related to sysc.

See sysc/README for more info..

Will be interested by your return.. and also by your PCI/sysc experiments also..
tell me if you manage to compile/run it (watch out the sysc signal trace log which is generated)

Can send me something from your project, just by curiosity ? :-)
I would be particularly interested by other sysc/qemu glue mechanism, and also to see if you managed to generate interrupts from sysc, and handled within qemu guest OS...

Good luck for your project,

NS.

ps: oops, I was not supposed to send my professional signature in the mail I sent you (fwd to the ML), well nevermind, I'll use another mail identity from now on.. :-)
pps: I also fwd it to the ML, in order for other interested people to have a look at it if anyone is interested..

Alessandro Corradi a écrit :
Hi Nicolas,
Thank you for reply! The "only" trouble is that I need to descrive it as a pci device. Taking the parallel port as an example is  very usefull for  simple  hardware  as you  made.  But I need some info for write my device into qemu, in particular the init function for pci device as the ne2000 (In init function of network card it set pci_conf, should I need to set up? And what arguments should I put in pci_register_io_region function?).
My emulated device for the moment need to run in i386 architeture so I have not to be completeness about cpu target etc...
Anyway I appreciate if you can send me your written device so I can see if it can help me!

Thanks

Ale

2006/8/22, Nicolas SAUZEDE:
Hi Alessandro,

Concerning your cosimulation problem, I may help a little bit,
because when you first posted on the qemu dev list about your sysc project,
it motivated me to first learn about systemc (which I didn't know) and to
start hacking qemu to connect them together.

Well I must admit I'm pretty satisfied of the results,
I managed to build some small sysc dumb devices (gates, counters,
ram/buffers, fpu etc..)
(with a FIR filter in mind indeed), defined some sort of sysc written
"interface" that offers a bus+signals to sysc, while connecting to qemu
via a socket.
Within qemu, I created a parallel-like device (as you said on the ml
recently) and so I can probe my device from within guest OS (dos, linux,
etc..)
the device is called remote.c (like a "remote" parallel-like device)

If you want I can send you some rough version of my project to see how
(ugly) I did
and maybe we can share our experiences...

Regards,

NS.


--------------060303050101000209010707-- --------------060900040409080803030602 Content-Type: application/gzip; name="sysc0.tar.gz" Content-Disposition: inline; filename="sysc0.tar.gz" Content-Transfer-Encoding: base64 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 /wUtk1EoABgBAA== --------------060900040409080803030602--