📄 一个可以综合的verilog 写的fifo存储器.mht
字号:
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span><span style=3D'mso=
-spacerun:yes'> </span><=3D 0;<o:p></o:p></span></pre>=
<pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>rd_ptr</span><span style=3D'mso-spacerun:yes'> &n=
bsp; </span><=3D 0;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>wr_ptr</span><span style=3D'mso-spacerun:yes'> &n=
bsp; </span><=3D 0;<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </span><span style=3D'mso-spacerun:yes'> =
</span><span
class=3DGramE>if(</span>!<span class=3DSpellE>WriteN</span> && <span
class=3DSpellE>F_FullN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; </spa=
n><span
class=3DSpellE>wr_ptr</span> <=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'>  =
; </span><span
class=3DGramE>if(</span>!<span class=3DSpellE>ReadN</span> && <span
class=3DSpellE>F_EmptyN</span>)<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </sp=
an><span
class=3DSpellE>rd_ptr</span> <=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'>  =
; </span><span
class=3DGramE>if(</span>!<span class=3DSpellE>WriteN</span> && <span
class=3DSpellE>ReadN</span> && <span class=3DSpellE>F_FullN</span>)=
<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span> <=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'>  =
; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>WriteN</span> && =
!<span
class=3DSpellE>ReadN</span> && <span class=3DSpellE>F_EmptyN</span>=
)<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp; </span><span
class=3DSpellE><span class=3DGramE>fcounter</span></span> <=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'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </span><=
span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </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'> </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'> </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'> </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'> </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'> </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'> </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'> </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'> </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'>  =
; </span><span
class=3DSpellE>F_EmptyN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </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'>  =
; </span><span
class=3DGramE>if(</span><span class=3DSpellE>F_EmptyN</span>=3D=3D1'b0 &=
;& <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'> =
</span><=
span
class=3DSpellE>F_EmptyN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>F_FirstN</span>=3D=3D1'b0=
&& <span
class=3DSpellE>ReadN</span>=3D=3D1'b0 && <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'>  =
; </span>=
<span
class=3DSpellE>F_EmptyN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; </span><span
class=3DGramE>else</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><s=
pan style=3D'mso-spacerun:yes'> &n=
bsp; </span><span
class=3DSpellE>F_EmptyN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </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'> </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'> </span>// =
this signal gets asserted.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </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'> </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'> </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'>  =
; </span><span
class=3DSpellE>F_FirstN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </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'>  =
; </span><span style=3D'mso-spacerun:yes'> &nb=
sp; </span><span
class=3DGramE>if(</span>(<span class=3DSpellE>F_EmptyN</span>=3D=3D1'b0 &am=
p;& <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'>  =
; </span>(<span
class=3DSpellE>fcounter</span>=3D=3D2 && <span class=3DSpellE>ReadN=
</span>=3D=3D1'b0 && <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'>  =
; </span>=
<span
class=3DSpellE>F_FirstN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> if (<span class=3DSpellE>F_FirstN</span>=3D=3D1'b=
0 && (<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'>  =
; </span>=
<span
class=3DSpellE>F_FirstN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </=
span><span style=3D'mso-spacerun:yes'> </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </span><span
class=3DSpellE>F_FirstN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </span><=
span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </span><span
class=3DGramE>end</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> </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'> </span>//i=
n the FIFO.<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </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'> </span><span
class=3DGramE>begin</span><o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'> </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'>  =
; </span><span
class=3DSpellE>F_SLastN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><s=
pan
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> begin<o:p></o:p></span></pre><pre><span lang=3DEN=
-US><span style=3D'mso-spacerun:yes'> &n=
bsp; </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'>  =
; </span><span
class=3DGramE>if(</span> (<span class=3DSpellE>F_LastN</span>=3D=3D1'b0 &am=
p;& <span
class=3DSpellE>ReadN</span>=3D=3D1'b0 && <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 + -