📄 一个可以综合的verilog 写的fifo存储器.mht
字号:
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span>=
(<span
class=3DSpellE>fcounter</span> =3D=3D (`FDEPTH-3) && <span class=3D=
SpellE>WriteN</span>=3D=3D1'b0 && <span
class=3DSpellE>ReadN</span>=3D=3D1'b1))<o:p></o:p></span></pre><pre><span l=
ang=3DEN-US><span style=3D'mso-spacerun:yes'> =
</span><=
span
class=3DSpellE>F_SLastN</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_SLastN</span>=3D=3D1'b0=
&& (<span
class=3DSpellE>ReadN</span> ^ <span class=3DSpellE>WriteN</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>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_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>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_LastN</span> indicates that there is one space for only on=
e data<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
word in 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_LastN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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_FullN</span>=3D=3D1'b0 &am=
p;& <span
class=3DSpellE>ReadN</span>=3D=3D1'b0)<span style=3D'mso-spacerun:yes'>&nbs=
p; </span>||<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span>=
(<span
class=3DSpellE>fcounter</span> =3D=3D (`FDEPTH-2) && <span class=3D=
SpellE>WriteN</span>=3D=3D1'b0 && <span
class=3DSpellE>ReadN</span>=3D=3D1'b1))<o:p></o:p></span></pre><pre><span l=
ang=3DEN-US><span style=3D'mso-spacerun:yes'> =
</span><=
span
class=3DSpellE>F_LastN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><sp=
an
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>F_LastN</span>=3D=3D1'b0 =
&& (<span
class=3DSpellE>ReadN</span> ^ <span class=3DSpellE>WriteN</span>) )<o:p></o=
:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span>=
<span
class=3DSpellE>F_LastN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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_LastN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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_FullN</span> indicates that the FIFO is full.<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_FullN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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)<span s=
tyle=3D'mso-spacerun:yes'> </span>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 &=
;& <span
class=3DSpellE>WriteN</span>=3D=3D1'b0 && <span class=3DSpellE>Read=
N</span>=3D=3D1'b1)<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp; </span><span
class=3DSpellE>F_FullN</span> <=3D 1'b0;<o:p></o:p></span></pre><pre><sp=
an
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DGramE>else</span> if(<span class=3DSpellE>F_FullN</span>=3D=3D1'b0 =
&& <span
class=3DSpellE>ReadN</span>=3D=3D1'b0)<o:p></o:p></span></pre><pre><span la=
ng=3DEN-US><span style=3D'mso-spacerun:yes'> &=
nbsp; &nbs=
p; </span><span
class=3DSpellE>F_FullN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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_FullN</span> <=3D 1'b1;<o:p></o:p></span></pre><pre><sp=
an
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 class=3DSpellE><=
span
class=3DGramE><span lang=3DEN-US>endmodule</span></span></span><span lang=
=3DEN-US><o:p></o:p></span></pre><pre><span
lang=3DEN-US>//////////////////////////////////////////////////////////////=
/////<o:p></o:p></span></pre><pre><span
lang=3DEN-US>//<o:p></o:p></span></pre><pre><span lang=3DEN-US>//<o:p></o:p=
></span></pre><pre><span
lang=3DEN-US>//<span style=3D'mso-spacerun:yes'> </span>Configu=
rable memory block for <span
class=3DSpellE><span class=3DGramE>fifo</span></span>. The width of the <sp=
an
class=3DSpellE>mem</span><o:p></o:p></span></pre><pre><span lang=3DEN-US>//=
<span style=3D'mso-spacerun:yes'> </span>block is configured vi=
a FWIDTH. All the data into <span
class=3DSpellE><span class=3DGramE>fifo</span></span> is done<o:p></o:p></s=
pan></pre><pre><span
lang=3DEN-US>//<span style=3D'mso-spacerun:yes'> </span>synchro=
nous to block.<o:p></o:p></span></pre><pre><span
lang=3DEN-US>//<o:p></o:p></span></pre><pre><span lang=3DEN-US>//<span styl=
e=3D'mso-spacerun:yes'> </span><span
class=3DGramE>Author :</span> <span class=3DSpellE>Venkata</span> <span
class=3DSpellE>Ramana</span> <span class=3DSpellE>Kalapatapu</span><o:p></o=
:p></span></pre><pre><span
lang=3DEN-US>//<o:p></o:p></span></pre><pre><span lang=3DEN-US>////////////=
///////////////////////////////////////////////////////<o:p></o:p></span></=
pre><pre><span
class=3DGramE><span lang=3DEN-US>module</span></span><span lang=3DEN-US> FI=
FO_MEM_BLK( <span
class=3DSpellE>clk</span>,<o:p></o:p></span></pre><pre><span lang=3DEN-US><=
span style=3D'mso-spacerun:yes'> &=
nbsp; &nbs=
p; </span><span
class=3DSpellE><span class=3DGramE>writeN</span></span>,<o:p></o:p></span><=
/pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp; </span><span
class=3DSpellE>wr_addr</span>,<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>rd_addr</span>,<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>data_in</span>,<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>data_out</span><o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; </spa=
n>);<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>input</span></span><span lang=3DEN-US><spa=
n style=3D'mso-spacerun:yes'> &nbs=
p; </span=
><span
class=3DSpellE>clk</span>;<span style=3D'mso-spacerun:yes'> &nbs=
p; </span>// input <span
class=3DSpellE>clk</span>.<o:p></o:p></span></pre><pre><span class=3DGramE>=
<span
lang=3DEN-US>input<span style=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>writeN</span></span></span><span lang=3DEN-US>;<span style=
=3D'mso-spacerun:yes'> </span>// Write Signal to put data into <span
class=3DSpellE>fifo</span>.<o:p></o:p></span></pre><pre><span class=3DGramE=
><span
lang=3DEN-US>input<span style=3D'mso-spacerun:yes'> </span>[</span></=
span><span
lang=3DEN-US>(`FCWIDTH-1):0]<span style=3D'mso-spacerun:yes'> </span>=
<span
class=3DSpellE>wr_addr</span>;<span style=3D'mso-spacerun:yes'> =
</span>// Write Address.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>input<span style=3D'mso-spacerun:yes'>&nbs=
p; </span>[</span></span><span
lang=3DEN-US>(`FCWIDTH-1):0]<span style=3D'mso-spacerun:yes'> </span>=
<span
class=3DSpellE>rd_addr</span>;<span style=3D'mso-spacerun:yes'> =
</span>// Read Address.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>input<span style=3D'mso-spacerun:yes'>&nbs=
p; </span>[</span></span><span
lang=3DEN-US>(`FWIDTH-1):0]<span style=3D'mso-spacerun:yes'> </=
span><span
class=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -