基于FPGA内部的FIFO设计
发布时间:2008/9/16 0:00:00 访问次数:2244
在fpga设计中,内部的fifo设计是 个不可或缺的内容,其设计的质师会直接影响fpga的逻辑容量和时序。在xilinx中的某些高端器件是内置的fifo控制器,在coregen中可以直接产生这的硬fifo控制器, 强烈建议能够使用硬的hfo控制器的场合,直接的好处足节省逻辑资源和提高逻辑速度,对于绝大部分的hfo设计,推荐使用xili coregm产生。这样可以保证功能正确,对于需要定制fifo控制器的场合请小心。
下面将结合coregn来说明如何设计一个fifo
产生fifo时应使用coregen的fifo generator,打开后显示如图1所示的对话框。
图1 fifo cenerator对话框
注意其中选项的意义在左边的(read/wfik 0ock donmm)中选择同步fifo或异步fifo,即囱写时钟是否是同-个。
在( memory type)中选择是使用内部的块ram或分布式ram,或者移位寄存器或者内置的fifo(目前virtex ̄4和virtex-5的器件有内置fifo)。选择时根据具体应用决定,一般来说,当需要的ram较小时选择分布式ram;当使用有内置fifo的器件时优选内置fifo;较大的ram且没有内置fifo的器件时选择块ram。
(supported features)列的第1个功能是对不对称的位宽的支持,指fifo的读/写位宽可以不一致;第2个功能是first-word fall-through,当需要看见fifo内的第1个数,而又不想进行读操作时使用,一般用做需要根据fifo内数据决定是否需要对fifo进行操作的场合;第3个功能是说是否使用内部的内置fifo控制器,当选择内置fifo的应用时会有这个功能;第4个是eco的支持,指内置的error correcti。n checking的功能,目前只有virtex-5的块ram和内置fifo有此功能。
单击【下一步】按钮进入(fifo generator)对话框2,如图2所示。
图2 (fifo generator)对话框2
在其中设置详细的属性,从上往下一是是否标准fifo,还是需要支持first-wordfall-through:二是对于内置fifo的应用,还需要设置读/写时钟的频率;三是设置读/写位宽和深度;四是是否需要内置的eco;五是是否要使用块ram或fifo内的寄存器。注意选择了使用内部寄存器,下面显示的read latency会增加。通常块ram或者fifo是输入寄存,锁存器输出,所以不选使用内部寄存器。read latency是一个时钟周期,选择时会是两个时钟周期。在设计时需要根据时钟频率和时序要求决定是否选这个选项,不选的话,ram会有一个较大的tco。当然也可以不选择这个选项而多增加一级寄存器在代码中,这样处理的优点是可以抵消一些线延时;缺点是无法使用ram内置的寄存器,从而浪费了资源。
单击【下一步】按钮将出现如图3所示的对话框3。
从上往下一是是否需要几乎空满标志;二是是否需要产生读/写响应信号;三是是否需要产生读/写错误标志;四是是否需要产生复位及复位是同步的还是异步的;五是复位时满标志的值。上面的读/写错误就是overflow和underflow,是指当fifo满时仍在写,空时仍在读的标志,可以用来监控fifo是否出现了错误操作。ram的复位指复位ram的输入\输出寄存器,而不会复位ram内部的内容。
图3 fifo generator 对话框
单击【下一步】按钮打开如图4所示的对话框4。
图4 fifo generator对话框4
在其中可以设置fifo的空满标志的阈值。
单击【下一步】按钮打开如图5所示的对话框5。
在其中可以设置将fifo内部的数据的个数通过接口开放给用户逻辑可见。
单击【下一步】按钮打开对话框如图6所示的对话框6,可以看到所有的设置,并仔细检查设置是否正确。
单击(finish)按钮,会产生.v的原文件和.edn或。ngc的网表。综合和仿真可以用。ⅴ的源文件,布局布线时需要将.edn的文件放在mlcro search path的目录或工程目录中。另外,还会产生.xco的文件,这是产生的∏fo时的配置文件,下次可以在coregen中import这个文件产生一个和这次配置相同的fifo。
如本节所示,在coregen中产生fifo是一个较简单的操作,推荐能用coregen时尽量使用。手动定制fifo不属于本节的内容,在此不讲述。
图5 fifo generator对话框5
在fpga设计中,内部的fifo设计是 个不可或缺的内容,其设计的质师会直接影响fpga的逻辑容量和时序。在xilinx中的某些高端器件是内置的fifo控制器,在coregen中可以直接产生这的硬fifo控制器, 强烈建议能够使用硬的hfo控制器的场合,直接的好处足节省逻辑资源和提高逻辑速度,对于绝大部分的hfo设计,推荐使用xili coregm产生。这样可以保证功能正确,对于需要定制fifo控制器的场合请小心。
下面将结合coregn来说明如何设计一个fifo
产生fifo时应使用coregen的fifo generator,打开后显示如图1所示的对话框。
图1 fifo cenerator对话框
注意其中选项的意义在左边的(read/wfik 0ock donmm)中选择同步fifo或异步fifo,即囱写时钟是否是同-个。
在( memory type)中选择是使用内部的块ram或分布式ram,或者移位寄存器或者内置的fifo(目前virtex ̄4和virtex-5的器件有内置fifo)。选择时根据具体应用决定,一般来说,当需要的ram较小时选择分布式ram;当使用有内置fifo的器件时优选内置fifo;较大的ram且没有内置fifo的器件时选择块ram。
(supported features)列的第1个功能是对不对称的位宽的支持,指fifo的读/写位宽可以不一致;第2个功能是first-word fall-through,当需要看见fifo内的第1个数,而又不想进行读操作时使用,一般用做需要根据fifo内数据决定是否需要对fifo进行操作的场合;第3个功能是说是否使用内部的内置fifo控制器,当选择内置fifo的应用时会有这个功能;第4个是eco的支持,指内置的error correcti。n checking的功能,目前只有virtex-5的块ram和内置fifo有此功能。
单击【下一步】按钮进入(fifo generator)对话框2,如图2所示。
图2 (fifo generator)对话框2
在其中设置详细的属性,从上往下一是是否标准fifo,还是需要支持first-wordfall-through:二是对于内置fifo的应用,还需要设置读/写时钟的频率;三是设置读/写位宽和深度;四是是否需要内置的eco;五是是否要使用块ram或fifo内的寄存器。注意选择了使用内部寄存器,下面显示的read latency会增加。通常块ram或者fifo是输入寄存,锁存器输出,所以不选使用内部寄存器。read latency是一个时钟周期,选择时会是两个时钟周期。在设计时需要根据时钟频率和时序要求决定是否选这个选项,不选的话,ram会有一个较大的tco。当然也可以不选择这个选项而多增加一级寄存器在代码中,这样处理的优点是可以抵消一些线延时;缺点是无法使用ram内置的寄存器,从而浪费了资源。
单击【下一步】按钮将出现如图3所示的对话框3。
从上往下一是是否需要几乎空满标志;二是是否需要产生读/写响应信号;三是是否需要产生读/写错误标志;四是是否需要产生复位及复位是同步的还是异步的;五是复位时满标志的值。上面的读/写错误就是overflow和underflow,是指当fifo满时仍在写,空时仍在读的标志,可以用来监控fifo是否出现了错误操作。ram的复位指复位ram的输入\输出寄存器,而不会复位ram内部的内容。
图3 fifo generator 对话框
单击【下一步】按钮打开如图4所示的对话框4。
图4 fifo generator对话框4
在其中可以设置fifo的空满标志的阈值。
单击【下一步】按钮打开如图5所示的对话框5。
在其中可以设置将fifo内部的数据的个数通过接口开放给用户逻辑可见。
单击【下一步】按钮打开对话框如图6所示的对话框6,可以看到所有的设置,并仔细检查设置是否正确。
单击(finish)按钮,会产生.v的原文件和.edn或。ngc的网表。综合和仿真可以用。ⅴ的源文件,布局布线时需要将.edn的文件放在mlcro search path的目录或工程目录中。另外,还会产生.xco的文件,这是产生的∏fo时的配置文件,下次可以在coregen中import这个文件产生一个和这次配置相同的fifo。
如本节所示,在coregen中产生fifo是一个较简单的操作,推荐能用coregen时尽量使用。手动定制fifo不属于本节的内容,在此不讲述。
图5 fifo generator对话框5
上一篇:可编程逻器件应用SRLC 16
上一篇:在逻辑设计中选择状态机的类型