<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Lothar Miller - RAM/FIFO</title>
    <link>http://www.lothar-miller.de/s9y/</link>
    <description>Elektronik und Musik</description>
    <dc:language>de</dc:language>
    <generator>Serendipity 1.3.1 - http://www.s9y.org/</generator>
    <pubDate>Mon, 15 Dec 2008 14:52:13 GMT</pubDate>

    <image>
        <url>http://www.lothar-miller.de/s9y/templates/bulletproof/img/s9y_banner_small.png</url>
        <title>RSS: Lothar Miller - RAM/FIFO - Elektronik und Musik</title>
        <link>http://www.lothar-miller.de/s9y/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>RAM</title>
    <link>http://www.lothar-miller.de/s9y/archives/20-RAM.html</link>
            <category>RAM/FIFO</category>
    
    <comments>http://www.lothar-miller.de/s9y/archives/20-RAM.html#comments</comments>
    <wfw:comment>http://www.lothar-miller.de/s9y/wfwcomment.php?cid=20</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.lothar-miller.de/s9y/rss.php?version=2.0&amp;type=comments&amp;cid=20</wfw:commentRss>
    

    <author>nospam@example.com (Lothar Miller)</author>
    <content:encoded>
    
&lt;p&gt;
Wer mit Xilinx FPGAs anfängt, der braucht früher oder später mal ein RAM. &lt;/p&gt;&lt;p&gt;Jetzt gibt es in diesen FPGAs zwei Möglichkeiten, ein RAM zu realisieren: &lt;/p&gt;&lt;p&gt;1)     als Distributed RAM, bei dem (wertvolle) LUTs als 16x1 Speicherblöcke &lt;br /&gt;        zusammengeschaltet werden, oder &lt;/p&gt;&lt;p&gt;2)     als BRAM (auch Block-RAM genannt), die je nach FPGA unterschiedlich &lt;br /&gt;        große synchrone RAM-Blöcke darstellen&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Grundsätzlich wird ein RAM als Array in VHDL so beschrieben:&lt;/p&gt;&lt;pre&gt;&lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;type&lt;/span&gt; &lt;span&gt;speicher&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;is&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;array&lt;/span&gt;(&lt;span style=&quot;color: rgb(0, 0, 221); font-weight: bold;&quot;&gt;0&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;to&lt;/span&gt; (&lt;span style=&quot;color: rgb(0, 0, 221); font-weight: bold;&quot;&gt;2&lt;/span&gt;**&lt;span&gt;Addrbreite&lt;/span&gt;)-&lt;span style=&quot;color: rgb(0, 0, 221); font-weight: bold;&quot;&gt;1&lt;/span&gt;) &lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;of&lt;/span&gt; &lt;span style=&quot;color: rgb(51, 51, 153); font-weight: bold;&quot;&gt;STD_LOGIC_VECTOR&lt;/span&gt;(&lt;span&gt;Wortbreite&lt;/span&gt;-&lt;span style=&quot;color: rgb(0, 0, 221); font-weight: bold;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;downto&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 221); font-weight: bold;&quot;&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 136, 0); font-weight: bold;&quot;&gt;signal&lt;/span&gt; &lt;span&gt;memory&lt;/span&gt; : &lt;span&gt;speicher&lt;/span&gt;;&lt;/pre&gt;&lt;p&gt;Wie kann man aber nun, ausgehend von einer generischen Beschreibung eines RAM-Arrays, steuern welchen RAM-Typ man bekommt?&lt;/p&gt;&lt;br /&gt;&lt;div align=&quot;center&quot;&gt;&lt;b&gt;Eigentlich ist es ganz einfach: &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;font size=&quot;4&quot; color=&quot;#993300&quot;&gt;Wenn die Lese-Adresse getaktet ist, &lt;/font&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;font size=&quot;4&quot; color=&quot;#993300&quot;&gt;dann gibt es synchrones BRAM.&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
 &lt;br /&gt;&lt;a href=&quot;http://www.lothar-miller.de/s9y/archives/20-RAM.html#extended&quot;&gt;&quot;RAM&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 10 Nov 2008 15:08:00 +0100</pubDate>
    <guid isPermaLink="false">http://www.lothar-miller.de/s9y/archives/20-guid.html</guid>
    
</item>
<item>
    <title>FIFO</title>
    <link>http://www.lothar-miller.de/s9y/archives/21-FIFO.html</link>
            <category>RAM/FIFO</category>
    
    <comments>http://www.lothar-miller.de/s9y/archives/21-FIFO.html#comments</comments>
    <wfw:comment>http://www.lothar-miller.de/s9y/wfwcomment.php?cid=21</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.lothar-miller.de/s9y/rss.php?version=2.0&amp;type=comments&amp;cid=21</wfw:commentRss>
    

    <author>nospam@example.com (Lothar Miller)</author>
    <content:encoded>
    
&lt;p&gt;FIFO (First-InFirst-Out) sind &lt;b&gt;Pufferspeicher &lt;/b&gt;für den Übergang von schnellen Übertragungspfaden auf langsamere (z.B. USB ==&amp;gt; RS232). Hier werden Daten in einen Ringpuffer eingespeichert, und später mit einer niedrigeren Datenrate ausgelesen.&lt;/p&gt;&lt;p&gt;Alternativ können Daten von einem langsamen Medium zwischengespeichert, und dann in einem Paket auf einem schnelleren Datenpfad übertragen werden.&lt;/p&gt;&lt;p&gt;Ein FIFO wird demzufolge am einfachsten über einen 2^n langen Ringspeicher realisiert, der mit 2 Zählern der Breite n adressiert wird. Ist der Schreibzeiger gleich dem Lesezeiger, dann ist der FIFO leer. Erreicht der Schreibzeiger den Wert des Lesezeigers-1, dann ist der FIFO voll, der Schreibzeiger hat den Lesezeiger quasi &amp;quot;von hinten&amp;quot; eingeholt.&lt;/p&gt; &lt;br /&gt;&lt;a href=&quot;http://www.lothar-miller.de/s9y/archives/21-FIFO.html#extended&quot;&gt;&quot;FIFO&quot; vollständig lesen&lt;/a&gt;
    </content:encoded>

    <pubDate>Mon, 10 Nov 2008 14:49:15 +0100</pubDate>
    <guid isPermaLink="false">http://www.lothar-miller.de/s9y/archives/21-guid.html</guid>
    
</item>

</channel>
</rss>
