<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wikilegacy.armadeus.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CamilleD</id>
	<title>ArmadeusWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wikilegacy.armadeus.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CamilleD"/>
	<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Special:Contributions/CamilleD"/>
	<updated>2026-04-28T11:08:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=A_simple_design_with_Wishbone_bus&amp;diff=4845</id>
		<title>A simple design with Wishbone bus</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=A_simple_design_with_Wishbone_bus&amp;diff=4845"/>
		<updated>2008-11-06T09:03:44Z</updated>

		<summary type="html">&lt;p&gt;CamilleD: URL of the example sourceforge link corrected : &amp;#039;wishbone_example&amp;#039; instead of &amp;#039;Wisbone_example&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
This article intended to explain how to design Wishbone compatible &lt;br /&gt;
components with simple example. &lt;br /&gt;
The VHDL design can be found in sourceforge &lt;br /&gt;
[http://armadeus.svn.sourceforge.net/viewvc/armadeus/trunk/firmware/wishbone_example/ tree].&lt;br /&gt;
&lt;br /&gt;
Description of wishbone structure for armadeus can be found [[FpgaArchitecture#Le_bus_Wishbone | here]] in french.&lt;br /&gt;
&lt;br /&gt;
== General structure ==&lt;br /&gt;
&lt;br /&gt;
The main functionality of this component is to do the same things&lt;br /&gt;
that [[FPGA_and_led | benoît]] project : switch on a led when a button is &lt;br /&gt;
pressed.&lt;br /&gt;
&lt;br /&gt;
But to learn about designing Wishbone component and linux driver, the design&lt;br /&gt;
is little bit more complicated (!).&lt;br /&gt;
&lt;br /&gt;
When button is  pressed, the component &#039;&#039;Wb_button&#039;&#039; send interrupt signal to &#039;&#039;irq_mngr&#039;&#039;. &#039;&#039;irq_mngr&#039;&#039; will toggle a flag and send interruption to &lt;br /&gt;
&#039;&#039;&#039;i.mx&#039;&#039;&#039; processor. A Linux driver on &#039;&#039;&#039;i.mx&#039;&#039;&#039; will read &#039;&#039;irq_mngr&#039;&#039; and&lt;br /&gt;
acknowledge irq by writing &#039;1&#039; on a register. And finally, Linux driver will &lt;br /&gt;
toggle led value by writing on led register.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Wb_buttonled_top.png|center|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;imx_wrapper&#039;&#039;, &#039;&#039;syscon&#039;&#039; and &#039;&#039;irq_mngr&#039;&#039; are standards&lt;br /&gt;
ARMadeus-Wishbone IPs that just been instantiated in our design.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Wb_button&#039;&#039; and &#039;&#039;Wb_led&#039;&#039; are simple slave component we want to&lt;br /&gt;
integrate in the FPGA.&lt;br /&gt;
&lt;br /&gt;
All these components are connected together with the &#039;glue logic&#039; component &#039;&#039;intercon&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Wishbone slave application components ==&lt;br /&gt;
&lt;br /&gt;
=== Wb_led ===&lt;br /&gt;
&lt;br /&gt;
This component is a simple 16-bit Wishbone slave output port, from [http://www.opencores.org/projects.cgi/web/wishbone/wbspec_b3.pdf wishbone specification example] (p110).&lt;br /&gt;
&lt;br /&gt;
[[Image:wbs_led.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
It is a simple register, that can be read and write. The led is controled with register pin 0.&lt;br /&gt;
&lt;br /&gt;
[[Wb_led.vhd | The VHDL source code]]&lt;br /&gt;
&lt;br /&gt;
=== Wb_button ===&lt;br /&gt;
&lt;br /&gt;
Wb_button component, is like Wb_led but in read only and with an edge detector to rise irq.&lt;br /&gt;
&lt;br /&gt;
[[Image:wbs_button.png|center|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Wb_button.vhd | The VHDL source c]]ode&lt;br /&gt;
&lt;br /&gt;
== Drivers ==&lt;br /&gt;
&lt;br /&gt;
=== Wb_led ===&lt;br /&gt;
The Wb_led driver implements a character device with read(), write() system calls. It implements sys/led/status entry. Driver sources can be found in [http://armadeus.svn.sourceforge.net/viewvc/armadeus/trunk/target/linux/modules/fpga/others/Wb_led/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
=== Wb_button ===&lt;br /&gt;
The Wb_button driver implements a character device with only read() system calls. If used as blocking read, it will return value only when button is push/release. Drivers sources are on [http://armadeus.svn.sourceforge.net/viewvc/armadeus/trunk/target/linux/modules/fpga/others/Wb_button/ sourceforge].&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;/div&gt;</summary>
		<author><name>CamilleD</name></author>
	</entry>
</feed>