<?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=KevinJ</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=KevinJ"/>
	<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Special:Contributions/KevinJ"/>
	<updated>2026-06-11T22:41:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15301</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15301"/>
		<updated>2026-04-30T09:17:17Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039; is using FlexIO lines to design a custom 8b parallel communication bus. It consists of the following signals:&lt;br /&gt;
* &#039;&#039;&#039;clk&#039;&#039;&#039;: Clock of the bus. Data is shifted out on rising edge and latched on falling edge.&lt;br /&gt;
* &#039;&#039;&#039;add_select&#039;&#039;&#039;: Address select, next byte is an address byte.&lt;br /&gt;
* &#039;&#039;&#039;data_select&#039;&#039;&#039;: Data select, next byte is a data byte.&lt;br /&gt;
* &#039;&#039;&#039;write_enable&#039;&#039;&#039;: Write enable, 1 to write, 0 to read.&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039;: Bi-directionnal 8b data.&lt;br /&gt;
&lt;br /&gt;
The memory space mapped on the bus is 16 bits wide.&lt;br /&gt;
Read/write access are done on 32b (hence 4x 8b transfer).&lt;br /&gt;
&lt;br /&gt;
=== Read example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits read of the word 0xCAFEBABE at address 0x0042.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_read32_example.png|frame|center| FlexIO Armabus 32b read]]&lt;br /&gt;
&lt;br /&gt;
=== Write example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits write of the word 0xDEADBEEF at address 0x1545.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Address auto-increment mode ===&lt;br /&gt;
&lt;br /&gt;
Address is automatically incremented after each fourth byte transferred.&lt;br /&gt;
The following chronogram depicts a write of the words 0xDEADBEEF, 0xCAFEBABE, 0xFEEDBEBE at 0x0102, 0x0103, 0x0104 respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_burstwrite_example.png|frame|center| FlexIO Armabus 3x32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Burst mode ===&lt;br /&gt;
&lt;br /&gt;
Burst mode allow a much faster read than standard read mode by anticipating the data to set on the FlexIO Armabus lines.&lt;br /&gt;
To initiate a burst read, the &#039;&#039;&#039;add_select&#039;&#039;&#039; and the &#039;&#039;&#039;data_select&#039;&#039;&#039; signal should be set at the same time.&lt;br /&gt;
The &#039;&#039;&#039;write_enable&#039;&#039;&#039; signal should be set too during the first 2 transactions in order to write the size to read.&lt;br /&gt;
Then, the &#039;&#039;&#039;write_enable&#039;&#039;&#039; should be low until the end of the transfer.&lt;br /&gt;
Finally, the data are provided on the bus.&lt;br /&gt;
Please note that the number of clock cycles during the read phase must match the size set earlier.&lt;br /&gt;
&lt;br /&gt;
The following chronogram depicts a burst read of 3 32-bits words at address 0x0023.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_burstread_example.png|frame|center| FlexIO Armabus 3x32b burst read]]&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_burstread_example.png&amp;diff=15300</id>
		<title>File:Flexio armabus burstread example.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_burstread_example.png&amp;diff=15300"/>
		<updated>2026-04-30T09:13:46Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_kernel_on_OPOS93_SP&amp;diff=15275</id>
		<title>FPGA registers access from Linux kernel on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_kernel_on_OPOS93_SP&amp;diff=15275"/>
		<updated>2025-10-09T16:30:54Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category:FPGA Category: OPOS93_SP  == Introduction ==  Users should be able to develop their own Linux driver for their custom IPs through &amp;#039;&amp;#039;FlexIO Armabus&amp;#039;&amp;#039;.  == gpio-flexio-armabus example Linux driver ==  You can find an example driver in your Linux build repository under &amp;#039;&amp;#039;drivers/gpio/gpio-flexio-armabus.c&amp;#039;&amp;#039;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Users should be able to develop their own Linux driver for their custom IPs through &#039;&#039;FlexIO Armabus&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== gpio-flexio-armabus example Linux driver ==&lt;br /&gt;
&lt;br /&gt;
You can find an example driver in your Linux build repository under &#039;&#039;drivers/gpio/gpio-flexio-armabus.c&#039;&#039;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Opos93_SP_soc_fpga_diagram.png&amp;diff=15274</id>
		<title>File:Opos93 SP soc fpga diagram.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Opos93_SP_soc_fpga_diagram.png&amp;diff=15274"/>
		<updated>2025-10-09T16:09:27Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: KevinJ uploaded a new version of File:Opos93 SP soc fpga diagram.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15273</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15273"/>
		<updated>2025-10-09T16:02:40Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Setting address */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address to 0x0008&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;br /&gt;
Write or read size should be multiple of 4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
write(fd, buf, 8); // Write 2 words of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
read(fd, buf, 4); // Read 1 word of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15272</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15272"/>
		<updated>2025-10-09T16:01:15Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Setting address */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address to 0x0008&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;br /&gt;
Write or read size should be multiple of 4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
write(fd, buf, 8); // Write 2 words of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
read(fd, buf, 4); // Read 1 word of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15271</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15271"/>
		<updated>2025-10-09T15:56:07Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Burst mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039; is using FlexIO lines to design a custom 8b parallel communication bus. It consists of the following signals:&lt;br /&gt;
* &#039;&#039;&#039;clk&#039;&#039;&#039;: Clock of the bus. Data is shifted out on rising edge and latched on falling edge.&lt;br /&gt;
* &#039;&#039;&#039;add_select&#039;&#039;&#039;: Address select, next byte is an address byte.&lt;br /&gt;
* &#039;&#039;&#039;data_select&#039;&#039;&#039;: Data select, next byte is a data byte.&lt;br /&gt;
* &#039;&#039;&#039;write_enable&#039;&#039;&#039;: Write enable, 1 to write, 0 to read.&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039;: Bi-directionnal 8b data.&lt;br /&gt;
&lt;br /&gt;
The memory space mapped on the bus is 16 bits wide.&lt;br /&gt;
Read/write access are done on 32b (hence 4x 8b transfer).&lt;br /&gt;
&lt;br /&gt;
=== Read example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits read of the word 0xCAFEBABE at address 0x0042.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_read32_example.png|frame|center| FlexIO Armabus 32b read]]&lt;br /&gt;
&lt;br /&gt;
=== Write example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits write of the word 0xDEADBEEF at address 0x1545.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Burst mode ===&lt;br /&gt;
&lt;br /&gt;
Address is automatically incremented after each fourth byte transferred.&lt;br /&gt;
The following chronogram depicts a burst write of the words 0xDEADBEEF, 0xCAFEBABE, 0xFEEDBEBE at 0x0102, 0x0103, 0x0104 respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_burstwrite_example.png|frame|center| FlexIO Armabus 3x32b burst write]]&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15270</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15270"/>
		<updated>2025-10-09T15:47:57Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Setting address */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
Keep in mind that offset should be multiple of 4 because FlexIO is doing 32b access.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address to 0x0008&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;br /&gt;
Write or read size should be multiple of 4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
write(fd, buf, 8); // Write 2 words of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
read(fd, buf, 4); // Read 1 word of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15269</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15269"/>
		<updated>2025-10-09T15:45:27Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
Keep in mind that offset should be multiple of 4 because FlexIO is doing 32b access.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address to 0x0002&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;br /&gt;
Write or read size should be multiple of 4.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
write(fd, buf, 8); // Write 2 words of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
read(fd, buf, 4); // Read 1 word of 32b&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15268</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15268"/>
		<updated>2025-10-09T15:31:11Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Developing on the APF FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux userspace ====&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP | APF9328, APF27_SP, APF51_SP and OPOS6UL_SP]]&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF6_SP | APF6_SP]]&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP | OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux kernel ====&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_kernel_on_OPOS93_SP | OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15267</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15267"/>
		<updated>2025-10-09T15:29:26Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Setting address */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET);&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15266</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15266"/>
		<updated>2025-10-09T15:22:36Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Burst mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039; is using FlexIO lines to design a custom 8b parallel communication bus. It consists of the following signals:&lt;br /&gt;
* &#039;&#039;&#039;clk&#039;&#039;&#039;: Clock of the bus. Data is shifted out on rising edge and latched on falling edge.&lt;br /&gt;
* &#039;&#039;&#039;add_select&#039;&#039;&#039;: Address select, next byte is an address byte.&lt;br /&gt;
* &#039;&#039;&#039;data_select&#039;&#039;&#039;: Data select, next byte is a data byte.&lt;br /&gt;
* &#039;&#039;&#039;write_enable&#039;&#039;&#039;: Write enable, 1 to write, 0 to read.&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039;: Bi-directionnal 8b data.&lt;br /&gt;
&lt;br /&gt;
The memory space mapped on the bus is 16 bits wide.&lt;br /&gt;
Read/write access are done on 32b (hence 4x 8b transfer).&lt;br /&gt;
&lt;br /&gt;
=== Read example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits read of the word 0xCAFEBABE at address 0x0042.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_read32_example.png|frame|center| FlexIO Armabus 32b read]]&lt;br /&gt;
&lt;br /&gt;
=== Write example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits write of the word 0xDEADBEEF at address 0x1545.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Burst mode ===&lt;br /&gt;
&lt;br /&gt;
Address is automatically incremented after each fourth byte transferred.&lt;br /&gt;
Please note that it is the default behavior but this can be modified in the FlexIO instance module in the FPGA design.&lt;br /&gt;
The following chronogram depicts a burst write of the words 0xDEADBEEF, 0xCAFEBABE, 0xFEEDBEBE at 0x0102, 0x0103, 0x0104 respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_burstwrite_example.png|frame|center| FlexIO Armabus 3x32b burst write]]&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15265</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15265"/>
		<updated>2025-10-09T15:19:24Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Read/write */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address 0x0008&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write()&#039;&#039; functions.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15264</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15264"/>
		<updated>2025-10-09T15:18:58Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio_armabus&#039;&#039; kernel driver is mapping the FPGA address space in a file &#039;&#039;/dev/armabus&#039;&#039;. For further informations, see [[OPOS93_SP Interfaces description]].&lt;br /&gt;
&lt;br /&gt;
== Setting address ==&lt;br /&gt;
&lt;br /&gt;
Address should be set using the &#039;&#039;lseek()&#039;&#039; C function on the &#039;&#039;/dev/armabus&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fd = open(&amp;quot;/dev/armabus&amp;quot;, O_RDWR);&lt;br /&gt;
lseek(fd, 8, SEEK_SET); // Set address 0x0008&lt;br /&gt;
close(fd);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Read/write ==&lt;br /&gt;
&lt;br /&gt;
Access to the bus should be done using &#039;&#039;read()&#039;&#039; and &#039;&#039;write&#039;&#039; functions.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15263</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15263"/>
		<updated>2025-10-09T14:58:12Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039; is using FlexIO lines to design a custom 8b parallel communication bus. It consists of the following signals:&lt;br /&gt;
* &#039;&#039;&#039;clk&#039;&#039;&#039;: Clock of the bus. Data is shifted out on rising edge and latched on falling edge.&lt;br /&gt;
* &#039;&#039;&#039;add_select&#039;&#039;&#039;: Address select, next byte is an address byte.&lt;br /&gt;
* &#039;&#039;&#039;data_select&#039;&#039;&#039;: Data select, next byte is a data byte.&lt;br /&gt;
* &#039;&#039;&#039;write_enable&#039;&#039;&#039;: Write enable, 1 to write, 0 to read.&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039;: Bi-directionnal 8b data.&lt;br /&gt;
&lt;br /&gt;
The memory space mapped on the bus is 16 bits wide.&lt;br /&gt;
Read/write access are done on 32b (hence 4x 8b transfer).&lt;br /&gt;
&lt;br /&gt;
=== Read example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits read of the word 0xCAFEBABE at address 0x0042.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_read32_example.png|frame|center| FlexIO Armabus 32b read]]&lt;br /&gt;
&lt;br /&gt;
=== Write example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits write of the word 0xDEADBEEF at address 0x1545.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Burst mode ===&lt;br /&gt;
&lt;br /&gt;
Address is automatically incremented after each fourth byte transferred.&lt;br /&gt;
Please note that it is the default behavior but this can be modified in the FlexIO instance module in the FPGA design.&lt;br /&gt;
The following chronogram depicts a burst write of the words 0xDEADBEEF, 0xCAFEBABE, 0xFEEDBEBE at 0x0102, 0x0103, 0x0104 respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 3x32b burst write]]&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15262</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15262"/>
		<updated>2025-10-09T14:49:16Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Under_Construction}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039; is using FlexIO lines to design a custom 8b parallel communication bus. It consists of the following signals:&lt;br /&gt;
* &#039;&#039;&#039;clk&#039;&#039;&#039;: Clock of the bus. Data is shifted out on rising edge and latched on falling edge.&lt;br /&gt;
* &#039;&#039;&#039;add_select&#039;&#039;&#039;: Address select, next byte is an address byte.&lt;br /&gt;
* &#039;&#039;&#039;data_select&#039;&#039;&#039;: Data select, next byte is a data byte.&lt;br /&gt;
* &#039;&#039;&#039;write_enable&#039;&#039;&#039;: Write enable, 1 to write, 0 to read.&lt;br /&gt;
* &#039;&#039;&#039;data&#039;&#039;&#039;: Bi-directionnal 8b data.&lt;br /&gt;
&lt;br /&gt;
The memory space mapped on the bus is 16 bits wide.&lt;br /&gt;
Read/write access are done on 32b (hence 4x 8b transfer).&lt;br /&gt;
&lt;br /&gt;
=== Read example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits read of the word 0xCAFEBABE at address 0x0042.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_read32_example.png|frame|center| FlexIO Armabus 32b read]]&lt;br /&gt;
&lt;br /&gt;
=== Write example ===&lt;br /&gt;
&lt;br /&gt;
The following picture depicts a 32 bits write of the word 0xDEADBEEF at address 0x1545.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 32b write]]&lt;br /&gt;
&lt;br /&gt;
=== Burst mode ===&lt;br /&gt;
&lt;br /&gt;
Address is automatically incremented after each fourth byte transferred.&lt;br /&gt;
Please note that it is the default behavior but this can be modified in the FlexIO instance module in the FPGA design.&lt;br /&gt;
The following chronogram depicts a burst write of the words 0xDEADBEEF, 0xCAFEBABE, 0xFEEDBEBE at 0x0102, 0x0103, 0x0104 respectively.&lt;br /&gt;
&lt;br /&gt;
[[File:flexio_armabus_write32_example.png|frame|center| FlexIO Armabus 3x32b burst write]]&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_burstwrite_example.png&amp;diff=15261</id>
		<title>File:Flexio armabus burstwrite example.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_burstwrite_example.png&amp;diff=15261"/>
		<updated>2025-10-09T14:44:38Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_write32_example.png&amp;diff=15260</id>
		<title>File:Flexio armabus write32 example.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_write32_example.png&amp;diff=15260"/>
		<updated>2025-10-09T14:33:14Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_read32_example.png&amp;diff=15259</id>
		<title>File:Flexio armabus read32 example.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Flexio_armabus_read32_example.png&amp;diff=15259"/>
		<updated>2025-10-09T14:01:09Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15258</id>
		<title>OPOS93 SP Interfaces description</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_Interfaces_description&amp;diff=15258"/>
		<updated>2025-10-09T09:48:50Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Under_Construction}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The Trion T20 FPGA is accessed by the iMX93 SoC by using a custom FlexIO bus called &#039;&#039;&#039;FlexIO Armabus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:Opos93_SP_soc_fpga_diagram.png|frame|center| SoC and FPGA interface diagram for Opos93_SP]]&lt;br /&gt;
== FlexIO Armabus ==&lt;br /&gt;
&lt;br /&gt;
[[Using_FPGA| &amp;lt;&amp;lt; FPGA general page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=File:Opos93_SP_soc_fpga_diagram.png&amp;diff=15257</id>
		<title>File:Opos93 SP soc fpga diagram.png</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=File:Opos93_SP_soc_fpga_diagram.png&amp;diff=15257"/>
		<updated>2025-10-09T09:47:29Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15256</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15256"/>
		<updated>2025-10-09T08:39:45Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15255</id>
		<title>FPGA registers access from Linux userspace on OPOS93 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP&amp;diff=15255"/>
		<updated>2025-10-09T08:39:14Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category:FPGA Category: OPOS93_SP&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: OPOS93_SP]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15254</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15254"/>
		<updated>2025-10-09T08:38:50Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Accessing the FPGA address domain from Linux userspace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux userspace ====&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP | APF9328, APF27_SP, APF51_SP and OPOS6UL_SP]]&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF6_SP | APF6_SP]]&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_OPOS93_SP | OPOS93_SP]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP&amp;diff=15253</id>
		<title>FPGA registers access from Linux userspace on APF9328, APF27 SP, APF51 SP and OPOS6UL SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP&amp;diff=15253"/>
		<updated>2025-10-09T08:33:52Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: APF9328]]&lt;br /&gt;
[[Category: APF27]]&lt;br /&gt;
[[Category: APF51]]&lt;br /&gt;
[[Category: OPOS6UL_SP]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;APF9328, APF27, APF51 and OPOS6UL_SP&#039;&#039;&#039;, registers access are done with a memory bus (parallel).&lt;br /&gt;
Access through this bus can be made by two methods:&lt;br /&gt;
* Using &#039;&#039;fpgaregs&#039;&#039; tool&lt;br /&gt;
&lt;br /&gt;
== fpgaregs ==&lt;br /&gt;
===Installation===&lt;br /&gt;
If the fpgaregs package is not already installed on your APF (&#039;&#039;/usr/bin/fpgaregs&#039;&#039;), you can select it in the Buildroot menuconfig:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;config&amp;quot;&amp;gt;&lt;br /&gt;
Package Selection for the target  ---&amp;gt; &lt;br /&gt;
    [*] Hardware handling / blockdevices and filesystem maintenance  ---&amp;gt; &lt;br /&gt;
         [*]   fpgaregs &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
 $ make &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reflash your rootfs or install it manually.&lt;br /&gt;
&lt;br /&gt;
===Usage===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fpgaregs&#039;&#039; can be used to do read or write accesses (16 or 32 bits wide) to the FPGA, from Linux userspace/console. &lt;br /&gt;
&lt;br /&gt;
====16 bits read====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w &amp;lt;address&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;address&amp;gt; is an address relative to FPGA&#039;s mapping in hexadecimal value. Example:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====16 bits write====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w &amp;lt;address&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;value&amp;gt; is hexadecimal value to write.&lt;br /&gt;
&lt;br /&gt;
====32 bits read====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs l &amp;lt;address&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====32 bits write====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs l &amp;lt;address&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== the mmap problem ==&lt;br /&gt;
&lt;br /&gt;
{{Note| This problem is corrected with latest Toolchains compilation options}}&lt;br /&gt;
&lt;br /&gt;
First of all, you need to get a file descriptor for &#039;&#039;/dev/mem&#039;&#039; using the &#039;&#039;open()&#039;&#039; function&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ffpga=open(&amp;quot;/dev/mem&amp;quot;,O_RDWR|O_SYNC);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now you have a valid file descriptor to access your FPGA.&lt;br /&gt;
&lt;br /&gt;
The O_SYNC option is recommended to avoid Linux to cache the content of /dev/mem and delay any modification done in this file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To access fpga register, fpgaregs use the &#039;&#039;mmap()&#039;&#039; system call :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void * ptr_fpga;&lt;br /&gt;
ptr_fpga = mmap (0, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, ffpga, FPGA_ADDRESS);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to this function, fpga registers are accessible directly on memory with pointer ptr_fpga. To read and write in 16bits or in 32 bits we will cast the pointer value in &#039;&#039;unsigned short&#039;&#039; or &#039;&#039;unsigned int&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16bits&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;write&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
        *(unsigned short*)(ptr_fpga+(address)) = (unsigned short)value;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;read&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
          value = *(unsigned short*)(ptr_fpga+(address));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;32 bits&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;write&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
        *(unsigned int*)(ptr_fpga+(address)) = (unsigned short)value;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;read&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
          value = *(unsigned int*)(ptr_fpga+(address));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The problem ===&lt;br /&gt;
&lt;br /&gt;
By default, if the specific &#039;&#039;arm920t&#039;&#039; target is not specified, &#039;&#039;arm-linux-gcc&#039;&#039; will try to generate compatible read/write for all ARM9 model when it access register in 16bits. Indeed it seems that not all ARM9 have 16bits read/write capabilities (&#039;&#039;ldrh&#039;&#039; asm instruction).&lt;br /&gt;
&lt;br /&gt;
As the interface between i.MXL and FPGA on APF9328 has no 8bits read/write capabilities, each 8 bits access is recognized by the FPGA as a 16bits access. So on each 16bits access of the i.MXL, FPGA will process two 16bits access instead of 1. That is a problem when accessing a FIFO for example.&lt;br /&gt;
&lt;br /&gt;
To avoid this painful problem don&#039;t forget the &#039;&#039;-mcpu=arm920t&#039;&#039; option when compiling &#039;&#039;fpgaregs&#039;&#039; for APF9328 and &#039;&#039;-mcpu=arm926ej-s&#039;&#039; for APF27.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://sources.redhat.com/ml/crossgcc/2005-08/msg00120.html : Explanation of the problem.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF6_SP&amp;diff=15252</id>
		<title>FPGA registers access from Linux userspace on APF6 SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF6_SP&amp;diff=15252"/>
		<updated>2025-10-09T08:33:48Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category:FPGA Category: APF6_SP  == Introduction ==  For &amp;#039;&amp;#039;&amp;#039;APF6_SP&amp;#039;&amp;#039;&amp;#039; registers access are done with PCIe  == PCIe ==  On APF6_SP FPGA memory is accessed with PCIe, to read/write on FPGA space an example is available with  pci_debug.  === Pci_debug ===  See  pci_debug page to know how to access PCIe address space with a command line tool.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
[[Category: APF6_SP]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
For &#039;&#039;&#039;APF6_SP&#039;&#039;&#039; registers access are done with PCIe&lt;br /&gt;
&lt;br /&gt;
== PCIe ==&lt;br /&gt;
&lt;br /&gt;
On [[APF6_SP]] FPGA memory is accessed with PCIe, to read/write on FPGA space an example is available with [[Pci_debug | pci_debug]].&lt;br /&gt;
&lt;br /&gt;
=== Pci_debug ===&lt;br /&gt;
&lt;br /&gt;
See [[Pci_debug | pci_debug]] page to know how to access PCIe address space with a command line tool.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15251</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15251"/>
		<updated>2025-10-09T08:27:39Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Accessing the FPGA address domain from Linux userspace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux userspace ====&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP | APF9328, APF27_SP, APF51_SP and OPOS6UL_SP]]&lt;br /&gt;
* [[FPGA_registers_access_from_Linux_userspace_on_APF6_SP | APF6_SP]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace&amp;diff=15250</id>
		<title>FPGA registers access from Linux userspace</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace&amp;diff=15250"/>
		<updated>2025-10-09T08:26:20Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: KevinJ moved page FPGA registers access from Linux userspace to FPGA registers access from Linux userspace on APF9328, APF27 SP, APF51 SP and OPOS6UL SP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[FPGA registers access from Linux userspace on APF9328, APF27 SP, APF51 SP and OPOS6UL SP]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP&amp;diff=15249</id>
		<title>FPGA registers access from Linux userspace on APF9328, APF27 SP, APF51 SP and OPOS6UL SP</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=FPGA_registers_access_from_Linux_userspace_on_APF9328,_APF27_SP,_APF51_SP_and_OPOS6UL_SP&amp;diff=15249"/>
		<updated>2025-10-09T08:26:20Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: KevinJ moved page FPGA registers access from Linux userspace to FPGA registers access from Linux userspace on APF9328, APF27 SP, APF51 SP and OPOS6UL SP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;&#039;two methods&#039;&#039;&#039; to access FPGA registers on APF*.&lt;br /&gt;
&lt;br /&gt;
* For &#039;&#039;&#039;APF9328, APF27 and APF51&#039;&#039;&#039; registers access are done with a memory bus (parallel).&lt;br /&gt;
* For &#039;&#039;&#039;APF6_SP&#039;&#039;&#039; registers access are done with PCIe&lt;br /&gt;
&lt;br /&gt;
== Memory bus ==&lt;br /&gt;
=== fpgaregs ===&lt;br /&gt;
====Installation====&lt;br /&gt;
If the fpgaregs package is not already installed on your APF (&#039;&#039;/usr/bin/fpgaregs&#039;&#039;), you can select it in the Buildroot menuconfig:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
 $ make menuconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;config&amp;quot;&amp;gt;&lt;br /&gt;
Package Selection for the target  ---&amp;gt; &lt;br /&gt;
    [*] Hardware handling / blockdevices and filesystem maintenance  ---&amp;gt; &lt;br /&gt;
         [*]   fpgaregs &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
 $ make &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then reflash your rootfs or install it manually.&lt;br /&gt;
&lt;br /&gt;
====Usage====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fpgaregs&#039;&#039; can be used to do read or write accesses (16 or 32 bits wide) to the FPGA, from Linux userspace/console. &lt;br /&gt;
&lt;br /&gt;
=====16 bits read=====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w &amp;lt;address&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;address&amp;gt; is an address relative to FPGA&#039;s mapping in hexadecimal value. Example:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====16 bits write=====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs w &amp;lt;address&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;value&amp;gt; is hexadecimal value to write.&lt;br /&gt;
&lt;br /&gt;
=====32 bits read=====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs l &amp;lt;address&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====32 bits write=====&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
# fpgaregs l &amp;lt;address&amp;gt; &amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== the mmap problem ===&lt;br /&gt;
&lt;br /&gt;
{{Note| This problem is corrected with latest Toolchains compilation options}}&lt;br /&gt;
&lt;br /&gt;
First of all, you need to get a file descriptor for &#039;&#039;/dev/mem&#039;&#039; using the &#039;&#039;open()&#039;&#039; function&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
ffpga=open(&amp;quot;/dev/mem&amp;quot;,O_RDWR|O_SYNC);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Now you have a valid file descriptor to access your FPGA.&lt;br /&gt;
&lt;br /&gt;
The O_SYNC option is recommended to avoid Linux to cache the content of /dev/mem and delay any modification done in this file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To access fpga register, fpgaregs use the &#039;&#039;mmap()&#039;&#039; system call :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void * ptr_fpga;&lt;br /&gt;
ptr_fpga = mmap (0, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, ffpga, FPGA_ADDRESS);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to this function, fpga registers are accessible directly on memory with pointer ptr_fpga. To read and write in 16bits or in 32 bits we will cast the pointer value in &#039;&#039;unsigned short&#039;&#039; or &#039;&#039;unsigned int&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;16bits&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;write&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
        *(unsigned short*)(ptr_fpga+(address)) = (unsigned short)value;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;read&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
          value = *(unsigned short*)(ptr_fpga+(address));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;32 bits&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;write&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
        *(unsigned int*)(ptr_fpga+(address)) = (unsigned short)value;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;read&#039;&#039;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
          value = *(unsigned int*)(ptr_fpga+(address));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== The problem ====&lt;br /&gt;
&lt;br /&gt;
By default, if the specific &#039;&#039;arm920t&#039;&#039; target is not specified, &#039;&#039;arm-linux-gcc&#039;&#039; will try to generate compatible read/write for all ARM9 model when it access register in 16bits. Indeed it seems that not all ARM9 have 16bits read/write capabilities (&#039;&#039;ldrh&#039;&#039; asm instruction).&lt;br /&gt;
&lt;br /&gt;
As the interface between i.MXL and FPGA on APF9328 has no 8bits read/write capabilities, each 8 bits access is recognized by the FPGA as a 16bits access. So on each 16bits access of the i.MXL, FPGA will process two 16bits access instead of 1. That is a problem when accessing a FIFO for example.&lt;br /&gt;
&lt;br /&gt;
To avoid this painful problem don&#039;t forget the &#039;&#039;-mcpu=arm920t&#039;&#039; option when compiling &#039;&#039;fpgaregs&#039;&#039; for APF9328 and &#039;&#039;-mcpu=arm926ej-s&#039;&#039; for APF27.&lt;br /&gt;
&lt;br /&gt;
== PCIe ==&lt;br /&gt;
&lt;br /&gt;
On [[APF6_SP]] FPGA memory is accessed with PCIe, to read/write on FPGA space an example is available with [[Pci_debug | pci_debug]].&lt;br /&gt;
&lt;br /&gt;
=== Pci_debug ===&lt;br /&gt;
&lt;br /&gt;
See [[Pci_debug | pci_debug]] page to know how to access PCIe address space with a command line tool.&lt;br /&gt;
&lt;br /&gt;
==Links==&lt;br /&gt;
* http://sources.redhat.com/ml/crossgcc/2005-08/msg00120.html : Explanation of the problem.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15248</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15248"/>
		<updated>2025-10-09T08:25:23Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* FPGA Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux userspace ====&lt;br /&gt;
* [[FPGA_register | APF9328, APF27, APF51 and OPOS6UL_SP]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15247</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15247"/>
		<updated>2025-10-09T08:21:09Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* FPGA Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
==== Accessing the FPGA address domain from Linux ====&lt;br /&gt;
* [[FPGA_register | APF9328, APF27, APF51 and OPOS6UL_SP]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15245</id>
		<title>OPOS93 SP FPGA configuration</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15245"/>
		<updated>2025-10-03T16:21:42Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Using Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
Please ensure that the [[Efinity]] project is configured as such:&lt;br /&gt;
*  Generate &#039;&#039;&#039;.hex.bin&#039;&#039;&#039; file (found under the &#039;&#039;outflow&#039;&#039; directory)&lt;br /&gt;
* The bitstream should be in a &#039;&#039;&#039;SPI 8b passive&#039;&#039;&#039; format&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio-armabus&#039;&#039; kernel driver will configure the FPGA via SPI as soon as it is loaded.&lt;br /&gt;
Please copy your &#039;&#039;&#039;&amp;lt;YOUR_PROJECT&amp;gt;.hex.bin&#039;&#039;&#039; to &#039;&#039;/lib/firmware/fpga/bitstream.bin&#039;&#039; on the board and either reboot, or unload and reload the module:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 # rmmod flexio-armabus&lt;br /&gt;
 # modprobe flexio-armabus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note| On the Opos93SP_Dev board, prior to remove the flexio-armabus, you&#039;ll probably need to:&lt;br /&gt;
* unbind the &#039;&#039;&#039;fpga-gpio-leds&#039;&#039;&#039; from the GPIOs:&lt;br /&gt;
*:&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt; # echo &#039;fpga-gpio-leds&#039; &amp;gt; /sys/bus/platform/drivers/leds-gpio/unbind&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Remove the &#039;&#039;&#039;gpio_flexio_armabus&#039;&#039;&#039; module:&lt;br /&gt;
*:&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt; # rmmod gpio_flexio_armabus&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Using Efinity via JTAG ==&lt;br /&gt;
&lt;br /&gt;
{{Warning| Configuring the FPGA using Efinity programmer is currently broken.}}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15244</id>
		<title>OPOS93 SP FPGA configuration</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15244"/>
		<updated>2025-10-03T16:11:52Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Using Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
&lt;br /&gt;
Please ensure that the [[Efinity]] project is configured as such:&lt;br /&gt;
*  Generate &#039;&#039;&#039;.hex.bin&#039;&#039;&#039; file (found under the &#039;&#039;outflow&#039;&#039; directory)&lt;br /&gt;
* The bitstream should be in a &#039;&#039;&#039;SPI 8b passive&#039;&#039;&#039; format&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;flexio-armabus&#039;&#039; kernel driver will configure the FPGA via SPI as soon as it is loaded.&lt;br /&gt;
Please copy your &#039;&#039;&#039;&amp;lt;YOUR_PROJECT&amp;gt;.hex.bin&#039;&#039;&#039; to &#039;&#039;/lib/firmware/fpga/bitstream.bin&#039;&#039; on the board and either reboot, or unload and reload the module:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 # rmmod flexio-armabus&lt;br /&gt;
 # modprobe flexio-armabus&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Using Efinity via JTAG ==&lt;br /&gt;
&lt;br /&gt;
{{Warning| Configuring the FPGA using Efinity programmer is currently broken.}}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15243</id>
		<title>OPOS93 SP FPGA configuration</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_configuration&amp;diff=15243"/>
		<updated>2025-10-03T16:04:40Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category: OPOS93_SP Category: FPGA  == Using Linux ==  === Prerequisites ==  Please ensure that the Efinity project is configured as such: *  Generate &amp;#039;&amp;#039;&amp;#039;.hex.bin&amp;#039;&amp;#039;&amp;#039; file (found under the &amp;#039;&amp;#039;outflow&amp;#039;&amp;#039; directory) * The bitstream should be in a &amp;#039;&amp;#039;&amp;#039;SPI 8b passive&amp;#039;&amp;#039;&amp;#039; format  == Using Efinity via JTAG ==  {{Warning| Configuring the FPGA using Efinity programmer is currently broken.}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Using Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Please ensure that the [[Efinity]] project is configured as such:&lt;br /&gt;
*  Generate &#039;&#039;&#039;.hex.bin&#039;&#039;&#039; file (found under the &#039;&#039;outflow&#039;&#039; directory)&lt;br /&gt;
* The bitstream should be in a &#039;&#039;&#039;SPI 8b passive&#039;&#039;&#039; format&lt;br /&gt;
&lt;br /&gt;
== Using Efinity via JTAG ==&lt;br /&gt;
&lt;br /&gt;
{{Warning| Configuring the FPGA using Efinity programmer is currently broken.}}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15242</id>
		<title>OPOS93 SP FPGA designing</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15242"/>
		<updated>2025-10-03T16:00:45Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Requisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to install [[Efinity]] in order to synthetise your design for the embedded Efinix Trion T20.&lt;br /&gt;
&lt;br /&gt;
== Starting from a template project ==&lt;br /&gt;
&lt;br /&gt;
Template projects for [[Chisel | Chisel]] or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].&lt;br /&gt;
&lt;br /&gt;
== Chisel ==&lt;br /&gt;
&lt;br /&gt;
# Install [https://www.scala-sbt.org/download/ Scala/SBT] on your environment&lt;br /&gt;
# Setup a Chisel project and add the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper] as a dependency&lt;br /&gt;
# From the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository], copy the &#039;&#039;opos93sp-template&#039;&#039; or &#039;&#039;opos93sp-template-wb&#039;&#039; (with Wishbone bus instantiated)  folder from the &#039;&#039;hardware&#039;&#039; directory.&lt;br /&gt;
# You can then hack the different files:&lt;br /&gt;
#*&#039;&#039;&#039;Makefile&#039;&#039;&#039;: change your project name, change your Chisel project&#039;s directory, ...&lt;br /&gt;
#*&#039;&#039;&#039;generate-project.py&#039;&#039;&#039;: IO configurations of the FPGA (see documentation from Efinix)&lt;br /&gt;
# Load [[Efinity]]&#039;s environment variables (do it only one time):&lt;br /&gt;
#:&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;$ source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build the project&lt;br /&gt;
#: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verilog/VHDL ==&lt;br /&gt;
&lt;br /&gt;
The [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository] build template projects for every releases. Those tamplate projects can be found under the asset section on [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper/-/releases the release page].&lt;br /&gt;
&lt;br /&gt;
# Download the &#039;&#039;&#039;Opos93SP template project&#039;&#039;&#039; or the &#039;&#039;&#039;Opos93SP wishbone template project&#039;&#039;&#039; whether you need a Wishbone bus or not.&lt;br /&gt;
# Open the project in [[Efinity]] and start hacking the generated wishbone or FlexIO Verilog modules depending on the template project you chose in the step above.&lt;br /&gt;
&lt;br /&gt;
= JTAG Debugging =&lt;br /&gt;
&lt;br /&gt;
JTAG debugging using [[Efinity]] can be achieved following this procedure:&lt;br /&gt;
# Synthetise the design (only the &#039;&#039;Synthetise&#039;&#039; step is required)&lt;br /&gt;
# Generate a debug core using the &amp;quot;Debug Wizard&amp;quot; of Efinity&lt;br /&gt;
# Add the signals you are interested in&lt;br /&gt;
# Generate the bitstream (you can skip the &#039;&#039;Synthesis&#039; step and resume from the &#039;&#039;Mapping&#039;&#039; step)&lt;br /&gt;
# [[OPOS93_SP_FPGA_configuration | Configure the FPGA]] with the generated bitstream&lt;br /&gt;
# Open the Efinity debugger and attach the target&lt;br /&gt;
&lt;br /&gt;
Now you should be able to trigger acquisition, see instant signal values, etc ...&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15241</id>
		<title>OPOS93 SP FPGA designing</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15241"/>
		<updated>2025-10-03T15:54:03Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Requisites ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to install [[Efinity]] in order to synthetise your design for the embedded Efinix Trion T20.&lt;br /&gt;
&lt;br /&gt;
== Starting from a template project ==&lt;br /&gt;
&lt;br /&gt;
Template projects for [[Chisel | Chisel]] or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].&lt;br /&gt;
&lt;br /&gt;
== Chisel ==&lt;br /&gt;
&lt;br /&gt;
# Install [https://www.scala-sbt.org/download/ Scala/SBT] on your environment&lt;br /&gt;
# Setup a Chisel project and add the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper] as a dependency&lt;br /&gt;
# From the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository], copy the &#039;&#039;opos93sp-template&#039;&#039; or &#039;&#039;opos93sp-template-wb&#039;&#039; (with Wishbone bus instantiated)  folder from the &#039;&#039;hardware&#039;&#039; directory.&lt;br /&gt;
# You can then hack the different files:&lt;br /&gt;
#*&#039;&#039;&#039;Makefile&#039;&#039;&#039;: change your project name, change your Chisel project&#039;s directory, ...&lt;br /&gt;
#*&#039;&#039;&#039;generate-project.py&#039;&#039;&#039;: IO configurations of the FPGA (see documentation from Efinix)&lt;br /&gt;
# Load [[Efinity]]&#039;s environment variables (do it only one time):&lt;br /&gt;
#:&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;$ source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build the project&lt;br /&gt;
#: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verilog/VHDL ==&lt;br /&gt;
&lt;br /&gt;
The [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository] build template projects for every releases. Those tamplate projects can be found under the asset section on [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper/-/releases the release page].&lt;br /&gt;
&lt;br /&gt;
# Download the &#039;&#039;&#039;Opos93SP template project&#039;&#039;&#039; or the &#039;&#039;&#039;Opos93SP wishbone template project&#039;&#039;&#039; whether you need a Wishbone bus or not.&lt;br /&gt;
# Open the project in [[Efinity]] and start hacking the generated wishbone or FlexIO Verilog modules depending on the template project you chose in the step above.&lt;br /&gt;
&lt;br /&gt;
= JTAG Debugging =&lt;br /&gt;
&lt;br /&gt;
JTAG debugging using [[Efinity]] can be achieved following this procedure:&lt;br /&gt;
# Synthetise the design (only the &#039;&#039;Synthetise&#039;&#039; step is required)&lt;br /&gt;
# Generate a debug core using the &amp;quot;Debug Wizard&amp;quot; of Efinity&lt;br /&gt;
# Add the signals you are interested in&lt;br /&gt;
# Generate the bitstream (you can skip the &#039;&#039;Synthesis&#039; step and resume from the &#039;&#039;Mapping&#039;&#039; step)&lt;br /&gt;
# [[OPOS93_SP_FPGA_configuration | Configure the FPGA]] with the generated bitstream&lt;br /&gt;
# Open the Efinity debugger and attach the target&lt;br /&gt;
&lt;br /&gt;
Now you should be able to trigger acquisition, see instant signal values, etc ...&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15240</id>
		<title>OPOS93 SP FPGA designing</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15240"/>
		<updated>2025-10-03T15:26:19Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Chisel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Requisites ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to install [[Efinity]] in order to synthetise your design for the embedded Efinix Trion T20.&lt;br /&gt;
&lt;br /&gt;
== Starting from a template project ==&lt;br /&gt;
&lt;br /&gt;
Template projects for [[Chisel | Chisel]] or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].&lt;br /&gt;
&lt;br /&gt;
== Chisel ==&lt;br /&gt;
&lt;br /&gt;
# Install [https://www.scala-sbt.org/download/ Scala/SBT] on your environment&lt;br /&gt;
# Setup a Chisel project and add the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper] as a dependency&lt;br /&gt;
# From the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository], copy the &#039;&#039;opos93sp-template&#039;&#039; or &#039;&#039;opos93sp-template-wb&#039;&#039; (with Wishbone bus instantiated)  folder from the &#039;&#039;hardware&#039;&#039; directory.&lt;br /&gt;
# You can then hack the different files:&lt;br /&gt;
#*&#039;&#039;&#039;Makefile&#039;&#039;&#039;: change your project name, change your Chisel project&#039;s directory, ...&lt;br /&gt;
#*&#039;&#039;&#039;generate-project.py&#039;&#039;&#039;: IO configurations of the FPGA (see documentation from Efinix)&lt;br /&gt;
# Load [[Efinity]]&#039;s environment variables (do it only one time):&lt;br /&gt;
#:&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;$ source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build the project&lt;br /&gt;
#: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verilog/VHDL ==&lt;br /&gt;
&lt;br /&gt;
The [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository] build template projects for every releases. Those tamplate projects can be found under the asset section on [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper/-/releases the release page].&lt;br /&gt;
&lt;br /&gt;
# Download the &#039;&#039;&#039;Opos93SP template project&#039;&#039;&#039; or the &#039;&#039;&#039;Opos93SP wishbone template project&#039;&#039;&#039; whether you need a Wishbone bus or not.&lt;br /&gt;
# Open the project in [[Efinity]] and start hacking the generated wishbone or FlexIO Verilog modules depending on the template project you chose in the step above.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15239</id>
		<title>Efinity</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15239"/>
		<updated>2025-10-03T15:25:09Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
[[Category: Efinix]]&lt;br /&gt;
&lt;br /&gt;
[https://www.efinixinc.com/products-efinity.html Product page]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Please follow the install instruction from the manufacturer. Don&#039;t forget to apply the patch!&lt;br /&gt;
&lt;br /&gt;
Then, before using the tool, you need to load the environment variables:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;$ source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add Trenz TEI0004 JTAG adapter profile ==&lt;br /&gt;
&lt;br /&gt;
Create the &#039;&#039;&#039;&amp;lt;EFINITY_PATH&amp;gt;/pgm/bin/efx_pgm/efx_hw_common/boards/trenz_tei0004.json&#039;&#039;&#039; file with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;,&lt;br /&gt;
    &amp;quot;programmer&amp;quot;: {&lt;br /&gt;
        &amp;quot;programmer_type&amp;quot;: &amp;quot;ftdi_program&amp;quot;,&lt;br /&gt;
        &amp;quot;supported_mode&amp;quot;: [&amp;quot;JTAG&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;usb&amp;quot;: {&lt;br /&gt;
        &amp;quot;vid&amp;quot;: &amp;quot;0x0403&amp;quot;,&lt;br /&gt;
        &amp;quot;pid&amp;quot;: &amp;quot;0x6010&amp;quot;,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;pinout&amp;quot;: {&lt;br /&gt;
        &amp;quot;CBUS0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CCK&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI3&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SS&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CRESET_N&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CONDONE&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;HOLD&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;TCK&amp;quot;: &amp;quot;FTDI_ADBUS0&amp;quot;,&lt;br /&gt;
        &amp;quot;TDI&amp;quot;: &amp;quot;FTDI_ADBUS1&amp;quot;,&lt;br /&gt;
        &amp;quot;TDO&amp;quot;: &amp;quot;FTDI_ADBUS2&amp;quot;,&lt;br /&gt;
        &amp;quot;TMS&amp;quot;: &amp;quot;FTDI_ADBUS3&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;init&amp;quot;: {&lt;br /&gt;
        &amp;quot;val&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dir&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15238</id>
		<title>Efinity</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15238"/>
		<updated>2025-10-03T15:24:54Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
[[Category: Efinix]]&lt;br /&gt;
&lt;br /&gt;
[https://www.efinixinc.com/products-efinity.html Product page]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Please follow the install instruction from the manufacturer. Don&#039;t forget to apply the patch!&lt;br /&gt;
&lt;br /&gt;
Then, before using the tool, you need to load the environment variables:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Add Trenz TEI0004 JTAG adapter profile ==&lt;br /&gt;
&lt;br /&gt;
Create the &#039;&#039;&#039;&amp;lt;EFINITY_PATH&amp;gt;/pgm/bin/efx_pgm/efx_hw_common/boards/trenz_tei0004.json&#039;&#039;&#039; file with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;,&lt;br /&gt;
    &amp;quot;programmer&amp;quot;: {&lt;br /&gt;
        &amp;quot;programmer_type&amp;quot;: &amp;quot;ftdi_program&amp;quot;,&lt;br /&gt;
        &amp;quot;supported_mode&amp;quot;: [&amp;quot;JTAG&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;usb&amp;quot;: {&lt;br /&gt;
        &amp;quot;vid&amp;quot;: &amp;quot;0x0403&amp;quot;,&lt;br /&gt;
        &amp;quot;pid&amp;quot;: &amp;quot;0x6010&amp;quot;,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;pinout&amp;quot;: {&lt;br /&gt;
        &amp;quot;CBUS0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CCK&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI3&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SS&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CRESET_N&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CONDONE&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;HOLD&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;TCK&amp;quot;: &amp;quot;FTDI_ADBUS0&amp;quot;,&lt;br /&gt;
        &amp;quot;TDI&amp;quot;: &amp;quot;FTDI_ADBUS1&amp;quot;,&lt;br /&gt;
        &amp;quot;TDO&amp;quot;: &amp;quot;FTDI_ADBUS2&amp;quot;,&lt;br /&gt;
        &amp;quot;TMS&amp;quot;: &amp;quot;FTDI_ADBUS3&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;init&amp;quot;: {&lt;br /&gt;
        &amp;quot;val&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dir&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15237</id>
		<title>Efinity</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15237"/>
		<updated>2025-10-03T15:24:25Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
[[Category: Efinix]]&lt;br /&gt;
&lt;br /&gt;
[https://www.efinixinc.com/products-efinity.html Product page]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Please follow the install instruction from the manufacturer. Don&#039;t forget to apply the patch!&lt;br /&gt;
&lt;br /&gt;
Then, before using the tool, you need to load the environment variables:&lt;br /&gt;
source &amp;lt;EFINITY_PATH&amp;gt;/bin/setup.sh&lt;br /&gt;
&lt;br /&gt;
== Add Trenz TEI0004 JTAG adapter profile ==&lt;br /&gt;
&lt;br /&gt;
Create the &#039;&#039;&#039;&amp;lt;EFINITY_PATH&amp;gt;/pgm/bin/efx_pgm/efx_hw_common/boards/trenz_tei0004.json&#039;&#039;&#039; file with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;,&lt;br /&gt;
    &amp;quot;programmer&amp;quot;: {&lt;br /&gt;
        &amp;quot;programmer_type&amp;quot;: &amp;quot;ftdi_program&amp;quot;,&lt;br /&gt;
        &amp;quot;supported_mode&amp;quot;: [&amp;quot;JTAG&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;usb&amp;quot;: {&lt;br /&gt;
        &amp;quot;vid&amp;quot;: &amp;quot;0x0403&amp;quot;,&lt;br /&gt;
        &amp;quot;pid&amp;quot;: &amp;quot;0x6010&amp;quot;,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;pinout&amp;quot;: {&lt;br /&gt;
        &amp;quot;CBUS0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CCK&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI3&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SS&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CRESET_N&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CONDONE&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;HOLD&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;TCK&amp;quot;: &amp;quot;FTDI_ADBUS0&amp;quot;,&lt;br /&gt;
        &amp;quot;TDI&amp;quot;: &amp;quot;FTDI_ADBUS1&amp;quot;,&lt;br /&gt;
        &amp;quot;TDO&amp;quot;: &amp;quot;FTDI_ADBUS2&amp;quot;,&lt;br /&gt;
        &amp;quot;TMS&amp;quot;: &amp;quot;FTDI_ADBUS3&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;init&amp;quot;: {&lt;br /&gt;
        &amp;quot;val&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dir&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15236</id>
		<title>OPOS93 SP FPGA designing</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15236"/>
		<updated>2025-10-03T15:23:33Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Chisel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Requisites ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to install [[Efinity]] in order to synthetise your design for the embedded Efinix Trion T20.&lt;br /&gt;
&lt;br /&gt;
== Starting from a template project ==&lt;br /&gt;
&lt;br /&gt;
Template projects for [[Chisel | Chisel]] or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].&lt;br /&gt;
&lt;br /&gt;
== Chisel ==&lt;br /&gt;
&lt;br /&gt;
# Install [https://www.scala-sbt.org/download/ Scala/SBT] on your environment&lt;br /&gt;
# Setup a Chisel project and add the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper] as a dependency&lt;br /&gt;
# From the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository], copy the &#039;&#039;opos93sp-template&#039;&#039; or &#039;&#039;opos93sp-template-wb&#039;&#039; (with Wishbone bus instantiated)  folder from the &#039;&#039;hardware&#039;&#039; directory.&lt;br /&gt;
# You can then hack the different files:&lt;br /&gt;
#*&#039;&#039;&#039;Makefile&#039;&#039;&#039;: change your project name, change your Chisel project&#039;s directory, ...&lt;br /&gt;
#*&#039;&#039;&#039;generate-project.py&#039;&#039;&#039;: IO configurations of the FPGA (see documentation from Efinix)&lt;br /&gt;
# Build the project&lt;br /&gt;
#: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verilog/VHDL ==&lt;br /&gt;
&lt;br /&gt;
The [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository] build template projects for every releases. Those tamplate projects can be found under the asset section on [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper/-/releases the release page].&lt;br /&gt;
&lt;br /&gt;
# Download the &#039;&#039;&#039;Opos93SP template project&#039;&#039;&#039; or the &#039;&#039;&#039;Opos93SP wishbone template project&#039;&#039;&#039; whether you need a Wishbone bus or not.&lt;br /&gt;
# Open the project in [[Efinity]] and start hacking the generated wishbone or FlexIO Verilog modules depending on the template project you chose in the step above.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15235</id>
		<title>Efinity</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15235"/>
		<updated>2025-10-03T15:21:25Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
[[Category: Efinix]]&lt;br /&gt;
&lt;br /&gt;
[https://www.efinixinc.com/products-efinity.html Product page]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&lt;br /&gt;
Please follow the install instruction from the manufacturer. Don&#039;t forget to apply the patch!&lt;br /&gt;
&lt;br /&gt;
== Add Trenz TEI0004 JTAG adapter profile ==&lt;br /&gt;
&lt;br /&gt;
Create the &#039;&#039;&#039;&amp;lt;EFINITY_PATH&amp;gt;/pgm/bin/efx_pgm/efx_hw_common/boards/trenz_tei0004.json&#039;&#039;&#039; file with the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;,&lt;br /&gt;
    &amp;quot;programmer&amp;quot;: {&lt;br /&gt;
        &amp;quot;programmer_type&amp;quot;: &amp;quot;ftdi_program&amp;quot;,&lt;br /&gt;
        &amp;quot;supported_mode&amp;quot;: [&amp;quot;JTAG&amp;quot;]&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;usb&amp;quot;: {&lt;br /&gt;
        &amp;quot;vid&amp;quot;: &amp;quot;0x0403&amp;quot;,&lt;br /&gt;
        &amp;quot;pid&amp;quot;: &amp;quot;0x6010&amp;quot;,&lt;br /&gt;
        &amp;quot;desc&amp;quot;: &amp;quot;Arrow USB Blaster TEI0004&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;pinout&amp;quot;: {&lt;br /&gt;
        &amp;quot;CBUS0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CBUS2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CCK&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI0&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI1&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI2&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CDI3&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;SS&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CRESET_N&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;CONDONE&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;HOLD&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;TCK&amp;quot;: &amp;quot;FTDI_ADBUS0&amp;quot;,&lt;br /&gt;
        &amp;quot;TDI&amp;quot;: &amp;quot;FTDI_ADBUS1&amp;quot;,&lt;br /&gt;
        &amp;quot;TDO&amp;quot;: &amp;quot;FTDI_ADBUS2&amp;quot;,&lt;br /&gt;
        &amp;quot;TMS&amp;quot;: &amp;quot;FTDI_ADBUS3&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;init&amp;quot;: {&lt;br /&gt;
        &amp;quot;val&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;dir&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15234</id>
		<title>Efinity</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Efinity&amp;diff=15234"/>
		<updated>2025-10-03T15:16:21Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category: FPGA Category: Efinix  https://www.efinixinc.com/products-efinity.html Product page&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
[[Category: Efinix]]&lt;br /&gt;
&lt;br /&gt;
[[https://www.efinixinc.com/products-efinity.html Product page]]&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15233</id>
		<title>OPOS93 SP FPGA designing</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=OPOS93_SP_FPGA_designing&amp;diff=15233"/>
		<updated>2025-10-03T15:13:46Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Created page with &amp;quot;Category: OPOS93_SP Category: FPGA  == Requisites ==  You&amp;#039;ll need to install Efinity in order to synthetise your design for the embedded Efinix Trion T20.  == Starting from a template project ==  Template projects for  Chisel or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].  == Chisel ==  # Install [https://www.scala-sb...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: OPOS93_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Requisites ==&lt;br /&gt;
&lt;br /&gt;
You&#039;ll need to install [[Efinity]] in order to synthetise your design for the embedded Efinix Trion T20.&lt;br /&gt;
&lt;br /&gt;
== Starting from a template project ==&lt;br /&gt;
&lt;br /&gt;
Template projects for [[Chisel | Chisel]] or Verilog/VHDL development are publicly available on the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository].&lt;br /&gt;
&lt;br /&gt;
== Chisel ==&lt;br /&gt;
&lt;br /&gt;
# Install [https://www.scala-sbt.org/download/ Scala/SBT] on your environment&lt;br /&gt;
# Setup a Chisel project and add the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper] as a dependency&lt;br /&gt;
# From the [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository], copy the &#039;&#039;opos93sp-template&#039;&#039; or &#039;&#039;opos93sp-template-wb&#039;&#039; (with Wishbone bus instantiated)  folder from the &#039;&#039;hardware&#039;&#039; directory.&lt;br /&gt;
# You can then hack the different files:&lt;br /&gt;
#*&#039;&#039;&#039;Makefile&#039;&#039;&#039;: change your project name, change your Chisel project&#039;s directory, ...&lt;br /&gt;
#*&#039;&#039;&#039;generate-project.py&#039;&#039;&#039;: IO configurations of the FPGA (see documentation from [[Efinity]])&lt;br /&gt;
# Build the project&lt;br /&gt;
#: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verilog/VHDL ==&lt;br /&gt;
&lt;br /&gt;
The [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper flexIO to Wishbone bus wrapper repository] build template projects for every releases. Those tamplate projects can be found under the asset section on [https://git.armadeus.com/armadeus/armadeus-gateware/flexio-wishbone-wrapper/-/releases the release page].&lt;br /&gt;
&lt;br /&gt;
# Download the &#039;&#039;&#039;Opos93SP template project&#039;&#039;&#039; or the &#039;&#039;&#039;Opos93SP wishbone template project&#039;&#039;&#039; whether you need a Wishbone bus or not.&lt;br /&gt;
# Open the project in [[Efinity]] and start hacking the generated wishbone or FlexIO Verilog modules depending on the template project you chose in the step above.&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15232</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15232"/>
		<updated>2025-10-03T14:59:59Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Design Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_register | Access the FPGA address domain from Linux]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Efinix&#039;&#039;&#039;&lt;br /&gt;
* [[Efinity]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15231</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15231"/>
		<updated>2025-10-03T14:05:31Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* FPGA designing on Armadeus platforms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_register | Access the FPGA address domain from Linux]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
*&#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;&lt;br /&gt;
** [[OPOS93_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15230</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15230"/>
		<updated>2025-10-03T14:03:49Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Configuring Armadeus platform&amp;#039;s FPGA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_register | Access the FPGA address domain from Linux]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Uboot_FPGA_firmware_update_from_Linux&amp;diff=15229</id>
		<title>Uboot FPGA firmware update from Linux</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Uboot_FPGA_firmware_update_from_Linux&amp;diff=15229"/>
		<updated>2025-10-03T14:03:31Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=APF9328_APF27_APF51_OPOS6UL_SP_FPGA_configuration&amp;diff=15228</id>
		<title>APF9328 APF27 APF51 OPOS6UL SP FPGA configuration</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=APF9328_APF27_APF51_OPOS6UL_SP_FPGA_configuration&amp;diff=15228"/>
		<updated>2025-10-03T14:03:08Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* Configuring from Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: APF9328]]&lt;br /&gt;
[[Category: APF27]]&lt;br /&gt;
[[Category: APF51]]&lt;br /&gt;
[[Category: OPOS6UL_SP]]&lt;br /&gt;
[[Category: FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Test bitstream ==&lt;br /&gt;
&lt;br /&gt;
* The FPGA bitstreams are all located in the &#039;&#039;firmware/&#039;&#039; directory of your Armadeus BSP sources:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt;&lt;br /&gt;
 $ ls firmware/&lt;br /&gt;
 apf_pkg  BRAMTest  bus_led  led  PS2  PS2_Opencore  servo  sram_test  wishbone_example  Xtools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* You can make some trials with the &#039;&#039;firmware/leds/blinking_led/bin/&#039;&#039; files.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuring from Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Directly ===&lt;br /&gt;
&lt;br /&gt;
Please use the [[FPGA_loader | FPGA loader linux driver]].&lt;br /&gt;
&lt;br /&gt;
{{Warning | For APF51, please use binary format &#039;&#039;&#039;.bin&#039;&#039;&#039;, bitstream format &#039;&#039;&#039;.bit&#039;&#039;&#039; doesn&#039;t work.}}&lt;br /&gt;
&lt;br /&gt;
=== Flashing the FPGA firmware partition ===&lt;br /&gt;
&lt;br /&gt;
The FPGA firmware partition (mainly used from U-Boot) can be updated by means of U-Boot (see [[APF9328_APF27_APF51_OPOS6UL_SP_FPGA_configuration#Configuring_from_uBoot|here]]) or directly from Linux as described herewith.&lt;br /&gt;
&lt;br /&gt;
Under Linux:&lt;br /&gt;
&lt;br /&gt;
* At first, download your FPGA firmware:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 # tftp -g -r my_firmware.bit 192.168.0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then, determine which partition in the flash is the firmware partition:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
  # cat /proc/mtd &lt;br /&gt;
  dev:    size   erasesize  name&lt;br /&gt;
  mtd0: 00100000 00020000 &amp;quot;u-boot&amp;quot;&lt;br /&gt;
  mtd1: 00080000 00020000 &amp;quot;env&amp;quot;&lt;br /&gt;
  mtd2: 00080000 00020000 &amp;quot;env2&amp;quot;&lt;br /&gt;
  mtd3: 00100000 00020000 &amp;quot;firmware&amp;quot;&lt;br /&gt;
  mtd4: 00080000 00020000 &amp;quot;dtb&amp;quot;&lt;br /&gt;
  mtd5: 00080000 00020000 &amp;quot;splash&amp;quot;&lt;br /&gt;
  mtd6: 00800000 00020000 &amp;quot;kernel&amp;quot;&lt;br /&gt;
  mtd7: 1f400000 00020000 &amp;quot;rootfs&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The example above is taken from an APF51 running Armadeus version 5.2 and we can see that mtd3 is the firmware partition. If yours is different, then replace mtd3 by what you found out to be the right one in the following commands.&lt;br /&gt;
&lt;br /&gt;
* Once done, the firmware partition has to be erased:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 # flash_erase /dev/mtd3 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Then your FPGA .bit file can be written:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 # nandwrite -p /dev/mtd3 my_firmware.bit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuring from uBoot ==&lt;br /&gt;
&lt;br /&gt;
{{Warning| for the APF9328, please check that your bitfile size is smaller than the firmware partition size (256KB) before trying the following commands or you may corrupt your Linux kernel FLASH partition !!!}}&lt;br /&gt;
&lt;br /&gt;
{{Note | For the APF51 and U-Boot versions earlier than 2013.04, only binary file format (&#039;&#039;&#039;.bin&#039;&#039;&#039;) can be used; do not try &#039;&#039;&#039;.bit&#039;&#039;&#039; file. &amp;lt;br&amp;gt; For the APF51 and U-Boot versions 2013.04 or later you can also use .bit files with the U-Boot command: &amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt; BIOS&amp;gt; fpga loadb &amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Step 1&#039;&#039;&#039;: instal/copy your firmware to /tftpboot&lt;br /&gt;
** manually: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ cp myfirmware.bin /tftpboot/apfXX-firmware.bin (where apfXX is the name of your board: apf27, apf51 or apf9328)&amp;lt;/pre&amp;gt;&lt;br /&gt;
** using the armadeus BSP: &amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ make menuconfig&amp;lt;/pre&amp;gt;&lt;br /&gt;
*:&amp;lt;pre class=&amp;quot;config&amp;quot;&amp;gt;Package Selection for the target  ---&amp;gt;   Armadeus specific tools/utilities  ---&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
** specify the path to the FPGA firmware:&lt;br /&gt;
&amp;lt;pre line class=&amp;quot;config&amp;quot;&amp;gt;&lt;br /&gt;
[*] FPGA Firmware &lt;br /&gt;
      Firmware to install (Install a custom FPGA firmware)  ---&amp;gt;&lt;br /&gt;
 ($(TOPDIR)/../firmware/leds/blinking_led/bin/blinking_led_apf27_200k.bit) FPGA binary file path&lt;br /&gt;
[*]   Export this file to Buildroot images folder&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
**&amp;lt;pre class=&amp;quot;host&amp;quot;&amp;gt; $ cp buildroot/output/images/* /tftpboot &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Step 2&#039;&#039;&#039;: Load FPGA firmware image file with U-Boot through Ethernet:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 BIOS&amp;gt; tftpboot ${loadaddr} fpgafirmware.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;fpgafirmware.bin&#039;&#039; is of course the name of your bitfile stored in your TFTP shared directory (&#039;&#039;/tftpboot/&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
then you can type the c command to reconnect to the terminal&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Step 3&#039;&#039;&#039;: Test your new FPGA firmware&#039;s downloading:&lt;br /&gt;
** for .bin binary files  &amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;BIOS&amp;gt; fpga load 0 ${loadaddr} ${filesize}&amp;lt;/pre&amp;gt;&lt;br /&gt;
** for .bit binary files &amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;BIOS&amp;gt; fpga loadb 0 ${loadaddr} ${filesize}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using U-Boot scripts ===&lt;br /&gt;
&lt;br /&gt;
For your convenience a set of U-Boot script to facilitate firmware management with the APF boards:&lt;br /&gt;
* &#039;&#039;download_firmware&#039;&#039;: assuming your firmware is in /tftpboot and name apfXX-firmware.bin (where apfXX is the name of your board apf27, apf51, apf9328..) will download the firmware in RAM with the command: run download_firmware&lt;br /&gt;
* &#039;&#039;flash_firmware&#039;&#039;: save the previously downloaded firmware from RAM into the flash.&lt;br /&gt;
* &#039;&#039;update_firmware&#039;&#039;: will execute the previous 2 scripts in sequence.&lt;br /&gt;
* &#039;&#039;load_firmware&#039;&#039;: read a firmware from the flash (there is dedication partition named firmware for this purpose) and load it into the FPGA.&lt;br /&gt;
&lt;br /&gt;
Download and test your firmware image with:&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 BIOS&amp;gt; run download_firmware&lt;br /&gt;
 BIOS&amp;gt; run load_firmware&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoloading ===&lt;br /&gt;
When you are satisfied with your firmware, you can write it in flash make it &amp;quot;autoloaded&amp;quot; at power up:&lt;br /&gt;
{{Warning| &#039;&#039;&#039;Before&#039;&#039;&#039; setting the firmware_autoload variable, be sure that your FPGA binary file is correct. If not, your board will &#039;&#039;&#039;hang up&#039;&#039;&#039; at U-Boot start and you will need to cancel the fpga download to take control of the board. see note below}}&lt;br /&gt;
&amp;lt;pre class=&amp;quot;apf&amp;quot;&amp;gt;&lt;br /&gt;
 BIOS&amp;gt; run update_firmware&lt;br /&gt;
 BIOS&amp;gt; setenv firmware_autoload 1&lt;br /&gt;
 BIOS&amp;gt; saveenv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note | (U-Boot 2012.04) you can manually cancel the firmware autoload using the following procedure: keeping &amp;lt;CTRL-C&amp;gt; pressed on the console and power up the board will start the board without downloading the FPGA firmware - This procedure can be helpfull if you have programmed a broken firmware  }}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
	<entry>
		<id>http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15227</id>
		<title>Using FPGA</title>
		<link rel="alternate" type="text/html" href="http://wikilegacy.armadeus.com/index.php?title=Using_FPGA&amp;diff=15227"/>
		<updated>2025-10-03T13:57:54Z</updated>

		<summary type="html">&lt;p&gt;KevinJ: /* FPGA Interfaces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: FPGA]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
==Developing on the APF FPGA==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; summary=&amp;quot;Hardware Add-Ons by functionalities&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA Interfaces ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;: [[IMX9328-Spartan3 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF27&#039;&#039;&#039;: [[IMX27-Spartan3A interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF51&#039;&#039;&#039;: [[IMX51-Spartan6 interface description]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[OPOS6UL_SP Interfaces description]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP Interfaces description]]&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_register | Access the FPGA address domain from Linux]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== FPGA designing on Armadeus platforms ===&lt;br /&gt;
&lt;br /&gt;
These examples give the basis to make VHDL design for FPGA.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;:&lt;br /&gt;
** [[Simple blinking LED | LED]]&lt;br /&gt;
** [[A simple design with Wishbone bus | Complete example with button and led on wishbone bus communication and Linux drivers]]&lt;br /&gt;
*&#039;&#039;&#039;APF6_SP&#039;&#039;&#039;&lt;br /&gt;
** [[APF6_SP_FPGA_designing | FPGA designing]]&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Configuring Armadeus platform&#039;s FPGA ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Platforms&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;APF9328&#039;&#039;&#039;, &#039;&#039;&#039;APF27&#039;&#039;&#039;, &#039;&#039;&#039;APF51&#039;&#039;&#039;, &#039;&#039;&#039;OPOS6UL_SP&#039;&#039;&#039;: [[APF9328_APF27_APF51_OPOS6UL_SP FPGA_configuration | Configure APF9328, APF27, APF51 or OPOS6UL_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;APF6_SP&#039;&#039;&#039;: [[APF6_SP_FPGA_configuration | Configure APF6_SP FPGA]]&lt;br /&gt;
* &#039;&#039;&#039;OPOS93_SP&#039;&#039;&#039;: [[OPOS93_SP_FPGA_configuration | Configure OPOS93_SP FPGA]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[FPGA_loader | FPGA loader Linux driver]]&lt;br /&gt;
&lt;br /&gt;
* Flashing FPGA firmware [[Uboot_FPGA_firmware_update_from_Linux | from Linux]]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Design Tools===&lt;br /&gt;
Description of tools used to simulate, to synthesize, and to download/configure FGPA.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xilinx&#039;&#039;&#039;&lt;br /&gt;
* [[ISE WebPack and Vivado]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Altera&#039;&#039;&#039;&lt;br /&gt;
* [[Quartus | Quartus Prime (Altera/Intel&#039;s free devt tool)]]&lt;br /&gt;
* [[Modelsim-Altera | Install Modelsim-Altera (starter edition)]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lattice&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[IceCube | Install IceCube]]&lt;br /&gt;
* [[Diamond | Install Lattice Diamond]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Microsemi&#039;&#039;&#039;&lt;br /&gt;
* [http://www.fabienm.eu/flf/installing-libero-on-debian-9/ Install Libero]&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Automatize FPGA design making ===&lt;br /&gt;
&lt;br /&gt;
==== [[Peripherals On Demand]] ====&lt;br /&gt;
For complex projects, POD should be used to simplify design.&lt;br /&gt;
&lt;br /&gt;
==== [[FuseSoC]] ====&lt;br /&gt;
FuseSoC is a builder written in Python used to automatize FPGA constructions&lt;br /&gt;
&lt;br /&gt;
==== CactusII ====&lt;br /&gt;
&lt;br /&gt;
[http://funbase.cs.tut.fi/ Graphical IDE] for managing FPGA/ASIC design with IPX-ACT standard.&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== HDL ===&lt;br /&gt;
&lt;br /&gt;
===VHDL ===&lt;br /&gt;
&lt;br /&gt;
* [[VHDL coding styles|VHDL coding styles &amp;amp; externals documentations]]&lt;br /&gt;
* [http://www.xess.com/design_examples.php#XESS_Examples Nice ideas/examples to look at]&lt;br /&gt;
* [http://www.opencores.org www.opencores.org]&lt;br /&gt;
* [http://www.gmvhdl.com/VHDL.html An Introductory VHDL Tutorial]&lt;br /&gt;
&lt;br /&gt;
=== Verilog ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.veripool.org/wiki/verilator Verilator] an High speed verilog simulator&lt;br /&gt;
* [http://iverilog.icarus.com/ Icarus] Famous open-source verilog simulator&lt;br /&gt;
* [https://symbiyosys.readthedocs.io/en/latest/ SymbiYosys] open-source Verilog formal verification&lt;br /&gt;
&lt;br /&gt;
=== Synthesizable Synchronous HDL ===&lt;br /&gt;
==== [[Migen]] ====&lt;br /&gt;
&lt;br /&gt;
With migen, it&#039;s possible to develop FPGA design in Python then generate Verilog for synthezis.&lt;br /&gt;
&lt;br /&gt;
==== [[Chisel]] ====&lt;br /&gt;
With Chisel, it&#039;s possible to develop FPGA design in Scala then generate C++ model for simulation and Verilog model for synthesis. Armadeus system can help you to integrate a Chisel project on Armadeus board. &lt;br /&gt;
&lt;br /&gt;
==== [[SpinalHDL]] ====&lt;br /&gt;
&lt;br /&gt;
[https://github.com/SpinalHDL/SpinalHDL Another HDL generator] (VHDL) written in Scala.&lt;br /&gt;
&lt;br /&gt;
|----------------&lt;br /&gt;
|- style=&amp;quot;background:#f4f4f4; color:black; -moz-border-radius:18px;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
Some useful links.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Wishbone &#039;&#039;&#039;&lt;br /&gt;
* [http://cdn.opencores.org/downloads/wbspec_b3.pdf  official Wishbone specifications]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Wishbone_%28computer_bus%29 Wikipedia Wishbone doc]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Spartan &#039;&#039;&#039;&lt;br /&gt;
* [http://www.xilinx.com/support/documentation/data_sheets/ds099.pdf Spartan-3 FPGA Family Data Sheet]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; CycloneV&#039;&#039;&#039;&lt;br /&gt;
* [https://www.altera.com/products/fpga/cyclone-series/cyclone-v/overview.html CycloneV overview from altera]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; OpenSource &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [http://www.fabienm.eu/flf/wp-content/uploads/2017/05/fpgamap-1.svg OpenSource FPGA map]&lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>KevinJ</name></author>
	</entry>
</feed>