VLSI课程设计——同步FIFO的设计与实现
VLSI设计基础第三版教学设计

VLSI设计基础第三版教学设计
一、教学目标
本次课程的教学目标是让学生了解VLSI(Very Large Scale Integration)设计的基础知识,包括逻辑门、时序设计、RTL级设计、逻辑优化、物理设计等方面
的内容。
通过课程的学习,学生应该能够掌握VLSI的设计流程和方法,能够独立
完成VLSI的逻辑设计和物理设计的部分内容。
二、教学内容
1. 逻辑门
本节课程主要介绍逻辑门的基本概念、分类和应用,包括与门、或门、非门、
异或门、与非门、或非门、多输入逻辑门等。
通过课程的学习,学生能够掌握逻辑门的真值表、逻辑方程、逻辑图和性能参数等方面的内容。
2. 时序设计
本节课程主要介绍时序设计的基本概念、时序分析和时序优化方法,包括时钟
信号、时序限制、时序分析和时序优化技术等。
通过课程的学习,学生能够掌握设计公式、时序图、时序分析和时序限制等方面的内容。
3. RTL级设计
本节课程主要介绍RTL级设计的基本概念、RTL级设计流程和RTL级设计语言,包括Verilog、VHDL等。
通过课程的学习,学生能够掌握RTL级设计语言的语法、模块化设计和测试技术等方面的内容。
1。
《VLSI设计》实验指导书

实验一简单组合逻辑电路的设计与仿真一、实验目的(1)初步掌握Verilog/VHDL程序的基本结构(2)学会编写简单的Verilog/VHDL程序(3)掌握用Modelsim软件进行RTL级代码的设计和仿真的基本方法(4)掌握基本组合逻辑电路的实现方法。
二、实验内容这是一个可综合的数据比较器,很容易看出它的功能是比较数据a与数据b,如果两个数据相同,则给出结果1,否则给出结果0。
在Verilog HDL中,描述组合逻辑时常使用assign 结构。
注意equal=(a==b)?1:0,这是一种在组合逻辑实现分支判断时常使用的格式。
设计模块://--------------- compare.v -----------------------module compare (equal,a,b);input a,b;output equal;assign equal=(a==b)?1:0; // a等于b时,equal输出为1;a不等于b时,equal输出为0。
endmodule测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进行修改。
测试模块://--------------- test_compare.v-----------------module test_compare;reg a,b;wire equal;initial // initial常用于仿真时信号的给出。
begin a=0; b=0;#100 a=0; b=1;#100 a=1; b=1;#100 a=1; b=0;#100 $stop; // 系统任务,暂停仿真以便观察仿真波形。
endcompare compare1(.equal(equal),.a(a),.b(b)); // 调用模块。
endmodule仿真波形(部分):三、实验步骤1、产生一个工作库在对设计进行仿真之前,你首先需产生一个库,用于放置编译的源代码。
Slave-FIFO-使用手册

红色飓风III开发板USB2FPGA实验指导Red Logic目录第一章FX2特性介绍 (3)1.1介绍………………………………………………………………………。
3 1.2结构………………………………………………………………………。
.3 1.3特征……………………………………………………………………….。
4第二章Slave FIFO传输 (5)2.1概述.................................................................................。
.5 2.2硬件连接.. (5)2.3 Slave FIFO的几种传输方式 (6)2.3.1 同步Slave FIFO写……………………………………………。
62.3.2 同步Slave FIFO读……………………………………………。
92.3.3异步Slave FIFO写……………………………………………。
112.3.4异步Slave FIFO读 (12)第三章寄存器设置..........................................................................。
15 3.1 IFCONFIG..................................................................。
(15)3.2 PINFLAGSAB/CD.........................................................。
...。
16 3.3 FIFORESET.. (17)3.4 FIFOPINPOLAR.........................................................。
......。
18 3.5 EPxCFG..................................................................。
verilog fifo原理

verilog fifo原理FIFO(FirstInFirstOut)是一种常用的存储器结构,用于在数据传输过程中暂存数据。
在数字电路和系统设计中,FIFO被广泛应用于数据缓存、接口通信等领域。
本文将介绍VerilogFIFO的基本原理和设计方法。
一、FIFO的结构FIFO通常由输入端、输出端和存储器组成。
输入端和输出端分别对应数据的输入和输出,而存储器则用于暂存数据。
FIFO的读写操作遵循FIFO的先进先出(FIFO)原则,即最早进入FIFO的数据最先被读取。
在Verilog中,可以使用模块(module)和语句(statement)来实现FIFO。
常见的VerilogFIFO结构包括数据寄存器(dataregister)、读写指针(read/writepointer)、存储器单元(memorycell)和控制逻辑(controllogic)等部分。
二、FIFO的工作原理1.读写操作FIFO的读写操作遵循FIFO的基本原则。
在写操作时,新数据被写入存储器;在读操作时,最早进入FIFO的数据最先被读取。
控制逻辑负责管理读写指针,以确保正确的读写操作顺序。
2.缓冲作用FIFO的主要作用是缓冲数据,即在数据传输过程中,将输入端的数据存储到FIFO中,待FIFO满后再从输出端输出数据。
这样可以在一定程度上缓解数据传输的时序问题,提高数据传输的可靠性和效率。
3.溢出和欠流控制当FIFO满时,控制逻辑会停止新的写操作,以避免数据溢出。
同样地,当FIFO空时,控制逻辑会暂停新的读操作,以防止欠流(underflow)现象的发生。
这些控制逻辑的实现通常需要借助状态机(statemachine)和条件语句(conditionstatement)等Verilog语言特性。
以下是一个简单的VerilogFIFO设计示例:modulefifo(inputwireclk,reset,en_write,en_read,outputwire [7:0]data_out);reg[7:0]data_reg[15:0];//数据寄存器regread_pointer,write_pointer;//读写指针integeri;parameterSIZE=16;//FIFO容量//控制逻辑和状态机always@(posedgeclkorposedgereset)beginif(reset)beginread_pointer<=0;//复位时读写指针都归零write_pointer<=0;for(i=0;i<SIZE;i=i+1)begindata_reg[i]<=8'h00;//清空FIFOendendelseif(en_write)begindata_reg[write_pointer]<={data_reg[write_pointer],data_in };//新数据写入FIFOwrite_pointer<=write_pointer+1;//写指针加一if(write_pointer==SIZE)write_pointer<=0;//FIFO满时归零写指针endelseif(en_read)begindata_out<=data_reg[read_pointer];//读出最早进入FIFO的数据read_pointer<=read_pointer+1;//读指针加一if(read_pointer==SIZE)read_pointer<=0;//FIFO空时归零读指针endelsebegin//其他情况不做处理endendendmodule以上示例中,我们使用了一个16位的数据寄存器和两个指针(read_pointer和write_pointer)来管理FIFO的读写操作。
基于FPGA的非对称同步FIFO设计

基于FPGA的非对称同步FIFO设计FIFO是一种常用于数据缓存的电路器件,可应用于包括高速数据采集、多处理器接口和通信中的高速缓冲等各种领域。
然而在某些应用,例如在某数据采集和处理系统中,需要通过同步FIFO来连接8位A/D和16位数据总线的MCU,但是由于目前同步FIFO器件的输入与输出数据总线宽度相等,不能满足这种应用,因此通常采用输入与输出数据总线宽度均为8位的同步FIFO作为它们之间的数据缓冲,并对MCU数据总线的高8位采用软件进行屏蔽,或是在同步FIFO外围增加数据锁存器及逻辑控制器件的方法解决。
为了提高效率和降低系统设计的难度,本文采用VHDL描述语言,充分利用Xilinx公司Spartan II FPGA的系统资源,设计实现了一种非对称同步FIFO(输入与输出数据总线宽度不一致的同步FIFO),它不仅提供数据缓冲,而且能进行数据总线宽度的转换。
非对称同步FIFO的设计难点对于非对称同步FIFO的设计来说,不能简单地通过修改现成的同步FIFO模块而得到,这是因为非对称同步FIFO的设计有以下几个需要解决的难点问题:(1) 写数据与读数据总线宽度不同。
设写数据与读数据总线宽度分别为Win和Wout,必须对Win>Wout和Win<Wout这两种情况进行写数据与读数据总线宽度的正确转换。
(2) 如何协调内部处理过程中不同的时钟频率。
例如输入2个8位字节需2个时钟周期,而输出1个16位字节只需1个时钟周期,所以必须为内部数据处理提供不同的时钟频率。
(3) 由于写数据与读数据总线宽度不同,所以,要操作正确,必须保证数据存储排列的顺序及空/满标志产生的正确。
另外,由于FPGA中的寄存器个数有限,而FIFO是一种基于RAM的器件,需要占用大量的存储空间。
通常在编写VHDL程序时用数组描述的方法来设计数据存储结构,在综合时会耗用大量的寄存器,所以这种方法在FIFO的设计中是不可行的。
现代VLSI设计-基于IP核的设计第四版课程设计

现代VLSI设计-基于IP核的设计第四版课程设计一、背景介绍现代集成电路设计是电子信息工程学科体系中重要的一环,在现代电子信息领域有着广泛的应用。
随着技术的不断进步,集成度的要求越来越高,逐渐从单个器件转向系统级芯片设计,为此,设计人员要对现代VLSI设计有深入的了解和掌握。
本课程设计基于IP核的设计,旨在通过具体的实际案例,提高学生对现代VLSI设计的理解,并学习如何利用常见IP核优化系统性能,达到减少设计成本、提高设计效率、提高设计可维护性的目的。
二、设计目标本次课程设计的主要目标是掌握VLSI设计的基本原理和流程,学习如何使用IP核进行设计,理解如何对电路进行优化。
三、课程内容3.1 VLSI设计基本原理VLSI(Very Large Scale Integration)是指超大规模集成电路。
VLSI设计主要包括从设计到工艺、测试等多个环节,本部分将学习VLSI设计的基本流程、器件结构、工艺和测试方法等基本知识。
3.2 IP核简介IP核(Intellectual Property)是指独立的设计模块,可以被其他不同的电路利用。
IP核的设计和应用可以大大简化电路设计,提高设计效率和可维护性。
本部分将学习IP核的基本原理、分类和应用场景。
3.3 IP核的设计本部分将围绕基于IP核的设计开展实际操作,涉及IP核的设计和应用。
具体包括如何使用Vivado软件进行IP核的设计和如何利用IP核完成特定功能的设计。
3.4 IP核的优化本部分将介绍如何使用IP核进行电路优化,旨在提高系统设计的性能和可靠性。
具体包括如何对IP核进行定制化、如何进行IP核的性能评估以及如何评估系统的功耗等。
四、课程实践本课程设计将通过实践案例学习VLSI设计、IP核的设计与优化。
4.1 实践案例1:基于IP核的数字信号处理系统设计本案例将指导学生利用IP核进行一个简单的数字信号处理系统设计,包括数据输入输出模块、FIR滤波器模块、FFT模块。
ise中fifo的例化模板

ise中fifo的例化模板ISE中的FIFO(First In, First Out)例化模板FIFO(First In, First Out)是一种常见的数据结构,它遵循先进先出的原则,即最早进入队列的元素最先被取出。
在Xilinx的ISE设计工具中,我们可以使用FIFO例化模板快速实现FIFO功能。
本文将介绍如何在ISE中使用FIFO例化模板,并提供详细的操作步骤。
一、简介FIFO是一种常用的数据结构,用于在数字电路中存储和传输数据。
通过FIFO可以实现数据的缓存管理、实时数据传输等功能。
FIFO的主要特点是先进先出,即首先进入队列的元素将首先被读取和移除。
二、FIFO的例化模板在ISE设计工具中,我们可以通过FIFO例化模板快速实现FIFO功能。
FIFO例化模板提供了一种简单、方便的方式来实例化FIFO模块。
下面是一个使用FIFO例化模板的基本步骤:1. 打开ISE设计工具并创建一个新的工程。
2. 在Design视图中右键单击“Hierarchy”面板,并选择“In sert Template”。
3. 在弹出的窗口中,选择“FIFO Generator”模板。
4. 根据需要设置FIFO的参数,如宽度、深度、时钟频率等。
可以根据具体应用需求自定义这些参数。
5. 点击“Generate”按钮生成FIFO模块。
6. 将生成的FIFO模块添加到设计中,并完成连接。
三、实例演示假设我们需要设计一个基于FIFO的数据传输模块。
以下是一些示例代码,展示了如何在ISE中使用FIFO例化模板来实现这个功能。
```verilogmodule fifo_example(input wire clk,input wire rst,input wire [7:0] data_in,output wire [7:0] data_out,input wire read_enable,input wire write_enable);// 实例化FIFO模块fifo #(8, 16) fifo_inst (.clk(clk),.rst(rst),.data_in(data_in),.data_out(data_out),.read_enable(read_enable),.write_enable(write_enable));endmodule```在上述代码中,我们首先实例化了一个宽度为8位,深度为16的FIFO模块。
VLSI课程作业答案

VLSI课程作业答案1、VLSI层次化设计的流程;层次化设计的一般框图:2、教材P48习题2.1;Vdd=5V,Vtn=0.7V,Vg-Vtn=4.3V>0则nMOS管导通Vin<Vg-Vtn时,V out=Vin;Vin>Vg-Vtn时,V out=Vg-Vtn 所以,(a) Vin=2V时,V out=2V;(b) Vin=45V时,V out=4..3V;(c) Vin=3.5V时,V out=3.5V;(d ) Vin=0.7V 时,V out=0.7V .3、 教材P49习题2.7;d b c b a f ⋅++⋅=)(4、 教材P483习题3.14;)(w y z x Out +⋅⋅=该电路的基本版图为:5、 闩锁现象,产生闩锁的原因及消除闩锁的方法;现象:闩锁是可能发生在用体硅CMOS 工艺生产的电路中的一种情况,当一个芯片处在闩锁状态时,它会从电源吸收很大的电流,但对输入激励却没有响应而不能正确工作。
原因:闩锁现象是由于高电压引起的,当VDD 达到一个转折电压VBO 时,PN 结的反向阻断特性由于内部电场而破坏,于是出现大电流,芯片因此进入闩锁状态。
消除方法:若芯片先正常工作而后进入闩锁状态,可以移去并重新接入电源便可能恢复工作。
若接通电源就直接进入闩锁状态,则电路可能不能正确工作。
同时在设计电路时,在物理设计层次上可以采用如下规则:当一个pFET 连接到VDD 时则放置一个n 阱接触,当一个nFET 连接到地时则放置一个p 衬底接触。
此外非体硅CMOS 工艺、双阱工艺分别通过不形成pnpn 层和阻止形成电流路径来避免了闩锁问题。
6、 教材P174习题6.2;226'/143.3/1086.314235.010110V mA V A LW k n n =×=×==−β(a ),3.10.1,3.17.02V V V V V V V DSn Tn GSn sat <==−=−=晶体管处于不饱和状态,不饱和电流:mA V V V V I DSn DSn Tn GSn nDn 514.2]11)3.1(2)[2143.3(])(2[222=−××=−−=β; (b ),,3.17.02sat DSn Tn GSn sat V V V V V V >=−=−=晶体管处于饱和状态,饱和电流:mA V V I Tn GSn nD 656.2)3.1)(2143.3(])[(222==−=β。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VLSI课程设计同步FIFO设计与实现班级:学号:姓名:指导教师:VLSI课程设计报告——同步FIFO设计与实现一、FIFO概述FIFO是英文First In First Out的缩写,意为先入先出存储器,由于微电子技术的飞速发展,新一代FIFO芯片容量越来越大,体积越来越小,价格越来越便宜。
作为一种新型大规模集成电路,FIFO芯片以其灵活、方便、高效的特性,逐渐在高速数据采集、高速数据处理、高速数据传输以及多机处理系统中得到越来越广泛的应用。
它与普通随机存储器的区别是没有外部读写地址线,这样使用起来非常方便但缺点就是只能顺序读写数据,其读写数据地址依靠内部的读指针和写指针完成。
读操作与写操作可以异步进行,写入区上写入的数据按照写入的顺序从读取端的区中读出,类似于吸收写入端与读出端速度差的一种缓冲器。
计算机的串口,一般也都具有FIFO缓冲器(不是单一的FIFO存储器,而是嵌入在设备内部)。
二、同步FIFO同步FIFO(S ynchronous FIFO,下称SFIFO)的意思是说FIFO的读写时钟是同一个时钟,因此时钟频率是相同的,只是在相位上可能有差别,不同于异步FIFO,异步FIFO的读写时钟是完全异步的。
SFIFO的对外接口包括时钟,清零,读请求,写请求,数据输入总线,数据输出总线,空以及满信号。
查阅资料找到一款成型SFIFO产品的接口描述,如图1:图1 一款同步FIFO的接口资料为了更好的理解FIFO的工作方式,我们设定SFIFO的深度为8。
SFIFO的难点主要是状态判断,如图2是对空状态和满状态来进行判断的方式。
图2 FIFO空满状态判断可以看出,当读指针和写指针的值一样的时候,FIFO的状态为空。
比较麻烦的是对FIFO是否已经满的状态的判断,因为存在两种情况,第一种情况时写指针比读指针大,比如写指针= 7而读指针= 0,还有一种情况时写指针比读指针小,比如写指针= 2而读指针= 3。
由于读写电路在循环的读写RAM,所以在上面的两种情况下FIFO实际上都已经满了。
第一种情况下,写指针–读指针= 7,实际上就是FIFO深度减一;第二种情况下,(写指针+ 8) –读指针= 7,也是FIFO深度减一。
如此,就可以比较容易的判断出FIFO的状态了。
三、存储器结构及行为级描述知道了SFIFO的接口和状态控制逻辑,结构框图就很显而易见了。
如图3,本设计SFIFO由主RAM阵列,写控制逻辑,写指针控制器,状态判断逻辑,读指针控制器,读控制逻辑,输入寄存器,输出寄存器,复位及时钟逻辑构成。
图3 FIFO结构框图结构框图为所有的逻辑部件,在行为级描述中,clk模块只有简单的上升沿判断,复位电路、输入输出寄存器也非常易于实现,其VHDL代码见附录。
四、单元电路门级描述根据上述结构框图,分别绘制出RAM单元,写控制逻辑,写指针控制器,状态判断逻辑,读指针控制器,读控制逻辑,输入寄存器和输出寄存器。
在随机存储器中,存储单元大多为六管单元,如图4所示。
这种存储单元的读写控制信号都是通过同一根字线B传递的,数据都是由Q和Q读入或读出,因此这样的存储单元不能同时进行读和写的操作。
为了使FIFO存储器能够进行同步读/写操作,我们使用八管存储单元,如图5所示。
读控制和写控制分别用两根字线来控制,即Rcontrol和Wcontrol,这时数据的读入通过inB和inB,而数据的读出通过outB和outB。
与六管单元相比,八管单元增加了两个门控管、两根位线和一根字线。
由于FIFO存储器不用地址线,而是用两个地址指针分别存放读地址和写地址,并且分别有读地址译码器和写地址译码器与之对应,这样存储器的读操作和写操作就可同时进行,实现读和写的同步操作。
显然,这种存储器也能实现异步操作。
图4 普通RAM的六管单元图5 改进的8管单元读写控制逻辑比较简单,通过状态判断逻辑发送出的Full和Empty信号,同时关断读/写计数器和输入/输出锁存,避免数据异常。
一种最简单的方式,是直接将Full与WR接到一个与门上,将Empty与RD 接到一个与门上。
这样存储器在满状态和空状态下,WR和RD将分别被屏蔽,读/写信号不再起作用。
如图6,图7。
图6 写控制逻辑图7 读控制逻辑输入/输出寄存器的结构非常简单,如图8所示。
图8 输入/输出寄存器FIFO是以先进先出的方式进行数据存储,所以它没有地址线。
对于8×8的FIFO,是采用两个3位的计数器作为读指针和写指针,分别存放着读地址代码和写地址代码。
读地址译码电路和写地址译码电路分别将读指针和写指针中的地址代码译成相应的控制信号,利用这个控制信号从存储矩阵中把指定的单元选出,并把其中的数据送到输出缓冲器中去。
当写信号W为一个负脉冲时,将触发移位计数器使写指针加1,同时一组数据(一个字节)便从数据线上被输入到写指针所对应的存储单元中。
同样地,在读信号R为一个负脉冲时,读指针加1,一组数据(一个字节)便从读指针所对应的存储单元中输出。
读/写指针控制器部分晶体管级电路基本相同,都采用计数器+地址译码电路+循环移位器的方式实现,因为FIFO的指针不可能无限移动,所以需要地址码循环移位来保证两个指针都处于有效地址。
由于完整控制器电路过于复杂,不给出完整电路,图9为当中比较重要的地址码循环移位器。
图9 用于读/写指针控制器的地址码循环移位器状态判断逻辑也是非常重要的一个逻辑,由图三可知一个FIFO状态判断逻辑如果失效基本等于是废了。
在这里状态判断逻辑使用如图10的电路,FIFO使用比较判断电路防止在满状态和空状态状况下继续进行读/写操作,它是关于读指针和写指针的一个比较器。
比较判断电路定义了Full(满信号)、Empty(空信号)。
当写指针(代码)比读指针(代码)小1时,比较器的Full输出端为低电平,表示此时存储器为写满状态;当读指针(代码)等于写指针(代码)时,比较器的Empty输出端为低电平,表示此时存储器为空状态。
读指针和写指针在其余状态时,Full和Empty都为高电平。
三个全加器级联和三个非门形成A-B+1的运算器,根据图2的推算可得当A-B=7或A-B+8=7时,8×8FIFO写满,不考虑最高位进位信号时正好为A-B+1=0的运算规则,按照这个规则设计组合逻辑电路要比完全采用D触发器建立的时序电路简洁很多,总共有11级反相器延迟,在现在的VLSI技术中是不大于一个周期的,也就是说,采用如下电路形式的状态控制电路,在不增加延迟的基础上,节省了芯片空间。
图10 状态判断逻辑五、结语FIFO存储器在众多数据处理领域得到了广泛的应用,提高FIFO芯片传递数据的速度是设计FIFO芯片过程中的重点。
本设计详细列举了一个FIFO存储器的设计步骤和设计过程及其中需要注意的问题。
本文介绍的FIFO存储器虽然只是8×8的规模设计方法,但其原理可以应用到其它更大容量的同类存储器的设计当中去。
六、参考文献[1]·李东升·高速低功耗先入先出存储器电路设计与版图实现·TP333-2008[2]·佚名·FIFO存储器的设计·TN432-2008[3]·姚建楠等·基于SRAM高速灵敏放大器分析与设计[J]·电子器件·2005,28(3).[4]·杨军等·基于FPGA的高速异步FIFO存储器设计·云南大学学报(自然科学版)·2007,29(6)附录:VHDL代码library ieee;use ieee.std_logic_1164.all;entity fifo isport( clock : in std_logic;reset : in std_logic;wr_req : in std_logic;rd_req : in std_logic;data_in : in std_logic_vector(7 downto 0);full : buffer std_logic;empty : buffer std_logic;data_out : out std_logic_vector(7 downto 0));end entity;architecture behav of entity istype type_2d_array is array(0 to 7) of std_logic_vector(7 downto 0);signal fifo_memory : type_2d_array;signal wr_address : integer range 0 to 7;signal rd_address : integer range 0 to 7;signal offset : integer range 0 to 7;signal rd_signal : std_logic;signal wr_signal : std_logic;signal data_buffer : std_logic_vector(7 downto 0);signal temp : std_logic_vector(4 downto 1);beginprocess(clock)beginif rising_edge(clock) thentemp(1) <= wr_req;temp(2) <= temp(1);temp(3) <= rd_req;temp(4) <= temp(3);end if;end process;wr_signal <= temp(2) and not(temp(1));rd_signal <= temp(4) and not(temp(3));offset <= (wr_address - rd_address)when (wr_address > rd_address)else (8 - (rd_address - wr_address))when (rd_address > wr_address)else 0; empty <= '1' when (offset = 0) else '0';full <= '1' when (offset = 7) else '0';process(clock)beginif (clock'event and clock='1') thenif reset = '1' thenrd_address <= 0;data_buffer <= (others => '0');elsif (rd_signal = '1' and empty = '0') thendata_buffer <= fifo_memory(rd_address);case rd_address iswhen 7 => rd_address<=0;when others => rd_address <= rd_address + 1 ;end case;end if;end if;end process;process(clock)beginif (clock'event and clock='1') thenif reset = '1' thenwr_address <= 0;elsif (wr_signal = '1' and full = '0') thenfifo_memory(wr_address) <= data_in;case wr_address iswhen 7 => wr_address<=0;when others => wr_address <= wr_address + 1 ;end case;end if;end if;end process;data_out <= data_buffer ;end behav;。