⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个可以综合的verilog 写的fifo存储器.mht

📁 一个可以综合的Verilog 写的FIFO存储器 内附文档说明
💻 MHT
📖 第 1 页 / 共 5 页
字号:
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span><span style=3D'mso=
-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>&lt;=3D 0;<o:p></o:p></span></pre>=
<pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>rd_ptr</span><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; </span>&lt;=3D 0;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>wr_ptr</span><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; </span>&lt;=3D 0;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; </span><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;=
&nbsp;&nbsp;</span><span
class=3DGramE>if(</span>!<span class=3DSpellE>WriteN</span> &amp;&amp; <span
class=3DSpellE>F_FullN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </spa=
n><span
class=3DSpellE>wr_ptr</span> &lt;=3D <span class=3DSpellE>wr_ptr</span> + 1=
;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span>!<span class=3DSpellE>ReadN</span> &amp;&amp; <span
class=3DSpellE>F_EmptyN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </sp=
an><span
class=3DSpellE>rd_ptr</span> &lt;=3D <span class=3DSpellE>rd_ptr</span> + 1=
;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span>!<span class=3DSpellE>WriteN</span> &amp;&amp; <span
class=3DSpellE>ReadN</span> &amp;&amp; <span class=3DSpellE>F_FullN</span>)=
<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span> &lt;=3D <span cla=
ss=3DSpellE>fcounter</span> + 1;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>WriteN</span> &amp;&amp; =
!<span
class=3DSpellE>ReadN</span> &amp;&amp; <span class=3DSpellE>F_EmptyN</span>=
)<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span> &lt;=3D <span cla=
ss=3DSpellE>fcounter</span> - 1;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><=
span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// All the FIFO sta=
tus signals depends on the value of <span
class=3DSpellE>fcounter</span>.<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// If the <s=
pan
class=3DSpellE>fcounter</span> is equal to <span class=3DSpellE>fdepth</spa=
n>, indicates FIFO is full.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
If the <span
class=3DSpellE>fcounter</span> is equal to zero, indicates the FIFO is empt=
y.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
<span
class=3DSpellE>F_EmptyN</span> signal indicates FIFO Empty Status. By defau=
lt it is<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
asserted, indicating the FIFO is empty. After the First Data is<o:p></o:p><=
/span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
put into the FIFO the signal is <span
class=3DSpellE>deasserted</span>.<o:p></o:p></span></pre><pre><span lang=3D=
EN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>always</span> @(<span class=3DSpellE>posedge</span> <span
class=3DSpellE>Clk</span> or <span class=3DSpellE>negedge</span> <span
class=3DSpellE>RstN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN-US>=
<span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span=
><span
class=3DGramE>if(</span>!<span class=3DSpellE>RstN</span>)<o:p></o:p></span=
></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>F_EmptyN</span> &lt;=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span><span class=3DSpellE>FClrN</span>=3D=3D1'b1) begin<=
o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span><span class=3DSpellE>F_EmptyN</span>=3D=3D1'b0 &amp=
;&amp; <span
class=3DSpellE>WriteN</span>=3D=3D1'b0)<o:p></o:p></span></pre><pre><span l=
ang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><=
span
class=3DSpellE>F_EmptyN</span> &lt;=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>F_FirstN</span>=3D=3D1'b0=
 &amp;&amp; <span
class=3DSpellE>ReadN</span>=3D=3D1'b0 &amp;&amp; <span class=3DSpellE>Write=
N</span>=3D=3D1'b1)<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>=
<span
class=3DSpellE>F_EmptyN</span> &lt;=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp; </span><span
class=3DGramE>else</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><s=
pan style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>F_EmptyN</span> &lt;=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// <span
class=3DSpellE>F_FirstN</span> signal indicates that there is only one datu=
m sitting<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
in the FIFO. When the FIFO is empty and a write to FIFO occurs,<o:p></o:p><=
/span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// =
this signal gets asserted.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><sp=
an
class=3DGramE>always</span> @(<span class=3DSpellE>posedge</span> <span
class=3DSpellE>Clk</span> or <span class=3DSpellE>negedge</span> <span
class=3DSpellE>RstN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN-US>=
<span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span=
><span
class=3DGramE>if(</span>!<span class=3DSpellE>RstN</span>)<o:p></o:p></span=
></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>F_FirstN</span> &lt;=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span><span class=3DSpellE>FClrN</span>=3D=3D1'b1) begin<=
o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; </span><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;</span><span
class=3DGramE>if(</span>(<span class=3DSpellE>F_EmptyN</span>=3D=3D1'b0 &am=
p;&amp; <span
class=3DSpellE>WriteN</span>=3D=3D1'b0) ||<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>(<span
class=3DSpellE>fcounter</span>=3D=3D2 &amp;&amp; <span class=3DSpellE>ReadN=
</span>=3D=3D1'b0 &amp;&amp; <span
class=3DSpellE>WriteN</span>=3D=3D1'b1))<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>=
<span
class=3DSpellE>F_FirstN</span> &lt;=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>else</span> if (<span class=3DSpellE>F_FirstN</span>=3D=3D1'b=
0 &amp;&amp; (<span
class=3DSpellE>WriteN</span> ^ <span class=3DSpellE>ReadN</span>))<o:p></o:=
p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>=
<span
class=3DSpellE>F_FirstN</span> &lt;=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </=
span><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;</span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>F_FirstN</span> &lt;=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><=
span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>// <span
class=3DSpellE>F_SLastN</span> indicates that there is space for only two d=
ata words<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span>//i=
n the FIFO.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><sp=
an
class=3DGramE>always</span> @(<span class=3DSpellE>posedge</span> <span
class=3DSpellE>Clk</span> or <span class=3DSpellE>negedge</span> <span
class=3DSpellE>RstN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN-US>=
<span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span=
><span
class=3DGramE>if(</span>!<span class=3DSpellE>RstN</span>)<o:p></o:p></span=
></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DSpellE>F_SLastN</span> &lt;=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span><span class=3DSpellE>FClrN</span>=3D=3D1'b1) begin<=
o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
class=3DGramE>if(</span> (<span class=3DSpellE>F_LastN</span>=3D=3D1'b0 &am=
p;&amp; <span
class=3DSpellE>ReadN</span>=3D=3D1'b0 &amp;&amp; <span class=3DSpellE>Write=
N</span>=3D=3D1'b1) ||<o:p></o:p></span></pre><pre><span

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -