<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>FPGA BLOG</title><description>This blog is for the people who are interested in FPGA and CPLD designs.</description><managingEditor>noreply@blogger.com (fpgaforum)</managingEditor><pubDate>Sun, 1 Feb 2026 16:06:43 -0800</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">31</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://fpgaforum.blogspot.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>This blog is for the people who are interested in FPGA and CPLD designs.</itunes:subtitle><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>Quartus II Synthesis Error During Compilation</title><link>http://fpgaforum.blogspot.com/2017/07/quartus-ii-synthesis-error-during.html</link><category>10703</category><category>because the instance has no module binding</category><category>can't resolve aggregate expression in connection to port</category><category>SystemVerilog error</category><author>noreply@blogger.com (fpgaforum)</author><pubDate>Thu, 6 Jul 2017 10:27:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-5227173805161970207</guid><description>&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;If you are
seeing the following error message and wondering what is wrong with your System
Verilog syntax, then, you have come to the right place.&amp;nbsp; I believe you are using dual dimensional
input and/or output in the module port list like shown in the template below.&amp;nbsp; The truth is there might be nothing wrong
with your code, you just need to add the System Verilog file into the Quartus
II project.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span style="font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif; font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;module
&lt;/span&gt;SubModule&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span style="font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif; font-size: x-small;"&gt;(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;input&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;clk,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;input&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;reset,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;input&lt;/span&gt;[&lt;span style="color: red;"&gt;15:0&lt;/span&gt;]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; input_port[&lt;span style="color: red;"&gt;0:3&lt;/span&gt;],&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;output reg&lt;/span&gt;[&lt;span style="color: red;"&gt;15:0&lt;/span&gt;]&amp;nbsp; output_port[&lt;span style="color: red;"&gt;0:3&lt;/span&gt;]&lt;br /&gt;
);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue; font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;"&gt;endmodule&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;To add this
file to your Quartus II project, simply go to &lt;u&gt;P&lt;/u&gt;roject menu and choose “Add/Remove
&lt;u&gt;F&lt;/u&gt;iles in Project…”.&amp;nbsp; The rest of the
steps should be quite straight forward for you.&amp;nbsp;
Just choose the file and add it in the project.&amp;nbsp; Then, recompile your Quartus II project.&amp;nbsp; After that, this synthesis error will
disappear.&amp;nbsp; Before doing this step, if
you right-click on the error message and choose &lt;u&gt;H&lt;/u&gt;elp, it will show you the Quartus
II help like the shown in the link below but to me this help content doesn’t help
at all.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;a href="http://quartushelp.altera.com/17.0/index.htm#msgs/msgs/evrfx_sv_aggregate_port_connection_requires_module.htm"&gt;http://quartushelp.altera.com/17.0/index.htm#msgs/msgs/evrfx_sv_aggregate_port_connection_requires_module.htm&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;I need to
write this down to keep reminding myself not to fall into the same trap
again.&amp;nbsp; Sometimes, it could just take hours to
realize about this.&amp;nbsp; As far as I know, this happens to the latest Quartus II version 17.0 (latest as of today) and
also earlier Quartus II versions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;Here is the
synthesis error message displayed in the Quartus II message window.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span style="color: red; font-family: &amp;quot;arial&amp;quot; , &amp;quot;helvetica&amp;quot; , sans-serif;"&gt;ID:10703
SystemVerilog error at &amp;lt;location&amp;gt;: can't resolve aggregate expression in
connection to port &amp;lt;number&amp;gt;&amp;nbsp;on instance "&amp;lt;string&amp;gt;"
because the instance has no module binding&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;o:p&gt;&lt;/o:p&gt;

&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;Hope this helps you.&lt;/span&gt;&lt;/div&gt;
</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Any Replacement For Altera EPCQ Devices?</title><link>http://fpgaforum.blogspot.com/2015/06/any-replacement-for-altera-epcq-devices.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Tue, 16 Jun 2015 08:09:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-2661641486079921417</guid><description>&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;I
previously wrote an article “&lt;a href="http://fpgaforum.blogspot.com/2006/03/any-replacement-for-altera-epcs_19.html" target="_blank"&gt;Any Replacement For Altera EPCS Devices?&lt;/a&gt;” in year
2006.&amp;nbsp; I hope it has helped a lot of
engineers out there.&amp;nbsp; This article serves
the same purpose.&amp;nbsp; I just want to raise the
same awareness here especially if this is your very first time using Altera
FPGAs.&amp;nbsp; You can confidently replace the expensive
EPCQ devices with &lt;a href="http://www.micron.com/products/nor-flash/serial-nor-flash" target="_blank"&gt;N25Q &lt;/a&gt;serial flash from Micron.&amp;nbsp; The price difference is really huge!&amp;nbsp; Look at price table below.&amp;nbsp; I don’t even need to elaborate more.&amp;nbsp; Prices are quotated from &lt;a href="http://www.digikey.com/" target="_blank"&gt;Digikey&lt;/a&gt; or &lt;a href="http://www.newark.com/" target="_blank"&gt;Newark&lt;/a&gt;
website as of today.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;"&gt;
 &lt;tbody&gt;
&lt;tr&gt;
  &lt;td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 76.3pt;" valign="top" width="102"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;Density&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 106.3pt;" valign="top" width="142"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;Altera Part Number&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 92.15pt;" valign="top" width="123"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;Price (USD$)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 104.0pt;" valign="top" width="139"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;Micron Part Number&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 83.35pt;" valign="top" width="111"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;Price (USD$)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 76.3pt;" valign="top" width="102"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;32Mb&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 106.3pt;" valign="top" width="142"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;EPCQ32SI8N&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 92.15pt;" valign="top" width="123"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;11.00&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 104.0pt;" valign="top" width="139"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;N25Q032A13ESC40G&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 83.35pt;" valign="top" width="111"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;1.08&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 76.3pt;" valign="top" width="102"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;64Mb&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 106.3pt;" valign="top" width="142"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;EPCQ64SI16N&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 92.15pt;" valign="top" width="123"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;18.00&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 104.0pt;" valign="top" width="139"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;N25Q064A13ESE40E&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 83.35pt;" valign="top" width="111"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;1.64&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 76.3pt;" valign="top" width="102"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;128Mb&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 106.3pt;" valign="top" width="142"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;EPCQ128SI16N&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 92.15pt;" valign="top" width="123"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;30.00&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 104.0pt;" valign="top" width="139"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;N25Q128A13ESE40E&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 83.35pt;" valign="top" width="111"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;1.88&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style="border-top: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 76.3pt;" valign="top" width="102"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;256Mb&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 106.3pt;" valign="top" width="142"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;EPCQ256SI16N&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 92.15pt;" valign="top" width="123"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;50.00&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 104.0pt;" valign="top" width="139"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;N25Q256A13ESF40G&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 83.35pt;" valign="top" width="111"&gt;
  &lt;div class="MsoNormal" style="margin-bottom: 0.0001pt;"&gt;
&lt;span lang="EN-US"&gt;3.06&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;Besides the
cost difference, there is a huge advantage by using N25Q128 or N25Q064.&amp;nbsp; Their packages are both SOIC-8 whereas EPCQ64
and EPCQ128 are only available in SOIC-16 packages as of today.&amp;nbsp; This could save you some board space!&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;I
personally had tested N25Q128A13ESE40E and N25Q256A13EF840E on hardware to configure
Altera FPGAs in both Active Serial x4 and Active Serial x1 modes.&amp;nbsp; It works fine.&amp;nbsp; No issue for the Quartus II software programmer
to program the POF files into these N25Q devices, too.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>Function '__builtin_stwio' could not be resolved </title><link>http://fpgaforum.blogspot.com/2014/02/function-builtinstwio-could-not-be.html</link><category>builtin ldwio</category><category>builtin stwio</category><category>builtin_ldwio</category><category>builtin_stwio</category><category>function could not be resolved</category><category>IORD</category><category>IOWR</category><author>noreply@blogger.com (fpgaforum)</author><pubDate>Fri, 28 Feb 2014 08:57:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-9072272922032818850</guid><description>&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;If you are using&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 12.0pt; line-height: 107%; mso-bidi-font-family: &amp;quot;Segoe UI&amp;quot;;"&gt;Eclipse IDE for Altera NIOS II C++ firmware
development, you will probably be annoyed by the following two reported semantic
error messages when you are using &lt;span style="color: blue;"&gt;IOWR()&lt;/span&gt; and &lt;span style="color: blue;"&gt;IORD() &lt;/span&gt;macros from the io.h:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-size: 12.0pt; line-height: 107%; mso-bidi-font-family: &amp;quot;Segoe UI&amp;quot;;"&gt;&lt;span style="color: red;"&gt;&lt;b&gt;Function '__builtin_stwio' could not be resolved&lt;/b&gt;&lt;/span&gt; for IOWR()
functions in the C++ code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Function '__builtin_ldwio' could not be resolved&lt;/span&gt;&lt;/b&gt; for
IORD() function in the C++ code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;Anyway, you will still be able to load and run the firmware
program in the hardware successfully and everything is working as expected. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;These two error messages&lt;i style="color: red;"&gt; (builtin stwio could not be resolved&lt;/i&gt; and &lt;i style="color: red;"&gt;builtin ldwio could not be resolved) &lt;/i&gt;are however do not appear if
you convert your C++ code to C code.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;But you want to write your code in C++. &amp;nbsp;&lt;u&gt;The question is how to remove the two reported
semantic error messages above because they are very annoying and they keep
distracting you from the actual error messages?&lt;/u&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;Simple.&amp;nbsp; Go to the
&lt;b&gt;&lt;span style="color: blue;"&gt;&lt;u&gt;W&lt;/u&gt;indows&lt;/span&gt; &lt;/b&gt;in main menu bar.&amp;nbsp; Select
&lt;b&gt;&lt;span style="color: blue;"&gt;Preferences&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; On the left-hand column,
expand &lt;b&gt;&lt;span style="color: blue;"&gt;C/C++&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; Select &lt;b&gt;&lt;span style="color: blue;"&gt;Code Analysis&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; Scroll down a bit on the right-hand
column.&amp;nbsp; Look for the option &lt;b&gt;&lt;span style="color: blue;"&gt;Function
cannot be resolved&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; Then, it is up to
you to change this setting.&amp;nbsp; You can
uncheck the option for &lt;b&gt;&lt;span style="color: blue;"&gt;Function cannot be resolved&lt;/span&gt;&lt;/b&gt;.&amp;nbsp; Or, you can just change it to &lt;span style="color: blue;"&gt;&lt;b&gt;Info &lt;/b&gt;&lt;/span&gt;or &lt;span style="color: blue;"&gt;&lt;b&gt;Warning&lt;/b&gt;&lt;/span&gt;
from the drop-down list.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;i&gt;Important reminder, after applying the change of the
setting, don’t forget to close the Eclipse IDE and reopen it.&amp;nbsp; I noticed that without restarting the Eclipse
IDE, the new setting is not effective.&amp;nbsp;
After restarting the Eclipse IDE, you will notice that the two semantic
error messages above are no longer reported as error.&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglW3aZGHk9Y4BnUUMRZd7SImLwFM6cRojOH6ffrITjLAAaSyj2PFSYy8QSoFqzjhhbtKI6I6rxWFMrq0CmXLsycF4uE1fIOO410PDPCv0RUVqjwKblE-mKMK0kLEVQWqCPACbs/s1600/Function+cannot+be+resolved.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglW3aZGHk9Y4BnUUMRZd7SImLwFM6cRojOH6ffrITjLAAaSyj2PFSYy8QSoFqzjhhbtKI6I6rxWFMrq0CmXLsycF4uE1fIOO410PDPCv0RUVqjwKblE-mKMK0kLEVQWqCPACbs/s1600/Function+cannot+be+resolved.png" height="207" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; line-height: 107%; mso-ansi-language: EN-US;"&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglW3aZGHk9Y4BnUUMRZd7SImLwFM6cRojOH6ffrITjLAAaSyj2PFSYy8QSoFqzjhhbtKI6I6rxWFMrq0CmXLsycF4uE1fIOO410PDPCv0RUVqjwKblE-mKMK0kLEVQWqCPACbs/s72-c/Function+cannot+be+resolved.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Cyclone V needs Windows 64-bit</title><link>http://fpgaforum.blogspot.com/2013/10/cyclone-v-needs-windows-64-bit.html</link><category>Cyclone V</category><author>noreply@blogger.com (fpgaforum)</author><pubDate>Mon, 21 Oct 2013 08:30:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-6396720103781070572</guid><description>&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;Seeing Cyclone
V architecture is almost like a dream comes true, at least for me.&amp;nbsp; If you told me that this will be the Cyclone
V architecture ten years ago, I would laugh at you right away, “Are you sure
you are not talking about Stratix?”&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;By the way,
your fear is true, Quartus II compilation for Cyclone V FPGA device requires
Windows &lt;span style="color: red;"&gt;64-bit&lt;/span&gt; OS.&amp;nbsp; I had tried to
compile a few designs targeting Cyclone V FPGA using a &lt;span style="color: blue;"&gt;32-bit &lt;/span&gt;Windows 7
Professional laptop with 4Gbytes memory, it all ended with failure due to out
of memory.&amp;nbsp; In fact, one of the designs was a relatively
small design with around 1800 logic elements using the smallest Cyclone V GX
device 5CGXFC3BF7F23C8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;Anyway,
this is not a nightmare.&amp;nbsp; You just need
to plan ahead by preparing yourself a PC with Windows 64-bit OS if you are
serious in using any Cyclone V device in your new design.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: SimSun; mso-fareast-language: ZH-CN; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin;"&gt;&lt;br /&gt;&lt;/span&gt;






&lt;span lang="EN-US" style="font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: SimSun; mso-fareast-language: ZH-CN; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin;"&gt;Well, compiling a simple 32-bit counter won’t
crash, though.&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Quartus II 9.1 and NIOS II 9.1 on Windows 7</title><link>http://fpgaforum.blogspot.com/2010/04/quartus-ii-91-and-nios-ii-91-on-windows.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Wed, 14 Apr 2010 11:48:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-6411538807441233409</guid><description>I am sharing my personal experience here.  I have been using Quartus II 9.1 and NIOS II IDE 9.1 on Windows 7 since they were released.   Now, I am using Quartus II 9.1 SP2 and NIOS II IDE 9.1 SP2. &lt;div&gt; &lt;br /&gt;A lot of users were asking questions the compatibility of these softwares on Windows 7.&lt;br /&gt;Quartus II 9.1 and its SOPC builder seem to work fine on Windows 7 since the first day they are installed.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is the NIOS II IDE 9.1 that really bothered me.   Most of the time when you build a project, it will report error messages like two examples below.   The success rate is only 20%.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Example 1:&lt;br /&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span"  style="color:#3333FF;"&gt;make -s all includes&lt;br /&gt;     3 [main] ? (3732) c:\altera\91\quartus\bin\cygwin\bin\make.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x9E0000, top 0xB30000, reserve_size 1372160, allocsize 1376256, page_const 4096&lt;br /&gt;     2 [main] make 7588 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11&lt;br /&gt;make: vfork: Resource temporarily unavailable&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Example 2:&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#3366FF;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;make -s all includes&lt;br /&gt;     3 [main] ? (4980) c:\altera\91\quartus\bin\cygwin\bin\make.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x970000, top 0xA40000, reserve_size 847872, allocsize 851968, page_const 4096&lt;br /&gt;     2 [main] make 1972 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11&lt;br /&gt;make[1]: /cygdrive/c/altera/91/nios2eds/components/altera_hal/build/common.mk:54: fork: Resource temporarily unavailable&lt;br /&gt;     3 [main] ? (6092) c:\altera\91\quartus\bin\cygwin\bin\make.exe: *** fatal error - couldn't allocate heap, Win32 error 487, base 0x970000, top 0xA60000, reserve_size 978944, allocsize 983040, page_const 4096&lt;br /&gt;8408744 [main] make 1972 fork: child -1 - died waiting for longjmp before initialization, retry 0, exit code 0x100, errno 11&lt;br /&gt;make[1]: /cygdrive/c/altera/91/nios2eds/components/altera_hal/build/chac_rules.mk:147: fork: Resource temporarily unavailable&lt;br /&gt;make[1]: *** No rule to make target `/bin/gtf/generated_all.mk.gtf', needed by `system_description/../obj/generated_all.mk-t'.  Stop.&lt;br /&gt;make: *** [system_project] Error 2&lt;br /&gt;Build completed in 40.947 seconds&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Some says it is related to the Norton Antivirus software.  Yes, my PC is installed with Norton Antivirus software.  But I observed that it happened to Windows 7 PC which is not installed with Norton Antivirus software, as well.  Turning off the Norton Antivirus software does slightly help to increase the probability that the project is successfully built, from 20% to about 40%. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Anyway, I found some tricks which can make your life easier if you are using Nios II IDE 9.1 on Windows7.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Under your Quartus II folder, go to bin-&gt;cygwin-&gt;bin folder, select the following files in the list below and then right-click and choose Properties.  Under the Compatibility tab, &lt;b&gt;check &lt;/b&gt;“&lt;span class="Apple-style-span"  style="color:#33CC00;"&gt;Run this program in compatibility mode for:&lt;/span&gt;” and choose “&lt;span class="Apple-style-span"  style="color:#33CC00;"&gt;Windows XP (Service Pack 2)&lt;/span&gt;”.  Check “&lt;span class="Apple-style-span"  style="color:#33CC00;"&gt;Run this program as an administrator&lt;/span&gt;”, as well.&lt;br /&gt;Here is the list of files that you can select to change their compatibility mode under the Quartus II-&gt;bin-&gt;cygwin-&gt;bin folder:&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#CC0000;"&gt;1. Make.exe&lt;br /&gt;2. Sh.exe&lt;br /&gt;3. Echo.exe&lt;br /&gt;4. Cygstart.exe&lt;br /&gt;5. MakeInfo.exe&lt;br /&gt;6. Perl.exe&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#CC0000;"&gt;7. Collect2.exe&lt;/span&gt; (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\libexec\gcc\nios2-elf\3.4.6)&lt;br /&gt;&lt;span class="Apple-style-span"  style="color:#CC0000;"&gt;8. Nios2-elf-g++.exe&lt;/span&gt;  (under nios2eds\bin\nios2-gnutools\ H-i686-pc-cygwin\bin)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By doing the steps mentioned above, the success rate of building a project in NIOS II IDE 9.1 will be increased to above 90%.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total></item><item><title>When your Altera USB-Blaster is not working ...</title><link>http://fpgaforum.blogspot.com/2008/10/when-your-altera-usb-blaster-is-not.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Fri, 3 Oct 2008 14:46:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-4446310522317710641</guid><description>When your USB-Blaster is not working and you have verified that it is neither USB Driver issue nor PCs issue nor USB cables issue, there is no need to feel disappointed, frustrated and throw away the USB Blaster which worth USD$300 market value yet.&lt;br /&gt;&lt;br /&gt;There is still hope to salvage your USB Blaster.  You can try to replace both the MAXIM low-voltage level translator parts (part number: MAX3378E) on the small USB-Blaster board.  Usually, I found that both the MAXIM parts need to be replaced when I came across a bad USB-Blaster.  Their reference designators on the small USB-Blaster board are labeled U2 and U5, respectively.&lt;br /&gt;&lt;br /&gt;Alternatively, if you can’t find the MAXIM parts, you can use Texas Instruments 4-bit bidirectional voltage-level translator with part number TXS0104EPWRG4.  It works equally fine and slightly cheaper, too.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">14</thr:total></item><item><title>Thick Film Resistor vs Thin Film Resistor</title><link>http://fpgaforum.blogspot.com/2007/09/thick-film-resistor-vs-thin-film.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Thu, 6 Sep 2007 15:21:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-1235032523286900878</guid><description>If you are a system designer, you probably always find that there are two kinds of chip resistor, which are thick film resistor and thin film resistor.  The question is, what is the difference between thick film resistor and thin film resistor?&lt;br /&gt;&lt;br /&gt;Found &lt;a href="http://www.usmicrowaves.com/appnotes/thin_film_resistors_versus_thick_film_resistors_how_they_compare_usm_app_note110.htm"&gt;this site&lt;/a&gt; that explains the difference.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></item><item><title>Cyclone series continues ...</title><link>http://fpgaforum.blogspot.com/2007/03/cyclone-series-continues.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 31 Mar 2007 09:03:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-699691734013413738</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTgaSbEXmq3QGxzX8fboZI1xjfA1kfPbK8KaUEF_h5a2DOCWXSFwlNtp929e6BWicgRkQwBr5G9Q0b62gGHBsISlTytPs5onAuxyek6YM5Nm85Yvn7ZBdAcvUVuDJ_yRVSyLUt/s1600-h/cycIII.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTgaSbEXmq3QGxzX8fboZI1xjfA1kfPbK8KaUEF_h5a2DOCWXSFwlNtp929e6BWicgRkQwBr5G9Q0b62gGHBsISlTytPs5onAuxyek6YM5Nm85Yvn7ZBdAcvUVuDJ_yRVSyLUt/s320/cycIII.jpg" alt="" id="BLOGGER_PHOTO_ID_5048126524714171314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Finally, Altera launched Cyclone III, after a couple of months lauching Stratix III.&lt;span style=""&gt;  &lt;/span&gt;Of course, success stories should be continued...&lt;span style=""&gt;  &lt;/span&gt;That's why we still see Cyclone III and Stratix III today.&lt;span style=""&gt;  &lt;/span&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;To be honest, I anticipated improvement on the Cyclone III logic elements architecture compared with Cyclone II, such as implementing a 5-input LUT in a logic element.&lt;span style=""&gt;  &lt;/span&gt;Nonetheless, other improved features are pretty interesting, too.&lt;span style=""&gt;  &lt;/span&gt;I am particularly excited with M9K, PLL reconfiguration and improved I/O element.&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;      &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;The cost is an important factor when you are evaluating a new device.&lt;span style=""&gt;  &lt;/span&gt;However, the cost factor is never mentioned in the data sheet or handbook.&lt;span style=""&gt;  &lt;/span&gt;I am referring to Digikey for cost comparison among all the Cyclone series families.&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;EP3C25 is chosen as benchmark as it is the only Cyclone III FPGA available now.&lt;span style=""&gt;  &lt;/span&gt;The Cyclone II and Cyclone FPGAs that come closest to this density are EP2C20 and EP1C20, respectively.&lt;span style=""&gt;  &lt;/span&gt;No doubt, from the table below, Cyclone III is certainly worth considered if you have a new design to start with a low-cost FPGA.&lt;span style=""&gt;  &lt;/span&gt;At a slightly lower price, you can get a higher performance, same density and twice internal memory size for Cyclone III FPGA, compared with Cyclone II and Cyclone I.&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div align="center"&gt;  &lt;table class="MsoTableGrid" style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid windowtext; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;Cyclone series&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;EP3C25F256C8NES&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;EP2C20F256C8&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: windowtext windowtext windowtext -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;EP1C20F324C8&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color windowtext windowtext; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;Price&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;$44.80&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;$42.70&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 110.7pt;" valign="top" width="148"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;$60.00&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;/div&gt;    &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;Low power consumption seems to be the highlight for Cyclone III in the Altera marketing slides.&lt;span style=""&gt;  &lt;/span&gt;Unfortunately, that doesn’t interest me too much as I am not working very much on the portable designs.&lt;span style=""&gt;  &lt;/span&gt;Anyway, I still hope to use 65-nm Cyclone III and Stratix III parts for my new coming designs.&lt;/p&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTgaSbEXmq3QGxzX8fboZI1xjfA1kfPbK8KaUEF_h5a2DOCWXSFwlNtp929e6BWicgRkQwBr5G9Q0b62gGHBsISlTytPs5onAuxyek6YM5Nm85Yvn7ZBdAcvUVuDJ_yRVSyLUt/s72-c/cycIII.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Can PLL self-locked without "External" input?</title><link>http://fpgaforum.blogspot.com/2006/10/can-pll-self-locked-without-external.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 14 Oct 2006 04:50:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-116082689198881670</guid><description>I was busy working on something and suddenly a crazy idea came up.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/PLL_feedback.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/PLL_feedback.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Can a PLL lock itself if I connect a PLL output clock to the PLL input clock on a PCB and both the PLL multiplication and division value is set to 1? I expected the answer is no, of course. But the curiosity kills sometimes. So, I went ahead and did the simple test.&lt;br /&gt;&lt;br /&gt;I was using a Cyclone II device. Surprisingly, I saw the PLL locked output signal went high. However, the output signal frequency wasn't the expected frequency (10MHz). I probed at the PLL output clock (which was also connected to the PLL input clock signal), it showed about 420kHz.&lt;br /&gt;&lt;br /&gt;So, what is the conclusion of this story? Nothing.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Lattice Now Blogs!</title><link>http://fpgaforum.blogspot.com/2006/09/lattice-now-blogs.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 2 Sep 2006 19:32:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-115725237473734336</guid><description>Insteresting!  Lattice now blogs!  A lots of non-confidential-but-technical information out &lt;a href="http://latticeblogs.typepad.com/frontier/"&gt;there&lt;/a&gt;! &lt;br /&gt;It is always nice to see a FPGA vendor takes initiative to provide a platform for their knowledgable engineers to share their experience and knowledge.  The good thing is that the knowledge shared is not only limited to Lattice products but all the vendors FPGA. &lt;br /&gt;I know it is not easy for the writers as they now have one more repeatitive task in their long to-do list besides their daily jobs.  Anyway, I hope they continue doing this!  Bravo to all the writers!</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Embed Tclet in Your HTML</title><link>http://fpgaforum.blogspot.com/2006/08/embed-tclet-in-your-html.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Tue, 1 Aug 2006 09:18:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-115445371484445101</guid><description>Since started this blog, I found out that I need to study a minimum amount of HTML to display my writing correctly. Besides, I can have more control writing in "HTML mode" compared with "Compose mode". For an example, you can't just type the symbol "&amp;lt;" in your blog message, instead, you need to type "&amp;amp;lt;" to display "&amp;lt;" in your blog. Don't get me wrong, I am not trying to show off my HTML skills. In fact, I only have very basic and minimum knowledge about HTML.&lt;br /&gt;&lt;br /&gt;Anyway, if I am not wrong (considering myself not a webmaster), it seems like HTML alone doesn't have the ability to let you do real-time programming stuff on your web browser, such as Mozilla Firefox or Internet Explorer. However, it can be done using a plugin.&lt;br /&gt;&lt;br /&gt;There are many different types of plugins out there, but I choose to use Tcl applet or &lt;em&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Tclet&lt;/span&gt;&lt;/em&gt; since I did some study on this language before. (If you've never heard of the Tcl/Tk language before, you can visit &lt;a href="http://fpgaforum.blogspot.com/2006/02/interesting-tcl-language.html"&gt;here&lt;/a&gt;.) I don't know how to embed a &lt;em&gt;Tclet&lt;/em&gt; properly in blogspot. However, I manage to do it on another &lt;a href="http://fpgaforum.741.com/gray/gray.htm"&gt;free site&lt;/a&gt;. This &lt;em&gt;Tclet&lt;/em&gt; in this free site is to display all the gray code counter results in sequence after you have entered the number of bits your gray code counter is. I don't know how useful it is to you, but it is useful to me because I always forget how the gray code counter increments. Bear in mind that if you are a first-time user or viewer, you need to download and install the &lt;a href="http://www.tcl.tk/software/plugin/"&gt;Tcl Web Browser Plugin&lt;/a&gt; for free. And, of course, it is SAFE to be installed in your PC. If you haven't installed it yet, you will see a blank square instead of the picture &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/GrayCounter.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/8119/2165/200/GrayCounter.jpg" alt="" border="0" /&gt;&lt;/a&gt;on the left side &lt;a href="http://fpgaforum.blogspot.com/2006/02/interesting-tcl-language.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It will be a bit long for me to describe how to embed &lt;em&gt;Tclet&lt;/em&gt; in your HTML code here. The best source is the reference book that I show in &lt;a href="http://fpgaforum.blogspot.com/2006/02/interesting-tcl-language.html"&gt;here&lt;/a&gt;. Of course, you can look at the HTML code in the &lt;a href="http://fpgaforum.741.com/gray/gray.htm"&gt;example above&lt;/a&gt;. Plenty of funky Tclet examples can also be easily found on web if you are interested to see others. Hope you like it.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Save More Power In Handheld Devices</title><link>http://fpgaforum.blogspot.com/2006/07/save-more-power-in-handheld-devices.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Thu, 13 Jul 2006 09:26:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-115281031842106482</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/cpldbatterypower.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/8119/2165/320/cpldbatterypower.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;How to save more power when your CPLD device is in idle mode?&lt;br /&gt;Use a very slow clock to reduce toggle rate? Partially disabling the logic inside the device? Well, why not powering off the device?&lt;br /&gt;I came across this interesting &lt;a href="http://www.ednasia.com/article-7306-cpldautomaticallypowersitselfoff-Asia.html"&gt;article&lt;/a&gt; by accident and found it a simple yet smart idea to prolong the battery life of a portable handheld devices.  In future, if I have the chance to design a portable product with interactive user interface, this idea will surely be the first one to cross my mind.&lt;br /&gt;If for whatever reason, you have to use a FPGA in a battery-operated product, this &lt;a href="http://www.ednasia.com/article-7306-cpldautomaticallypowersitselfoff-Asia.html"&gt;article&lt;/a&gt; will sure help you more.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>OP-AMP Configurations Recall</title><link>http://fpgaforum.blogspot.com/2006/07/op-amp-configurations-recall.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sun, 2 Jul 2006 08:58:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-115185595681579322</guid><description>It has been a while since I last dealed with op-amp. So, it is good to recall some of the most fundamental op-amp configurations, especially when I am dealing with them recently. &lt;br /&gt;In my opinion, op-amp is like logic gates in analog world.  You need op-amps to transfer your analog inputs into your desired analog outputs. &lt;br /&gt;The following are some important notes for me, not for you, of course, :)!&lt;br /&gt;&lt;br /&gt;&lt;table bgcolor="yellow" border="1" frame="border"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Common Names&lt;/th&gt;&lt;th&gt;Op-Amp Circuits&lt;/th&gt;&lt;th&gt;Transfer Functions&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Voltage Follower Amplifier&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Voltage_Follower_Amplifier.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/200/Voltage_Follower_Amplifier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Vout = Vin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Inverting Amplifier&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Inverting_Amplifier.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/200/Inverting_Amplifier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Vout = -(Rf/Rs)Vin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Noninverting Amplifier&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Noninverting_Amplifier.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/200/Noninverting_Amplifier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Vout = (1+R2/R1)Vin&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Difference Amplifier&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Difference_Amplifier.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/200/Difference_Amplifier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If R1/R2 = R3/R4, &lt;br&gt;Vout = (V&lt;sub&gt;in+&lt;/sub&gt; - V&lt;sub&gt;in-&lt;/sub&gt;)(R2/R1) + V&lt;sub&gt;shift&lt;/sub&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Summing Amplifier&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Summing_Amplifier.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/200/Summing_Amplifier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Vout = (R2/R1)* (V1+V2-V3-V4)&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Embedded Logic Analyzer inside FPGA</title><link>http://fpgaforum.blogspot.com/2006/06/embedded-logic-analyzer-inside-fpga.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sun, 4 Jun 2006 02:57:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114941565952069107</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/Altera_SignalTapII.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/Altera_SignalTapII.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;There is no reason to doubt that most of the FPGA users like you and me have gone through some painful experiences wanting to know what is happening inside an FPGA. It is even more painful when you strongly believe your code is working fine and you don’t have any clue which part of the design is causing you sleepless nights. You keep on routing all the suspected internal signals to the very limited unused I/O pins of your FPGA and then probe and trigger them on your oscilloscope that usually has only four channels or LESS! Sad to say, the oscilloscope couldn’t help much in situation like this unless it is related to the signal integrity issue.&lt;br /&gt;&lt;br /&gt;If you are lucky, you can have a logic analyzer instrument to sample a lot of signals for your analysis and verification. Well, if you are not, good news for you, you can insert an embedded logic analyzer inside your FPGA and it is totally licensed-free, at least for Altera FPGA users! The Altera Embedded Logic Analyzer tool named SignalTap II is &lt;em&gt;&lt;span style="color:#ff0000;"&gt;FREE&lt;/span&gt;&lt;/em&gt; for use even you don’t purchase any software license from Altera. That means you can use your SignalTap II inside Quartus II Web Edition software for &lt;em&gt;&lt;span style="color:#ff0000;"&gt;FREE&lt;/span&gt;&lt;/em&gt; provided that you install and enable the TalkBack Feature of Quartus II software.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/SignalTapII.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/SignalTapII.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The SignalTap II works almost like a logic analyzer equipment but at a very much smaller scale as it has very limited on-chip memory to store the sampled data. Other logic analyzer’s features such as Rising-Edge triggering, Falling-Edge triggering, Either-Edge triggering, Boolean triggering, Multi-Level triggering and others are also available in the SignalTap II tool. In fact, you can also instantiate up to 127 SignalTap II instances in your design, as long as it can fit in your chosen FPGA device. You can imagine each instance of SignalTap II is a small scale of logic analyzer equipment which also has an external trigger-in and trigger-out. And, the input of the trigger-in can come from other instances trigger-out or I/O pins or any internal logic signal. I think this is an advantage to the SignalTap II because a logic analyzer equipment trigger-in must come from one of your device I/O pins, isn’t it? Anyway, I rarely make use of the trigger-in, trigger-out and the multiple analyzer features because I prefer to monitor all my signals in just one analyzer. Why bother creating so many instances of analyzer where it doesn’t help saving you any logic and memory resource at all? One of the reasons is you need to have different acquisition clocks for the signals that you are interested to tap. It could also be you have different sample depth requirement for your acquiring signals and etc.&lt;br /&gt;&lt;br /&gt;The purpose of this post is not to teach you using SignalTap II, but to make you aware of the availability of this tool if you haven’t come across or heard of this tool. My life as a FPGA user would have been a lot easier if I learnt to use this tool immediately after learning Quartus II. Instead, I only had the chance to pick up this tool after about one year being an Altera user. It is worth every moment to learn and pick up this tool as it makes your debugging process simpler and a lot faster. Unlike Xilinx’s ChipScope Pro, you don’t need to install the SignalTap II tool separately. It comes together with Quartus II and it is available after the Quartus II installation is done.&lt;br /&gt;&lt;br /&gt;Last but not least, thanks to Altera that the SignalTap II is &lt;strong&gt;&lt;em&gt;&lt;span style="color:#ff0000;"&gt;FREE&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;!!</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>USB-Blaster vs Platform Cable USB</title><link>http://fpgaforum.blogspot.com/2006/05/usb-blaster-vs-platform-cable-usb.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Fri, 19 May 2006 11:48:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114806563293681824</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/Platform_Cable_USB.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/Platform_Cable_USB.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Both USB-Blaster and Platform Cable USB are the USB download cables provided by Altera and Xilinx, respectively. Most of time, the download cable is a necessity while developing and debugging your design in the FPGA. You need them to download the FPGA configuration bitstream through JTAG or Passive/Slave serial mode, to program the CPLD, to program the configuration device, to download your firmware into the soft processor and to tap the signals inside the FPGA through the FPGA embedded logic analyzer. Both of them are able to achieve all the above-mentioned purposes. But what is the main difference between them? The &lt;strong&gt;&lt;span style="color:#ff0000;"&gt;SELLING PRICE&lt;/span&gt;&lt;/strong&gt;!!! The USB-Blaster costs USD$300 while the Platform Cable USB only costs half the price of the USB-Blaster, which is USD$149. This is really killing me because sometimes I need to use more than one download cable at the same time when dealing with multi-FPGA environment. Why can’t the Altera USB-Blaster at least cost the same like the Xilinx Platform Cable USB? In fact, Xilinx Platform Cable USB has even more features than USB-Blaster such as programming the configuration clock frequency. The USB-Blaster operates at USB full speed, which is 12Mbps, while the Platform Cable USB can operate at USB high speed!&lt;br /&gt;&lt;br /&gt;Frankly speaking, the download cable should cost as cheap as possible by the FPGA vendors because they should be making money from selling their FPGA and CPLD devices, not from selling the download cables. Similar to the Quartus II and ISE web edition software tool, the download cable should just be a marketing tool to help promote the usage of FPGA or CPLD solutions! Imagine if I am a newbie who want to learn to use FPGA or CPLD on my own, it doesn’t make sense for me to buy a tool that is much much more expensive than a single low-cost FPGA/CPLD device.&lt;br /&gt;&lt;br /&gt;Anyway, just for your reference, I also compare the cost of download cables that use the PC parallel port interface which are Altera ByteBlaster II, USD$150 and Xilinx Parallel Cable IV, USD$95. Once again, Xilinx is the winner when it comes to the price war. Is this the reason Xilinx being the market leader? Well, you know better.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;color:#ffffff;"&gt;/////////////////////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;color:#ffffff;"&gt;// Disclaimer: All the price stated above are extracted from Altera Buy On-Line and Xilinx Online Store websites at the posting time and may change from time to time in future.&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total></item><item><title>Convert Floating Point to String</title><link>http://fpgaforum.blogspot.com/2006/05/convert-floating-point-to-string.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Fri, 5 May 2006 03:27:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114682529803462972</guid><description>A few months ago, I found out that there is no built-in function for converting a floating point data type variable to a string although there are functions that do the following:&lt;br /&gt;&lt;br /&gt;1. &lt;span style="color: rgb(51, 102, 255);"&gt;Convert a string to floating point&lt;/span&gt; (&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;atof&lt;/span&gt;&lt;/strong&gt;)&lt;br /&gt;2. &lt;span style="color: rgb(51, 102, 255);"&gt;Convert an integer to string&lt;/span&gt; (&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;itoa&lt;/span&gt;&lt;/strong&gt;)&lt;br /&gt;3. &lt;span style="color: rgb(51, 102, 255);"&gt;Convert a string to an integer&lt;/span&gt; (&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;atoi&lt;/span&gt;&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;All the above functions come in very handy when you want to write your data to a text file. It is quite intriguing because &lt;em&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;itoa()&lt;/span&gt;&lt;/em&gt;, &lt;em&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;atoi()&lt;/span&gt;&lt;/em&gt; and &lt;span style="color: rgb(255, 0, 0);"&gt;&lt;em&gt;atof()&lt;/em&gt;&lt;/span&gt; are provided but &lt;strong&gt;&lt;em&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;ftoa()&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt; are not. Unfortunately, many data are floating points in nature. Also, data that are larger than a 32-bit integer are usually represented as floating point data type. Anyway, many programming experts have already provided &lt;em&gt;&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;ftoa()&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; solution on their websites. I believe it is not difficult to find one out there but I would like to have my very own one, too, as it is no harm trying. The C/C++ code is as shown below. I have tested it in the Microsoft Visual C++ compiler but I do not cover all the possible cases. So, use it on your own risk. It is not the best solution available for &lt;em&gt;&lt;strong&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;ftoa()&lt;/span&gt;&lt;/strong&gt;&lt;/em&gt; but it certainly enough to meet my purposes. If you need one, I hope that it helps you, as well. If not, you can always write one for yourself.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;//////////////////////////////////////////////////////////////// &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;// my_ftoa.cpp&lt;br /&gt;// date created: May 5, 2006&lt;br /&gt;// author: &lt;/span&gt;&lt;a href="http://fpgaforum.blogspot.com/"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;http://fpgaforum.blogspot.com/&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;#include&lt;/span&gt; &amp;lt;cmath&amp;gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;using namespace std&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;#define&lt;/span&gt; PRECISION_POINT 4 &lt;span style="color: rgb(51, 204, 0);"&gt;//Change this to display more or less precision point&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;void&lt;/span&gt; ftoa(&lt;span style="color: rgb(204, 0, 0);"&gt;float&lt;/span&gt; f, &lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt;* a, &lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; point); &lt;span style="color: rgb(51, 204, 0);"&gt;//function prototype&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;void&lt;/span&gt; main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;float&lt;/span&gt; f = -1.23456;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt; result[32];&lt;br /&gt;&amp;nbsp;&amp;nbsp;ftoa(f,result, PRECISION_POINT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt result; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;void&lt;/span&gt; ftoa(&lt;span style="color: rgb(204, 0, 0);"&gt;float&lt;/span&gt; f, &lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt;* a, &lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; point)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt; buf_int [2]; &lt;span style="color: rgb(51, 204, 0);"&gt;//temporary buffer&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt; buf_d [16]; &lt;span style="color: rgb(51, 204, 0);"&gt;//to store the integral part, e.g. "-123" for "-123.456"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt; buf_f [16]; &lt;span style="color: rgb(51, 204, 0);"&gt;//to store all the fraction part, e.g. "000123" for "1.&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;000123"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;char&lt;/span&gt; buf_nz [16]; &lt;span style="color: rgb(51, 204, 0);"&gt;//to store the non-zero fraction part, e.g. "123" for "1.000123"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; d= (&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt;)(f); &lt;span style="color: rgb(51, 204, 0);"&gt;//integral part&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;float&lt;/span&gt; fp = (f&amp;lt;0) ? (d-f) : (f-d); &lt;span style="color: rgb(51, 204, 0);"&gt;//fractional part&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; fp2int = fp*(pow(10,point));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; fpplus1 = fp*(pow(10,point+1));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;if&lt;/span&gt;((fpplus1%10)&amp;gt=5)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fp2int++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy(buf_int,"");&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy(buf_d,""); &lt;span style="color: rgb(51, 204, 0);"&gt;//clear the buffer, just to be safe&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy(buf_f,""); &lt;span style="color: rgb(51, 204, 0);"&gt;//clear the buffer, just to be safe&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;strcpy(buf_nz,""); &lt;span style="color: rgb(51, 204, 0);"&gt;//clear the buffer, just to be safe &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;if&lt;/span&gt;((d == 0) &amp;&amp; (f&amp;lt;0)  &amp;&amp; (f&amp;gt;-1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcat(buf_d,"-");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;itoa(d,buf_int,10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcat(buf_d,buf_int);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;itoa(d,buf_d,10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcat(buf_d,".");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 204, 0);"&gt;//looking for the leading zeros at the fractional part&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;if&lt;/span&gt;(fp2int == 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;for&lt;/span&gt;(&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; i = 0; i &amp;lt point-1; i++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcat(buf_f,"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;else if&lt;/span&gt;(fp2int &amp;lt (pow(10,point-1))) &lt;br /&gt;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;for&lt;/span&gt;(&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; i = 0; i &amp;lt point; i++) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;int&lt;/span&gt; j = pow(10,(point-1-i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;if&lt;/span&gt;(fp2int &amp;lt j)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strcat(buf_f,"0");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(204, 0, 0);"&gt;else    break&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;itoa(fp2int,buf_nz,10);&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcat(buf_f,buf_nz);&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcat(buf_d,buf_f);&lt;br /&gt;&amp;nbsp;&amp;nbsp;strcpy(a,buf_d);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;// The end&lt;br /&gt;//////////////////////////////////////////////////////////////// &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Tcl Script to Automate Quartus II Compilation</title><link>http://fpgaforum.blogspot.com/2006/04/tcl-script-to-automate-quartus-ii.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Fri, 21 Apr 2006 09:41:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114563849817141152</guid><description>Below is a sample Tcl script that I use to automate the compilation of my Quartus II projects overnight or over the weekend.  You can easily find more information about the usage by just typing "tcl" on the Altera search column in &lt;a href="http://www.altera.com"&gt;www.altera.com&lt;/a&gt; and you can easily get some examples over there. The most relevant reading material for Quartus II tool specific scripts would be the &lt;a href="http://www.altera.com/literature/hb/qts/qts_qii52003.pdf"&gt;Tcl Scripting&lt;/a&gt; chapter of the Quartus II Handbook.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;############################################&lt;br /&gt;## auto_compile.tcl&lt;br /&gt;## date created : April 9, 2006&lt;br /&gt;## author : http://fpgaforum.blogspot.com&lt;br /&gt;############################################&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;###Assume that the objective of this script is to compile&lt;br /&gt;###a similar project twice, one with a minimum current strength&lt;br /&gt;###and the other with a maximum current strength.&lt;br /&gt;###(Sometimes you need to do some characterization of the current&lt;br /&gt;###strength on your hardware!)&lt;br /&gt;###The final product is two sof files, one for the minimum&lt;br /&gt;###current strength and the other one for the maximum&lt;br /&gt;###current strength. This means that this script will also rename&lt;br /&gt;###the sof file for after every compilation to avoid being overwritten&lt;br /&gt;###on the next compilation cycle&lt;br /&gt;&lt;br /&gt;###go to project folder in command prompt&lt;br /&gt;### Then type &lt;span style="color: rgb(51, 51, 255);"&gt;quartus_sh -s&lt;/span&gt;&lt;br /&gt;### Verify the Quartus II Version number is as targeted, if you have multiple&lt;br /&gt;### versions of Quartus II on your PC&lt;br /&gt;### After verified, type the following command:&lt;br /&gt;### &lt;span style="color: rgb(51, 51, 255);"&gt;source (This filename.tcl)&lt;/span&gt;&lt;br /&gt;### OR&lt;br /&gt;### Open the Quartus II project, then open up the Quartus II Tcl Console by&lt;br /&gt;### go to View-&gt;Utility Windows-&gt;Tcl Console&lt;br /&gt;### In the Quartus II Tcl Console, type the following command if the tcl script&lt;br /&gt;### is placed in the project folder:&lt;br /&gt;###&lt;span style="color: rgb(51, 51, 255);"&gt; source (This filename.tcl)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;########## TCL script starts #################&lt;br /&gt;&lt;br /&gt;####### Auto Compilation TCL Script ############&lt;br /&gt;#change the following line according to your Quartus II project folder##&lt;br /&gt;##assume the 1st project that I want to compile is in the following folder&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;cd D:/data/project1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;##This is to set the minimum current strength&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set project_name project1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set revision_name project1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;project_open -revision $revision_name $project_name;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_global_assignment -name Family StratixII&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_global_assignment -name DEVICE EP2S60F1020C3ES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#some assignments to the pins. Of course, I am not going to list all&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[1]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;load_package flow&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;execute_flow -compile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;project_close&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set sof [pwd]/project1.sof&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;if [file exists $sof] {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;file rename $sof project1_MIN.sof&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;} else {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;puts "ERROR! RENAME $sof to project1_MIN.sof"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;###======================================&lt;br /&gt;&lt;br /&gt;##This is to set the maximum current strength&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;set project_name project1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;set revision_name project1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;project_open -revision $revision_name $project_name;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;set_global_assignment -name Family StratixII&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;set_global_assignment -name DEVICE EP2S60F1020C3ES&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;#some assignments to the pins. Of course, I am not going to list all&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[1]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;load_package flow&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;execute_flow -compile&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;project_close&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;set sof [pwd]/project1.sof&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;if [file exists $sof] {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;file rename $sof project1_MAX.sof&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;} else {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;puts "ERROR! RENAME $sof to project1_MAX.sof"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;###======================================&lt;br /&gt; ########## TCL script ends #################</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><enclosure length="0" type="application/pdf;charset=UTF-8" url="http://www.altera.com/literature/hb/qts/qts_qii52003.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>Below is a sample Tcl script that I use to automate the compilation of my Quartus II projects overnight or over the weekend. You can easily find more information about the usage by just typing "tcl" on the Altera search column in www.altera.com and you can easily get some examples over there. The most relevant reading material for Quartus II tool specific scripts would be the Tcl Scripting chapter of the Quartus II Handbook. ############################################ ## auto_compile.tcl ## date created : April 9, 2006 ## author : http://fpgaforum.blogspot.com ############################################ ###Assume that the objective of this script is to compile ###a similar project twice, one with a minimum current strength ###and the other with a maximum current strength. ###(Sometimes you need to do some characterization of the current ###strength on your hardware!) ###The final product is two sof files, one for the minimum ###current strength and the other one for the maximum ###current strength. This means that this script will also rename ###the sof file for after every compilation to avoid being overwritten ###on the next compilation cycle ###go to project folder in command prompt ### Then type quartus_sh -s ### Verify the Quartus II Version number is as targeted, if you have multiple ### versions of Quartus II on your PC ### After verified, type the following command: ### source (This filename.tcl) ### OR ### Open the Quartus II project, then open up the Quartus II Tcl Console by ### go to View-Utility Windows-Tcl Console ### In the Quartus II Tcl Console, type the following command if the tcl script ### is placed in the project folder: ### source (This filename.tcl) ########## TCL script starts ################# ####### Auto Compilation TCL Script ############ #change the following line according to your Quartus II project folder## ##assume the 1st project that I want to compile is in the following folder cd D:/data/project1 ##This is to set the minimum current strength set project_name project1 set revision_name project1 project_open -revision $revision_name $project_name; set_global_assignment -name Family StratixII set_global_assignment -name DEVICE EP2S60F1020C3ES #some assignments to the pins. Of course, I am not going to list all set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[0] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[1] load_package flow execute_flow -compile project_close set sof [pwd]/project1.sof if [file exists $sof] { file rename $sof project1_MIN.sof } else { puts "ERROR! RENAME $sof to project1_MIN.sof" } ###====================================== ##This is to set the maximum current strength set project_name project1 set revision_name project1 project_open -revision $revision_name $project_name; set_global_assignment -name Family StratixII set_global_assignment -name DEVICE EP2S60F1020C3ES #some assignments to the pins. Of course, I am not going to list all set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[0] set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[1] load_package flow execute_flow -compile project_close set sof [pwd]/project1.sof if [file exists $sof] { file rename $sof project1_MAX.sof } else { puts "ERROR! RENAME $sof to project1_MAX.sof" } ###====================================== ########## TCL script ends #################</itunes:subtitle><itunes:author>noreply@blogger.com (fpgaforum)</itunes:author><itunes:summary>Below is a sample Tcl script that I use to automate the compilation of my Quartus II projects overnight or over the weekend. You can easily find more information about the usage by just typing "tcl" on the Altera search column in www.altera.com and you can easily get some examples over there. The most relevant reading material for Quartus II tool specific scripts would be the Tcl Scripting chapter of the Quartus II Handbook. ############################################ ## auto_compile.tcl ## date created : April 9, 2006 ## author : http://fpgaforum.blogspot.com ############################################ ###Assume that the objective of this script is to compile ###a similar project twice, one with a minimum current strength ###and the other with a maximum current strength. ###(Sometimes you need to do some characterization of the current ###strength on your hardware!) ###The final product is two sof files, one for the minimum ###current strength and the other one for the maximum ###current strength. This means that this script will also rename ###the sof file for after every compilation to avoid being overwritten ###on the next compilation cycle ###go to project folder in command prompt ### Then type quartus_sh -s ### Verify the Quartus II Version number is as targeted, if you have multiple ### versions of Quartus II on your PC ### After verified, type the following command: ### source (This filename.tcl) ### OR ### Open the Quartus II project, then open up the Quartus II Tcl Console by ### go to View-Utility Windows-Tcl Console ### In the Quartus II Tcl Console, type the following command if the tcl script ### is placed in the project folder: ### source (This filename.tcl) ########## TCL script starts ################# ####### Auto Compilation TCL Script ############ #change the following line according to your Quartus II project folder## ##assume the 1st project that I want to compile is in the following folder cd D:/data/project1 ##This is to set the minimum current strength set project_name project1 set revision_name project1 project_open -revision $revision_name $project_name; set_global_assignment -name Family StratixII set_global_assignment -name DEVICE EP2S60F1020C3ES #some assignments to the pins. Of course, I am not going to list all set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[0] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to data_bus[1] load_package flow execute_flow -compile project_close set sof [pwd]/project1.sof if [file exists $sof] { file rename $sof project1_MIN.sof } else { puts "ERROR! RENAME $sof to project1_MIN.sof" } ###====================================== ##This is to set the maximum current strength set project_name project1 set revision_name project1 project_open -revision $revision_name $project_name; set_global_assignment -name Family StratixII set_global_assignment -name DEVICE EP2S60F1020C3ES #some assignments to the pins. Of course, I am not going to list all set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[0] set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to data_bus[1] load_package flow execute_flow -compile project_close set sof [pwd]/project1.sof if [file exists $sof] { file rename $sof project1_MAX.sof } else { puts "ERROR! RENAME $sof to project1_MAX.sof" } ###====================================== ########## TCL script ends #################</itunes:summary></item><item><title>The Secret of NIOS II Success</title><link>http://fpgaforum.blogspot.com/2006/04/secret-of-nios-ii-success.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Wed, 19 Apr 2006 09:50:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114546625104088015</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/qts2_niosii.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/8119/2165/320/qts2_niosii.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Altera NIOS II &lt;a href="http://fpgaforum.blogspot.com/2006/01/soft-processor-in-fpga.html"&gt;soft processor&lt;/a&gt; has been known as the world’s most versatile embedded processors.  What is the reason behind since in my opinion the CPU architecture is more or less the same compared with other processors?  In my opinion, the unsung hero that contributes to the success of the NIOS II processor is the Avalon Switch Fabric.  I find it a bit weird that Altera or distributors does not put very much effort in &lt;span style="font-weight: bold;"&gt;directly&lt;/span&gt; marketing the &lt;a href="http://www.altera.com/literature/manual/mnl_avalon_spec.pdf"&gt;Avalon Interface Specification&lt;/a&gt; introduced by Altera years ago.  I strongly believe that the user-friendly Avalon Interface is one of the main reasons engineers choosing NIOS II processor over their main rival’s Xilinx MicroBlaze processor.  It doesn’t matter whether you are designing a master or slave peripheral, as long as your own-designed peripheral supports Avalon Interface, your peripheral can communicate with others peripheral, including NIOS II processor flawlessly as the Avalon Switch Fabric will handle the communication for you.&lt;br /&gt;&lt;br /&gt;The Avalon Switch Fabric is generated by Altera SOPC Builder that comes together with Quartus II software tool.  That means after installing Quartus II, you do not need to worry about installing the SOPC Builder as it is part of Quartus II software.  I like this because I don’t like to open a few application softwares at the same time doing one job.  Another good point to mention about the SOPC Builder is the evaluation is free and valid for unlimited period.  You just have to re-apply a new Quartus II web edition license about every three months through internet and the license will be sent to your email in split seconds. Too bad that the newly-announced NIOS II C-to-Hardware Acceleration (C2H) Compiler is not available for evaluation to the public without going through the Altera distributors.  I am very curious with the improvement achieved using the C2H compiler.&lt;br /&gt;&lt;br /&gt;Although many free peripherals that support Avalon interface are available, such as SDRAM controller, DDR SDRAM controller, interval timer, DMA module, UART, etc, it is still very critical to be able to connect your custom IP to the Avalon Switch Fabric.  You will find yourself in a situation at times where you need to complete a lot of intensive calculation work within a very short period of time in FPGA.  Some good examples are carrying out blemish test for a camera module and CRC checking for a large amount of data.  Most of the time, the intensive calculation part takes too much time in C and therefore you can design your own IP in &lt;a href="http://fpgaforum.blogspot.com/2006/01/c-or-hdl-in-fpga.html"&gt;HDL&lt;/a&gt; to achieve the performance needed.  The purpose of the new C2H compiler is to help the software designers who are not familiar with HDL to accelerate the software functions in their systems.  I don’t know how good they are yet without evaluation but I truly believe that if you know HDL, you are still the best person to do the parallel processing in hardware for yourself.&lt;br /&gt;&lt;br /&gt;The Avalon Interface uses very easy-to-understand signal types, such as &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;chipselect&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;read&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;write&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;address&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;clock&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;reset&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;readdata&lt;/span&gt;, &lt;span style="font-style: italic; color: rgb(51, 51, 255);"&gt;writedata&lt;/span&gt;, etc and you can expect yourself to get comfortable with this standard within a day or two.  The latest feature that was added to Altera Avalon Interface Specification is Burst Transfer, which is very useful when maximum throughput is required.  Burst Transfer guarantees that arbitration between the Avalon Master-Slave pair locked throughout a burst until the burst completes.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/Avalon_In_MAXII.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/8119/2165/320/Avalon_In_MAXII.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Many engineers misunderstand that Avalon Switch Fabric is meant for FPGA devices.  Guess what, the CPLD device such as MAX II also supports Avalon Interface.  For an example, you can design your custom IP, say a SDRAM master that reads and writes to a SDRAM device that connects to your MAX II device.  The setup in the SOPC Builder is as shown in the figure beside.  Anyway, NIOS II processor is not supported in MAX or MAX II device as I believe the NIOS II architecture requires on-chip memory.&lt;br /&gt;&lt;br /&gt;Recently, due to some reasons, I was required to migrate a NIOS II design to a MicroBlaze design.  Unfortunately, there are so many different interface buses involved when I look at the MicroBlaze data sheet, such as On-Chip Peripheral (OPB) bus, Local Memory Bus (LMB) and Fast Simple Link (FSL) bus, just to name a few.   I believe it is going to take me quite some times to go through all these new bus standards.   No wonder Altera claims that the NIOS II soft processor is the world’s most versatile embedded processor.   Well, I think they are right.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Essential Guide to RF and Wireless</title><link>http://fpgaforum.blogspot.com/2006/04/essential-guide-to-rf-and-wireless.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 8 Apr 2006 00:09:00 -0700</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114448053610108051</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/8119/2165/1600/RFBookCover.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/RFBookCover.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;If you find yourself in of the following categories, then, &lt;span style="font-weight: bold;"&gt;BINGO&lt;/span&gt;, you can consider looking for this book.&lt;br /&gt;&lt;br /&gt;1. You are an engineer but haven’t got in touch with the RF circuitries and terminologies since graduation. Yet, you want to, or perhaps you have to recall the basic knowledge about this subject, either for interest or job requirement.&lt;br /&gt;2. You are a sales and marketing person for RF stuff but have no or little background in RF industry.  You need to pick up the fastest learning curve in this area in order to speak about your product features.&lt;br /&gt;3. You are a science enthusiast but you don’t bother about the mathematics such as Maxwell’s equation, Gauss’s Law, etc.&lt;br /&gt;4. You are an engineering undergraduate and you are on the edge of giving up when you are studying the RF subject due to the complicated multi-dimensional RF equations&lt;br /&gt;5. You just want to know about the wireless and RF stuff&lt;br /&gt;6. You are curious to read the content of this book after reading this post.&lt;br /&gt;&lt;br /&gt;I read this book quite sometime ago and I did achieve what I wanted from this book.   If I remember correctly, you couldn’t find any mathematics equation in this book.   So, don’t worry bringing along your scientific calculator and note pad to do calculation while reading.   Many jokes are there to make you feel interested and keep on looking for the next one coming.   Anyway, you can easily look out for some of the content inside this book such as preface from the internet before buying this book.   Well, don’t just listen to me.   Find out what others’ opinion about this book, too, for your own judgement!</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Accessing EPCS from NIOS II</title><link>http://fpgaforum.blogspot.com/2006/04/accessing-epcs-from-nios-ii.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 1 Apr 2006 21:11:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114395531933788463</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/NIOSII_Integrate_EPCS.0.jpg"&gt;&lt;img style="margin: 0px 0px 10px 10px; float: right;" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/NIOSII_Integrate_EPCS.0.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you are wondering how to access the EPCS from the NIOS II directly, you have come to the right place. I believe you might have tried to read the NIOS II handbook that covers almost 600 pages to find out the answer. Nevertheless, it seems like there is no straight answer to the question in the NIOS II handbook. You might have even tried to look into the &lt;strong&gt;Software Files&lt;/strong&gt; mentioned in the chapter named &lt;a href="http://www.altera.com/literature/hb/nios2/n2cpu_nii51012.pdf"&gt;EPCS Device Controller Core with Avalon Interface&lt;/a&gt;, which are &lt;em&gt;altera_avalon_epcs_controller_flash.c&lt;/em&gt;, &lt;em&gt;altera_avalon_epcs_controller_flash.h&lt;/em&gt;, &lt;em&gt;epcs_commands.c&lt;/em&gt; and &lt;em&gt;epcs_commands.h&lt;/em&gt;. However, still, none of these files give you much clue how to access the EPCS from the NIOS II processor.&lt;br /&gt;&lt;br /&gt;In fact, the handler that gives you the access to the EPCS device is not &lt;strong&gt;alt_flash_epcs_dev&lt;/strong&gt; (as you see in &lt;em&gt;altera_avalon_epcs_controller_flash.h&lt;/em&gt;), but &lt;strong&gt;alt_flash_fd&lt;/strong&gt;, which is the exact same handler that you use to access the common flash device like Spansion and Intel flash device. To my surprise, the NIOS II handbook does not mention about this. Perhaps this is a common sense to everybody else that the Spansion/Intel flash and the SPI Serial Flash should have a same handler, but NOT to a dummy user like me! After asking around, I believe I am not the only one who thinks like this! Therefore, I still see that there is some room for improvement in the next version of NIOS II handbook. Not every NIOS II user is a hardware designer. Not every NIOS II user is a software developer, either. Some NIOS II users like me have to do co-hardware/software design and development at the same time. Sometimes I just feel that the handbook couldn’t link me very well between &lt;a href="http://fpgaforum.blogspot.com/2006/01/c-or-hdl-in-fpga.html"&gt;the hardware and software&lt;/a&gt;. For an example, my earlier frustration could have been resolved if there is a small piece of C code like the following included in the Chapter 3 of the Quartus II Handbook Volume 5 (a.k.a. NIOS II Handbook Volume 3).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;////////////////////////////////////////////&lt;br /&gt;// hello_epcs.cpp&lt;br /&gt;// date created: March 30, 2006&lt;br /&gt;// author: &lt;/span&gt;&lt;a href="http://fpgaforum.blogspot.com"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;http://fpgaforum.blogspot.com&lt;/span&gt;&lt;/a&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;////////////////////////////////////////////&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;#include&lt;/span&gt; &amp;lt;iostream&amp;gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;#include&lt;/span&gt; "system.h"&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;#include&lt;/span&gt; "sys/alt_flash.h"&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;#include&lt;/span&gt; "sys/alt_flash_dev.h"&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;using namespace&lt;/span&gt; std;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);"&gt;int&lt;/span&gt; main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;alt_flash_fd* my_epcs;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;char&lt;/span&gt; my_data[256];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 204, 0);"&gt;//check your (EPCS_CONTROLLER_NAME) from system.h&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;my_epcs = alt_flash_open_dev(EPCS_CONTROLLER_NAME);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;if&lt;/span&gt;(my_epcs)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "EPCS opened successfully!" &amp;lt&amp;lt endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(51, 204, 0);"&gt;//example application, read general data from epcs address 0x70000&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;int&lt;/span&gt; ret_code = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alt_read_flash(my_epcs, 0x70000, my_data, 256);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;if&lt;/span&gt;(!ret_code)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt my_data &amp;lt&amp;lt endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;return&lt;/span&gt; 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;return&lt;/span&gt; -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "Error! EPCS not opened!" &amp;lt&amp;lt endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: rgb(153, 0, 0);"&gt;return&lt;/span&gt; -2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;// The end&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;/////////////////////////////////////////////////////////&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anyway, I just found out that if you are lucky, you might still be able to find out the code very similar like above from the software example called &lt;strong&gt;memtest.c&lt;/strong&gt; in the &lt;em&gt;&amp;ltNIOS II Path&amp;gt\examples\software\memtest&lt;/em&gt; folder. By the way, you can only view the code after installing the NIOS II software tool.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><enclosure length="0" type="application/pdf;charset=UTF-8" url="http://www.altera.com/literature/hb/nios2/n2cpu_nii51012.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>If you are wondering how to access the EPCS from the NIOS II directly, you have come to the right place. I believe you might have tried to read the NIOS II handbook that covers almost 600 pages to find out the answer. Nevertheless, it seems like there is no straight answer to the question in the NIOS II handbook. You might have even tried to look into the Software Files mentioned in the chapter named EPCS Device Controller Core with Avalon Interface, which are altera_avalon_epcs_controller_flash.c, altera_avalon_epcs_controller_flash.h, epcs_commands.c and epcs_commands.h. However, still, none of these files give you much clue how to access the EPCS from the NIOS II processor. In fact, the handler that gives you the access to the EPCS device is not alt_flash_epcs_dev (as you see in altera_avalon_epcs_controller_flash.h), but alt_flash_fd, which is the exact same handler that you use to access the common flash device like Spansion and Intel flash device. To my surprise, the NIOS II handbook does not mention about this. Perhaps this is a common sense to everybody else that the Spansion/Intel flash and the SPI Serial Flash should have a same handler, but NOT to a dummy user like me! After asking around, I believe I am not the only one who thinks like this! Therefore, I still see that there is some room for improvement in the next version of NIOS II handbook. Not every NIOS II user is a hardware designer. Not every NIOS II user is a software developer, either. Some NIOS II users like me have to do co-hardware/software design and development at the same time. Sometimes I just feel that the handbook couldn’t link me very well between the hardware and software. For an example, my earlier frustration could have been resolved if there is a small piece of C code like the following included in the Chapter 3 of the Quartus II Handbook Volume 5 (a.k.a. NIOS II Handbook Volume 3). //////////////////////////////////////////// // hello_epcs.cpp // date created: March 30, 2006 // author: http://fpgaforum.blogspot.com //////////////////////////////////////////// #include &amp;lt;iostream&amp;gt; #include "system.h" #include "sys/alt_flash.h" #include "sys/alt_flash_dev.h" using namespace std; int main() { &amp;nbsp;&amp;nbsp;alt_flash_fd* my_epcs; &amp;nbsp;&amp;nbsp;char my_data[256]; &amp;nbsp;&amp;nbsp;//check your (EPCS_CONTROLLER_NAME) from system.h &amp;nbsp;&amp;nbsp;my_epcs = alt_flash_open_dev(EPCS_CONTROLLER_NAME); &amp;nbsp;&amp;nbsp;if(my_epcs) &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "EPCS opened successfully!" &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//example application, read general data from epcs address 0x70000 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int ret_code = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alt_read_flash(my_epcs, 0x70000, my_data, 256); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!ret_code) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt my_data &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return -1; &amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;else &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "Error! EPCS not opened!" &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return -2; &amp;nbsp;&amp;nbsp;} } // The end ///////////////////////////////////////////////////////// Anyway, I just found out that if you are lucky, you might still be able to find out the code very similar like above from the software example called memtest.c in the &amp;ltNIOS II Path&amp;gt\examples\software\memtest folder. By the way, you can only view the code after installing the NIOS II software tool.</itunes:subtitle><itunes:author>noreply@blogger.com (fpgaforum)</itunes:author><itunes:summary>If you are wondering how to access the EPCS from the NIOS II directly, you have come to the right place. I believe you might have tried to read the NIOS II handbook that covers almost 600 pages to find out the answer. Nevertheless, it seems like there is no straight answer to the question in the NIOS II handbook. You might have even tried to look into the Software Files mentioned in the chapter named EPCS Device Controller Core with Avalon Interface, which are altera_avalon_epcs_controller_flash.c, altera_avalon_epcs_controller_flash.h, epcs_commands.c and epcs_commands.h. However, still, none of these files give you much clue how to access the EPCS from the NIOS II processor. In fact, the handler that gives you the access to the EPCS device is not alt_flash_epcs_dev (as you see in altera_avalon_epcs_controller_flash.h), but alt_flash_fd, which is the exact same handler that you use to access the common flash device like Spansion and Intel flash device. To my surprise, the NIOS II handbook does not mention about this. Perhaps this is a common sense to everybody else that the Spansion/Intel flash and the SPI Serial Flash should have a same handler, but NOT to a dummy user like me! After asking around, I believe I am not the only one who thinks like this! Therefore, I still see that there is some room for improvement in the next version of NIOS II handbook. Not every NIOS II user is a hardware designer. Not every NIOS II user is a software developer, either. Some NIOS II users like me have to do co-hardware/software design and development at the same time. Sometimes I just feel that the handbook couldn’t link me very well between the hardware and software. For an example, my earlier frustration could have been resolved if there is a small piece of C code like the following included in the Chapter 3 of the Quartus II Handbook Volume 5 (a.k.a. NIOS II Handbook Volume 3). //////////////////////////////////////////// // hello_epcs.cpp // date created: March 30, 2006 // author: http://fpgaforum.blogspot.com //////////////////////////////////////////// #include &amp;lt;iostream&amp;gt; #include "system.h" #include "sys/alt_flash.h" #include "sys/alt_flash_dev.h" using namespace std; int main() { &amp;nbsp;&amp;nbsp;alt_flash_fd* my_epcs; &amp;nbsp;&amp;nbsp;char my_data[256]; &amp;nbsp;&amp;nbsp;//check your (EPCS_CONTROLLER_NAME) from system.h &amp;nbsp;&amp;nbsp;my_epcs = alt_flash_open_dev(EPCS_CONTROLLER_NAME); &amp;nbsp;&amp;nbsp;if(my_epcs) &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "EPCS opened successfully!" &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//example application, read general data from epcs address 0x70000 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int ret_code = &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;alt_read_flash(my_epcs, 0x70000, my_data, 256); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!ret_code) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt my_data &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return -1; &amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;else &amp;nbsp;&amp;nbsp;{ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout &amp;lt&amp;lt "Error! EPCS not opened!" &amp;lt&amp;lt endl; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return -2; &amp;nbsp;&amp;nbsp;} } // The end ///////////////////////////////////////////////////////// Anyway, I just found out that if you are lucky, you might still be able to find out the code very similar like above from the software example called memtest.c in the &amp;ltNIOS II Path&amp;gt\examples\software\memtest folder. By the way, you can only view the code after installing the NIOS II software tool.</itunes:summary></item><item><title>Any Replacement for Altera EPCS Devices?</title><link>http://fpgaforum.blogspot.com/2006/03/any-replacement-for-altera-epcs_19.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sun, 19 Mar 2006 06:12:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114277789331285568</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/cyc_scg-index_fig1.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/cyc_scg-index_fig1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I know there are already many websites which claim that Altera Serial Configuration Devices, a.k.a. EPCS devices, can be replaced by some lower cost devices. This post is just to give you more confidence on the availability of other cheaper configuration solution for Cyclone series and Stratix II FPGAs.&lt;br /&gt;&lt;br /&gt;Altera introduced EPCS devices at the same time the Cyclone device is announced. Traditionally, the cost of the configuration devices (EPC family) for the Altera FPGAs are quite expensive, compared with the cost of the FPGAs. Most of the FPGA users want almost zero cost for the FPGA configuration solution since the configuration device is mostly a combination of a simple controller and a non-volatile memory that stores the configuration bitstream. Therefore, when the so-called "cheapest FPGA family", Cyclone FPGA was launched by Altera, Altera also took the initiative to provide a cost efficient configuration solution for the Cyclone FPGA. The traditional configuration solution for Altera FPGAs prior to Cyclone FPGA requires a simple controller to load the configuration bitstream from a non-volatile memory and write to the FPGAs during configuration. This kind of configuration methodolgy is called &lt;strong&gt;passive &lt;/strong&gt;configuration. The passive configuration can be either in serial form or parallel form, depending on the available configuration modes of the selected FPGAs. &lt;strong&gt;Active&lt;/strong&gt; Serial configuration was first available in Altera Cyclone FPGA family. During the active serial configuration, the FPGA will write out the Read Bytes instruction to the EPCS device and then continuously read the data out from the serial flash from the address 0x000000 until the FPGA is configured. The smart approach greatly reduces the configuration cost by putting the simple controller in the FPGA itself. That means, the configuration cost is only left with the non-volatile memory only. As a result, the SPI serial flash is chosen to store the configuration bitstream as it is low cost, low pin count and easy to control from the FPGA.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/M25P.jpg"&gt;&lt;img style="FLOAT: right; MARGIN: 0px 0px 10px 10px; CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/M25P.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Nonetheless, engineers are usually very calculative people. The EPCS price list, if you check from the Digikey website, looks attractive at the first glance due to the sudden price drop on the configuration solution for an Altera FPGA. As time goes by, engineers realize that the EPCS device is none but a very standard serial flash. And, a standard serial flash should cost much lower than an EPCS device with the same memory capacity. I grab some data from the Digikey website. For an example, an EPCS1 device costs USD$3.50 but a ST’s M25P10-A serial flash from ST costs as low as USD$1.10, which is a huge difference! Imagine if you are just targeting the Altera smallest Cyclone device with slowest speed grade, EP1C3T100C8 (costs USD$10.70 quoted by Digikey), you will be paying too much for the configuration solution with EPCS1. Don’t you agree? M25P10 can equally do the job well at lower cost. Why not? Don’t bother whether they are exactly the same die or not. Both devices commands and timing specifications meet the active configuration controller (embedded inside Cyclone FPGA) requirement. Even the Quartus II programmer tool recognizes ST’s M25P10-A, M25P40, M25P16 and M25P64, as EPCS1, EPCS4, EPCS16 and EPCS64, accordingly. Perhaps there are still other cheaper alternative than ST’s M25P family.&lt;br /&gt;&lt;br /&gt;In fact, the serial flash can do even more other than the configuration solution. You can use it to store the general-purpose data! You will always find out that the serial flash always has more than enough to store the configuration bitstream, especially if you turn on the configuration bitstream compression in the Quartus II software tool. So, don’t waste the rest of the memory in the serial flash, furthermore, they are non-volatile memory, which is often useful to keep some serial numbers, identification numbers, calibration data, tracking numbers, etc. And, the microprocessor program data! For an example, you can save the NIOS II ELF file in the serial flash and boot from the serial flash after power-up. For that reason, you may need to choose a serial flash with a bigger density, to store not only the configuration data, as well as the microprocessor program data. That way, you don’t need to source another flash device to store the microprocessor data. How big the serial flash required is determined by the code size of your program. Sometimes, instead of using an EPCS4 device just to store the configuration bitstream, I will choose an EPCS16 replacement (USD$ 16.25 from Digikey), ST’s M25P16 (USD$ 4.56 from Digikey) to be my Cyclone, Cyclone II or Straitx II FPGA configuration solution as well as the storage for my NIOS II ELF file, not to mention some general-purpose user data.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="color:#cccccc;"&gt;//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;&lt;em&gt;Disclaimer: The information on this post is for informational purpose only. The author reserves the right not to be responsible for the topicality, correctness, completeness or quality of the information provided. Liability claims regarding damage caused by the use of any information provided, including any kind of information which is incomplete or incorrect, will therefore be rejected.&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total></item><item><title>What is Bandwidth?</title><link>http://fpgaforum.blogspot.com/2006/03/what-is-bandwidth_04.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sat, 4 Mar 2006 00:11:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114146021872739440</guid><description>&lt;strong&gt;Introduction to Bandwidth&lt;/strong&gt;&lt;br /&gt;According to Meriam-Webster Dictionary, the definition of bandwidth is&lt;br /&gt;1: a range within a band of wavelengths, frequencies, or energies; &lt;em&gt;especially&lt;/em&gt; : a range of radio frequencies which is occupied by a modulated carrier wave, which is assigned to a service, or over which a device can operate&lt;br /&gt;2: the capacity for data transfer of an electronic communications system (graphics consume more &lt;em&gt;bandwidth&lt;/em&gt; than text does); &lt;em&gt;especially&lt;/em&gt; : the maximum data transfer rate of such a system&lt;br /&gt;&lt;br /&gt;Anyway, the engineers always do not take the definition from the dictionary as a simple answer. So, what is &lt;em&gt;bandwidth&lt;/em&gt; anyway? Engineers always mention about “bandwidth” when dealing with oscilloscope, probe, trace, connectors, etc. Sometimes, due to budget limitation, engineers complain about not enough bandwidth or limited bandwidth. So what is all this fuss about bandwidth?&lt;br /&gt;&lt;br /&gt;Ever think about why the sampling oscilloscope with 50GS/s (GS/s: sampling per second) costs so much higher than the digital phosphor oscilloscope with just 1GS/s? The reason is very simple: the scope with 50GS/s has much higher bandwidth than the scope with 1GS/s. The bandwidth of the scope with 1GS/s is about 100MHz whereas the bandwidth of the scope with 50GS/s is 50GHz. May be examples can give you a better idea about bandwidth.&lt;br /&gt;&lt;br /&gt;Below is a scope shot of a 50MHz square wave (generated by a FPGA device) captured on a sampling oscilloscope with 50GS/s.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/50MHz_50GSa_s.0.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/50MHz_50GSa_s.1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Below is a scope shot of the 50MHz square wave from the similar source as above, captured on a digital phosphor oscilloscope with 1GS/s.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/50MHz_1GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/50MHz_1GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As you can see, it doesn't seem to have much difference from both the captured scope shots of a 50MHz square wave, but sometimes looks can be deceiving. Let's check out the rising time of this 50MHz square wave. Again, both scope shots (zoomed in from the previous shots) are shown here for your reference.&lt;br /&gt;Square wave rising-edge captured on a 50GS/s scope:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/50MHz_rising_edge_50GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/50MHz_rising_edge_50GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Square wave rising-edge captured on a 1GS/s scope:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/50MHz_rising_edge_1GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/50MHz_rising_edge_1GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, as you can see, the rising-edge of the 50MHz square wave actually is within ps (pico-second)range, but the 1GS/s scope tells you that the rising-edge takes almost 1ns (nano-second). Anyway, this is still acceptable for 50MHz square wave.&lt;br /&gt;&lt;br /&gt;Let's now measure 250MHz square wave (also generated by FPGA) on both the 50GS/s scope and 1GS/S scope.&lt;br /&gt;This is measured on the 50GS/s scope:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/250MHz_50GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/250MHz_50GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is measured on the 1GS/s scope:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/250MHz_1GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/250MHz_1GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Needless to say, the 250MHz square wave looks more like a trapezoidal wave on the 1GS/s scope.&lt;br /&gt;&lt;br /&gt;How does 500MHz square wave look like on both scope? Here are the scope shots.&lt;br /&gt;500MHz square wave measured on 50GS/s scope:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/500MHz_50GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/500MHz_50GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;500MHz square wave measured on 1GS/s scope and it no longer looks like square wave:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/500MHz_1GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/500MHz_1GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, this is how the 1GHz square wave looks like on the 50GS/s and 1GS/s scope, respectively. As you can see, the 1GHz not only looks more like a sinusoidal wave from the 1GS/s scope, its amplitude is also much smaller.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/1GHz_50GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/1GHz_50GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/1GHz_1GSa_s.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/1GHz_1GSa_s.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I believe all the above scope shots can prove to you the importance of bandwidth of a oscilloscope. Not only that, the bandwidth of a probe can also affect the results seen on the oscilloscope. The scope shot below is captured using a 4GHz FET probe and a SMA cable on a 7GHz storage scope. The signal measured is a 3.125Gbps signal generated by a Stratix GX FPGA device.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/4GHz_Probe.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://photos1.blogger.com/blogger/8119/2165/320/4GHz_Probe.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So, in conclusion, what are the considerations for the bandwidth? There are several rules of thumb when considering the bandwidth of an instrument.&lt;br /&gt;1. Minimum bandwidth should be at least 5 times of the expected measured highest frequency.&lt;br /&gt;2. If you are interested to measure the rise time, the minimum bandwidth should be 0.45/(rise time). Otherwise, the rise time that you have measured is inaccurate. For an example, look at the rise time of the 50MHz square wave captured above from different scopes.&lt;br /&gt;3. Or, the minimum bandwidth is up to the 9th harmonic of the highest frequency, of course, higher the better. If you are not sure of what is 9th harmonic, then you can read my previous posts, &lt;a href="http://fpgaforum.blogspot.com/2006/02/history-and-beauty-of-sine-function_19.html"&gt;History and Beauty of Sine Function&lt;/a&gt; and &lt;a href="http://fpgaforum.blogspot.com/2006/02/building-square-wave-from-fourier_21.html"&gt;Building Square Wave from Fourier Series&lt;/a&gt;. That is the reason I said that the Fourier Series plays an important role in today's world and this is just one of the thousands examples or applications that have a close relationship with Fourier.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Building Square Wave from Fourier Series</title><link>http://fpgaforum.blogspot.com/2006/02/building-square-wave-from-fourier_21.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Tue, 21 Feb 2006 08:07:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114054035976918487</guid><description>As promised in my previous post, I would like to show how a square waveform can be built from the Fourier Series.  I am using Tcl/Tk script to generate a periodic square wave from Fourier Series.  The reason I am using Tcl/Tk language for this is because I have never practically done this before although I know it can be done.  In case you haven’t heard about Tcl/Tk language before up to this point, you can read the previous post in this blog, &lt;a href="http://fpgaforum.blogspot.com/2006/02/interesting-tcl-language.html"&gt;The Interesting Tcl Language&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you have known from my previous post, the periodic signals can be constructed using Fourier Series, which consists of summation of sine and cosine functions at frequencies which are harmonically related.  The square wave function F(t) derived from Fourier Series is as follows:&lt;br /&gt;&lt;br /&gt;F(t) = sin(t) + sin(3t)/3 + sin(5t)/5 + sin(7t)/7 + sin(9t)/9 + …&lt;br /&gt;     = ∑sin(nt)/n (n odd, 0&lt; n &lt;∞)    (1.1)&lt;br /&gt;&lt;br /&gt;It is too long to describe how the above function is derived.  If you are interested to know how it is derived, it is not to difficult this information from the reference books or internet. &lt;br /&gt;&lt;br /&gt;Since the square wave is luckily just constructed from summation of sine functions at different harmonic frequency, let’s display a simple sine wave using Tk first. &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/sinewave.1.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/sinewave.1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;The Tcl/Tk source code for the above diagram is as follows.  As you may agree, it doesn’t take many lines of complicated code to display a sine wave on your computer screen using Tcl/Tk script.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;############################################&lt;br /&gt;## sinewave.tcl&lt;br /&gt;## date created : February 21, 2006&lt;br /&gt;## author : http://fpgaforum.blogspot.com&lt;br /&gt;############################################&lt;br /&gt;&lt;br /&gt;wm focusmodel . passive&lt;br /&gt;wm geometry . 460x360; update&lt;br /&gt;wm resizable . 1 1&lt;br /&gt;wm deiconify .&lt;br /&gt;wm title . "Sine Wave Generator by FPGA FORUM"&lt;br /&gt;&lt;br /&gt;label .msg1 -wraplength 4i -justify center -text "This generates a simple sine wave."&lt;br /&gt;label .msg2 -wraplength 4i -justify center -text "http://fpgaforum.blogspot.com"&lt;br /&gt;pack .msg1 -side top&lt;br /&gt;pack .msg2 -side top&lt;br /&gt;&lt;br /&gt;canvas .sinewave -bg black -width 450 -height 300&lt;br /&gt;pack .sinewave&lt;br /&gt;&lt;br /&gt;set coordList {}&lt;br /&gt;&lt;br /&gt;#2*pi*f0 = w0 = 1/25&lt;br /&gt;#fundamental frequency, f0 = 1/(25*2*pi)&lt;br /&gt;&lt;br /&gt;for {set x 0} {$x&lt;=450} {incr x} {      &lt;br /&gt; lappend coordList $x [expr sin($x/25.0) * 50 + 150]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;eval .sinewave create line 0 150 450 150 -fill white -activefill blue&lt;br /&gt;eval .sinewave create line $coordList -fill green -activefill red&lt;br /&gt;&lt;br /&gt;##The end of sinewave.tcl&lt;br /&gt;################################################&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I purposely multiply the sine function result by a factor of 50 to amplify the sine wave.  Otherwise, the sine wave would be too small.  &lt;br /&gt;&lt;br /&gt;The square wave, if constructed by the first 5 harmonics of sine functions looks like below.  Of course, if you complain that this is not a square wave, then you are absolutely right.  A perfect square wave is constructed when you have summed all the harmonics of sine functions according to the Equation 1.1. &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/squarewave5.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/squarewave5.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;The Tcl/Tk source code for generating the above square wave is as follows, and once again, the script doesn’t look much different from the one that generates a sine wave.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;############################################&lt;br /&gt;## squarewave.tcl&lt;br /&gt;## date created : February 21, 2006&lt;br /&gt;## author : http://fpgaforum.blogspot.com&lt;br /&gt;############################################&lt;br /&gt;&lt;br /&gt;wm focusmodel . passive&lt;br /&gt;wm geometry . 460x360; update&lt;br /&gt;wm resizable . 1 1&lt;br /&gt;wm deiconify .&lt;br /&gt;wm title . "Square Wave Generator by FPGA FORUM"&lt;br /&gt;&lt;br /&gt;label .msg1 -wraplength 4i -justify center -text "This generates a square wave from the Fourier Series."&lt;br /&gt;label .msg2 -wraplength 4i -justify center -text "http://fpgaforum.blogspot.com"&lt;br /&gt;pack .msg1 -side top&lt;br /&gt;pack .msg2 -side top&lt;br /&gt;&lt;br /&gt;canvas .squarewave -bg black -width 450 -height 300&lt;br /&gt;pack .squarewave&lt;br /&gt;&lt;br /&gt;set coordList {}&lt;br /&gt;&lt;br /&gt;#2*pi*f0 = w0 = 1/25&lt;br /&gt;#fundamental frequency, f0 = 1/(25*2*pi)&lt;br /&gt;&lt;br /&gt;for {set x 0} {$x&lt;=450} {incr x} { &lt;br /&gt; set y 0&lt;br /&gt; set z 0&lt;br /&gt; for {set &lt;strong&gt;N&lt;/strong&gt; 1} {$&lt;strong&gt;N&lt;/strong&gt;&lt;=5} {set &lt;strong&gt;N&lt;/strong&gt; [expr {$&lt;strong&gt;N&lt;/strong&gt; + 2}]} {&lt;br /&gt;  set z [expr sin($x*$N/25.0) /$N* 50]&lt;br /&gt;  set y [expr $y + $z]&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt; lappend coordList $x [expr $y+150]&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;eval .squarewave create line 0 150 450 150 -fill white -activefill blue&lt;br /&gt;eval .squarewave create line $coordList -fill green -activefill red&lt;br /&gt;&lt;br /&gt;##The end of squarewave.tcl&lt;br /&gt;#####################################################&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If the &lt;strong&gt;N&lt;/strong&gt; is 101, then you can see that an almost perfect square waveform is displayed using the squarewave.tcl script.  And, it is not too difficult for you to imagine that a perfect square wave will be generated if you keep on increasing the value of &lt;strong&gt;N&lt;/strong&gt;, which is also the &lt;strong&gt;N&lt;/strong&gt;th harmonic sine wave from the fundamental sine wave frequency. &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/squarewave101.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/squarewave101.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;You may now feel curious about the real applications of the Fourier Series after reading this post.  In my next post, I will tell you one real application that has the connection with what I have brought out in this post.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>History and Beauty of Sine Function</title><link>http://fpgaforum.blogspot.com/2006/02/history-and-beauty-of-sine-function_19.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Sun, 19 Feb 2006 07:01:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-114036234383541563</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/trig.0.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/trig.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Still remember when was the first time you learn about sine function?  Still remember how the sine function was derived when you were in the secondary school?  I first learnt about the sine function from the trigonometry chapter at 14 years old if I remember correctly.  10 years later, I almost forgot that the sine function introduction was from a right-angled triangle.  Sine function of the angle A (not the right angle) in a right angular triangle is the length of the side opposite to the angle A divided by the length of hypotenuse, which is the longest side of a right-angle triangular.  Cosine function of the angle A, on the other hand, is defined as the length of the adjacent side of the angle A divided by the length of hypotenuse.  From the above explanation, it is not too difficult to think that cosine function is an extension from the sine function.   Perhaps this is the reason why cosine function is named as co-sine function. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/sinewave.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/sinewave.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Everything looks so simple when I was beginning to learn the sine and cosine functions.  Never could I have thought that these simple functions have so much influence on today’s mankind history.  No kidding!  What would happen if there was no sine function nowadays?  The influence of the sine function is too much way beyond anyone imagination. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/fourier.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/fourier.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;An example of the importance of Sine function is shown obviously in Fourier Series.  Fourier Series was discovered by a French mathematician, &lt;strong&gt;Jean Baptiste Joseph Fourier&lt;/strong&gt; (1768-1830, one of the French Revolution contributors) when he was studying and analyzing the heat flow in a metal rod.  Therefore, the Fourier Series was named in honor of him.  According to the Fourier Series, a periodic function can be represented by an infinite sum of sine or cosine functions that are harmonically related.  For an instance, a square wave, which doesn’t seems to be any sinusoidal at all, can be represented by a Fourier Series.  (If I have the time, I would like to prove it to you in graphics next time.)  If you think that this is an easy statement, then you are totally wrong.  Fourier Series as well as Fourier Transform which bears his name, are considered among the greatest discoveries in scientific and engineering discipline.  &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/FourierSeries.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/FourierSeries.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There are too many periodic motions or waveforms around us all the time.  To name a few, signals transmitted by the cell phone base-station, television and radio stations are sinusoidal and periodic.  The alternating current (a.c.) power sources generate voltages and currents are in sinusoidal form.  Function or Signal Generators generate different kind of periodic waveforms in your laboratories.  The generation and analyzing of the periodic motions or waveforms are made possible through Fourier Series.  Anyway, the Fourier Series will not be possible if there was no Sine function before Joseph Fourier. &lt;br /&gt;&lt;br /&gt;Isn’t it amazing?  Why sinusoidal shape matters?  Why not square, triangular, or circle?  This is really intriguing.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>The Interesting Tcl Language</title><link>http://fpgaforum.blogspot.com/2006/02/interesting-tcl-language.html</link><author>noreply@blogger.com (fpgaforum)</author><pubDate>Mon, 6 Feb 2006 05:12:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-21417877.post-113923246336326727</guid><description>&lt;a href="http://photos1.blogger.com/blogger/8119/2165/1600/tcltkbook.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/8119/2165/320/tcltkbook.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;People pronounce Tcl as "Tickel". Tcl means &lt;strong&gt;T&lt;/strong&gt;ool &lt;strong&gt;C&lt;/strong&gt;ommand &lt;strong&gt;L&lt;/strong&gt;anguage. Usually, you see Tcl paired with its young brother, Tk. Tk is the Tcl toolkit for building graphical user interfaces.&lt;br /&gt;I was first introduced by this cool Tcl language about 3 years ago when I tried to find a solution to automate the compilation of Quartus II overnight and during the weekend. Basically, I had about twenty different Quartus II projects to compile and each of them took a few hours to complete due to the large logic usage and strict timing requirement inside the designs. If I didn't automate this process, I would be wasting my time to do the manual push-button compilation after every one or two hours of compilation, which was kind of stupid. So, that was my first purpose of using the Tcl language.&lt;br /&gt;&lt;br /&gt;However, soon after that, I found out that the Tcl language is not merely a scripting language that is limited for automation process. It can do much more than that, such as file processing, easy interface with the PC serial port without any external DLL, easy construction of GUI, interface with a DLL written by you or others, etc. Besides that, I also found out that most of the FPGA tools like Quartus II, ISE and famous third-party simulation tool, ModelSim, provide the API and platform for you to command them in Tcl language.&lt;br /&gt;&lt;br /&gt;One of the reasons people use Tcl language is that the script written in Tcl language works regardless of the operating system used. It saves the hassle of providing the software in different versions just to support different OS.&lt;br /&gt;If you never heard about the Tcl and are interested with this Tcl language, you can go to &lt;a href="http://www.activestate.com"&gt;&lt;strong&gt;ActiveState&lt;/strong&gt;&lt;/a&gt; to download the ActiveTcl software, and it is freely distributed. There are many Tcl application examples that you can easily download from the website for reference. If you would like to know even more details about this cool language, you can read the &lt;em&gt;Practical Programming in Tcl and Tk&lt;/em&gt; written by &lt;strong&gt;Brent B. Welch&lt;/strong&gt;, &lt;strong&gt;Ken Jones&lt;/strong&gt; with &lt;strong&gt;Jeffrey Hobbs&lt;/strong&gt;. This Tcl/Tk bestseller comes with a CD-ROM that includes all the examples used in the book and also the ActiveTcl software which may have been outdated. This book (fourth edition) has been my Tcl/Tk bible since I start using Tcl and Tk and it still is.</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total></item></channel></rss>