📄 一个可以综合的verilog 写的fifo存储器.mht
字号:
sp; </span>);<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; &=
nbsp; </span><span
class=3DSpellE>Clk</span>;<span style=3D'mso-spacerun:yes'> &nbs=
p; </span>// CLK signal.<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; &=
nbsp; </span><span
class=3DSpellE>RstN</span>;<span style=3D'mso-spacerun:yes'> &nb=
sp; </span>// Low Asserted Reset signal.<o:p></o:p></span></pre><pre>=
<span
class=3DGramE><span lang=3DEN-US>input</span></span><span lang=3DEN-US> [(`=
FWIDTH-1):0]<span style=3D'mso-spacerun:yes'> =
</span><span
class=3DSpellE>Data_In</span>;<span style=3D'mso-spacerun:yes'> </spa=
n>// Data into FIFO.<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; &=
nbsp; </span><span
class=3DSpellE>FInN</span>;<span style=3D'mso-spacerun:yes'> &nb=
sp; </span>// Write into FIFO Signal.<o:p></o:p></span></pre><pre><sp=
an
class=3DGramE><span lang=3DEN-US>input</span></span><span lang=3DEN-US><spa=
n style=3D'mso-spacerun:yes'> &nbs=
p; &=
nbsp; </span><span
class=3DSpellE>FClrN</span>;<span style=3D'mso-spacerun:yes'> &n=
bsp; </span>// Clear signal to FIFO.<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; &=
nbsp; </span><span
class=3DSpellE>FOutN</span>;<span style=3D'mso-spacerun:yes'> &n=
bsp; </span>// Read from FIFO signal.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US> [(=
`FWIDTH-1):0]<span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_Data</span>;<span style=3D'mso-spacerun:yes'> =
</span>// FIFO data out.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>F_FullN</span>;<span style=3D'mso-spacerun:yes'> </spa=
n>// FIFO full indicating signal.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>F_EmptyN</span>; // FIFO empty indicating signal.<o:p></o:p>=
</span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>F_LastN</span>;<span style=3D'mso-spacerun:yes'> </spa=
n>// FIFO Last but one signal.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; =
</span><span
class=3DSpellE>F_SLastN</span>; // FIFO <span class=3DSpellE>SLast</span> b=
ut one signal.<o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>output</span></span><span lang=3DEN-US><sp=
an style=3D'mso-spacerun:yes'> &nb=
sp; </spa=
n><span style=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>F_FirstN</span>; // Signal indicating only one<o:p></o:p></s=
pan></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp;  =
; </span>// word in FIFO.<o:p></o=
:p></span></pre><pre><span
class=3DSpellE><span class=3DGramE><span lang=3DEN-US>reg</span></span></sp=
an><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_FullN</span>;<o:p></o:p></span></pre><pre><span class=3DSp=
ellE><span
class=3DGramE><span lang=3DEN-US>reg</span></span></span><span lang=3DEN-US=
><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_EmptyN</span>;<o:p></o:p></span></pre><pre><span class=3DS=
pellE><span
class=3DGramE><span lang=3DEN-US>reg</span></span></span><span lang=3DEN-US=
><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_LastN</span>;<o:p></o:p></span></pre><pre><span class=3DSp=
ellE><span
class=3DGramE><span lang=3DEN-US>reg</span></span></span><span lang=3DEN-US=
><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_SLastN</span>;<o:p></o:p></span></pre><pre><span class=3DS=
pellE><span
class=3DGramE><span lang=3DEN-US>reg</span></span></span><span lang=3DEN-US=
><span style=3D'mso-spacerun:yes'>  =
; </span><span
class=3DSpellE>F_FirstN</span>;<o:p></o:p></span></pre><pre><span class=3DS=
pellE><span
class=3DGramE><span lang=3DEN-US>reg</span></span></span><span lang=3DEN-US=
><span style=3D'mso-spacerun:yes'> </span>[`FCWIDTH:0]<sp=
an style=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>fcounter</span>; //counter indicates num of data in FIFO<o:p=
></o:p></span></pre><pre><span
class=3DSpellE><span class=3DGramE><span lang=3DEN-US>reg</span></span></sp=
an><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>[(`=
FCWIDTH-1):0]<span style=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>rd_ptr</span>;<span style=3D'mso-spacerun:yes'> &=
nbsp; </span>// Current read pointer.<o:p></o:p></span></pre><p=
re><span
class=3DSpellE><span class=3DGramE><span lang=3DEN-US>reg</span></span></sp=
an><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>[(`=
FCWIDTH-1):0]<span style=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>wr_ptr</span>;<span style=3D'mso-spacerun:yes'> &=
nbsp; </span>// Current write pointer.<o:p></o:p></span></pre><=
pre><span
class=3DGramE><span lang=3DEN-US>wire</span></span><span lang=3DEN-US><span=
style=3D'mso-spacerun:yes'> </span>[(`FWIDTH-1):0]<span style=
=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>FIFODataOut</span>; // Data out from FIFO <span class=3DSpel=
lE>MemBlk</span><o:p></o:p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>wire</span></span><span lang=3DEN-US><span=
style=3D'mso-spacerun:yes'> </span>[(`FWIDTH-1):0]<span style=
=3D'mso-spacerun:yes'> </span><span
class=3DSpellE>FIFODataIn</span>;<span style=3D'mso-spacerun:yes'> </=
span>// Data into FIFO <span
class=3DSpellE>MemBlk</span><o:p></o:p></span></pre><pre><span class=3DGram=
E><span
lang=3DEN-US>wire</span></span><span lang=3DEN-US><span style=3D'mso-spacer=
un:yes'> </span><span
class=3DSpellE>ReadN</span><span style=3D'mso-spacerun:yes'> </span>=
=3D <span
class=3DSpellE>FOutN</span>;<o:p></o:p></span></pre><pre><span class=3DGram=
E><span
lang=3DEN-US>wire</span></span><span lang=3DEN-US><span style=3D'mso-spacer=
un:yes'> </span><span
class=3DSpellE>WriteN</span> =3D <span class=3DSpellE>FInN</span>;<o:p></o:=
p></span></pre><pre><span
class=3DGramE><span lang=3DEN-US>assign</span></span><span lang=3DEN-US> <s=
pan
class=3DSpellE>F_Data</span><span style=3D'mso-spacerun:yes'> &n=
bsp; </span>=3D <span
class=3DSpellE>FIFODataOut</span>;<o:p></o:p></span></pre><pre><span class=
=3DGramE><span
lang=3DEN-US>assign</span></span><span lang=3DEN-US> <span class=3DSpellE>F=
IFODataIn</span> =3D <span
class=3DSpellE>Data_In</span>;<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> </span>FIFO_MEM_BLK =
<span
class=3DSpellE><span class=3DGramE>memblk</span></span><span class=3DGramE>=
(</span>.<span
class=3DSpellE>clk</span>(<span class=3DSpellE>Clk</span>),<o:p></o:p></spa=
n></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'>  =
; &n=
bsp; </span>.<span
class=3DSpellE><span class=3DGramE>writeN</span></span><span class=3DGramE>=
(</span><span
class=3DSpellE>WriteN</span>),<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; </span><span style=3D'mso-spacerun:yes'> &=
nbsp; </span>.<s=
pan
class=3DSpellE>rd_<span class=3DGramE>addr</span></span><span class=3DGramE=
>(</span><span
class=3DSpellE>rd_ptr</span>),<o:p></o:p></span></pre><pre><span lang=3DEN-=
US><span style=3D'mso-spacerun:yes'> &nb=
sp; =
</span>.<span
class=3DSpellE>wr_<span class=3DGramE>addr</span></span><span class=3DGramE=
>(</span><span
class=3DSpellE>wr_ptr</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_<span class=3DGramE>in</span></span><span class=3DGramE=
>(</span><span
class=3DSpellE>FIFODataIn</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_<span class=3DGramE>out</span></span><span class=3DGram=
E>(</span><span
class=3DSpellE>FIFODataOut</span>)<o:p></o:p></span></pre><pre><span lang=
=3DEN-US><span style=3D'mso-spacerun:yes'> &nb=
sp; =
</span>);<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
Control circuitry for FIFO. If reset or <span
class=3DSpellE>clr</span> signal is asserted,<o:p></o:p></span></pre><pre><=
span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
all the counters are set to 0. If write only the write counter<o:p></o:p></=
span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
is incremented else if read only read counter is incremented<o:p></o:p></sp=
an></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
else if both, read and write counters are incremented.<o:p></o:p></span></p=
re><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
<span
class=3DSpellE>fcounter</span> indicates the num of items in the FIFO. Writ=
e only<o:p></o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
increments the <span
class=3DSpellE>fcounter</span>, read only decrements the counter, and<o:p><=
/o:p></span></pre><pre><span
lang=3DEN-US><span style=3D'mso-spacerun:yes'> </span>// =
read && write doesn't change the counter value.<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>) begin<o:p></o:p>=
</span></pre><pre><span
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 style=3D'mso-spacerun:yes'> </s=
pan><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'> </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> ) begin<o:p></o:=
p></span></pre><pre><span
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -