tag 标签: fifo

相关帖子
相关博文
  • 热度 23
    2016-4-22 16:11
    2370 次阅读|
    0 个评论
       FIFO一般指的是对数据的存储具有先进先出特性的一个存储器,常被用于数据的缓存或者高速异步数据的交互   下图为分别为单时钟FIFO和双时钟FIFO的结构图:     单时钟FIFO:         单时钟FIFO常用于片内数据交互 双时钟FIFO: 双时钟FIFO的一个典型应用就是异步数据的收发。 因为直接调用的fifo核,所以直接对其仿真就能查看波形 仿真文件: `timescale 1ns/1ps `define clk_period 20 module FIFO_tb; //source define reg data; reg rdclk; reg rdreq; reg wrclk; reg wrreq; //probe define wire q; wire rdempty; wire rdfull; wire wrempty; wire wrfull; //instant user module fifo fifo( .data(data), .rdclk(rdclk), .rdreq(rdreq), .wrclk(wrclk), .wrreq(wrreq), .q(q), .rdempty(rdempty), .rdfull(rdfull), .wrempty(wrempty), .wrfull(wrfull) ); //generater clock initial wrclk = 1; always #(`clk_period/2)wrclk = ~wrclk; initial rdclk = 1; always #(`clk_period)rdclk = ~rdclk; integer i; initial begin wrreq = 0; data = 0; rdreq = 0; #(`clk_period*20 + 1); //写入 for (i=0;i = 511 ;i = i + 1)begin wrreq = 1; data = i; #`clk_period; end wrreq = 0; #(`clk_period*20); //读取 for (i=0;i = 511 ;i = i + 1)begin rdreq = 1; #`clk_period; end rdreq = 0; $stop; end endmodule 仿真效果: 更多方便的fifo使用后续别的主题的笔记会有记录 谢谢
  • 热度 17
    2016-4-18 10:17
    948 次阅读|
    0 个评论
    Lesson 14 2016.4.16 内容: rx+fifo+compute+tx 要点: 1 第一行 0-85 给fifo0 2 第二行 0-85 给fifo1 3 第三行 0-85 与fifo0 、fifo1 做计算,同时传给fifo1; 4 第四行如上,且 fifo1 输入满85以后,再读取新的数字,同时将值给fifo0; 5 fifo,同时读写,无需地址,在请求来的下一个时钟有效。 易错点: 1 wrreq_0 的控制条件 2 num_cnt第一次计数清零的条件 3 模块的输入输出划分; 注意: 波形图和信号关系仍然需要整理
  • 热度 26
    2015-10-5 16:05
    1658 次阅读|
    0 个评论
    距离上次的博客已经有段时间了,这写些日子一直在调SDRAM的模块以及文档的书写,SDRAM的子模块比较多,包括init(初始化模块)、refresh(刷新模块)、write(写模块)、read(读模块),使用起来相比之前的USB控制模块、今天的GEN_FRAME(以下均表示为成帧模块)都稍显复杂一些。好了,接下来介绍我们今天的主角:成帧模块。成帧模块的作用有两个: 1.完成时钟域的转换 :将缓存到sdram中的数据读出发送给USB,sdram芯片可以达到的时钟频率范围大致为24MHZ-256MHZ,该时钟由FPGA给出,具体的时钟还要看FPGA稳定工作可以达到的时钟。另一方面,USB控制器的时钟有USB芯片给出,为48MHZ。数据在不同时钟域间的传输就要用到时钟域的转换。 2.给数据加下帧头: 发送数据之前,首先给数据加上一行帧头,表明我的一行数据开始发送,该帧头包含了图像的列信息,然后将加了帧头的数据发送给USB控制模块,由它通过USB芯片发给上位机。   (一)跨时钟域的转换 下面我们来谈谈今天主角中的主角: 跨时钟域的转换 1,不做时钟域的转换有什么危害?2.单bit的信号与多bit的信号的处理方式有何不同? 带着这两个疑问我们来看。我们在做项目的时候不免会遇到两个模块的时钟不同的情况,A用的时钟是48MHZ,B用到的时钟是133MHZ( 这里的48跟133只是说明时钟不同 )。 以 单bit的信号 为例,都以上升沿采样: A.现在有一个由133MHZ产生的脉冲信号(一个时钟周期)flag,通过接口传给A(48MHZ),A要检测到它,可是现象是,你133MHZ太快了(太短),A的上升沿根本采不到它(也有概率可以采得到)。 B.反过来呢?A(48MHZ)的信号传给B(133MHZ),由于A的时钟频率比B慢,根本不会存在B采不到A信号的情况,但是还会有问题(就是不能让你好好传),亚稳态。 解释一下亚稳态: a.概念:指触发器无法在某个规定时间段内达到一个可确认的状态。(是不是还是有点不懂,没事看下面)。 b.什么情况会导致亚稳态:在同步系统中,建立时间、保持时间不满足就可能会产生,此时的输出端(Q端)在有效的时钟沿之后比较长时间处于不确定状态,毛刺、振荡或者是一个固定的某一电压(却不是D端的电压),这段时间成为决断时间,之后稳定在0、1上,但是这是随机的,跟输入没有必然的关系。 说了这么多,什么意思?就是每个频率的时钟都有自己的一个规则(建立时间、保持时间),我的地盘听我的,到了我的地盘就要按我的规矩办事,你不按我的规则来可以,后果就是,我随便给你输出一个值,这个值是什么,看心情,用了这个数据出不出问题就不是我的事了。 c.如何解决:1.减低时钟频率。2.将寄存器打两拍再使用。 跨时钟域的处理        A比较惨,A的情况包含了B,即包含采不到的情况,又存在亚稳态的问题,下面给出A的处理过程。有没有发现今天的图非常少,先上图。   将数据打三拍,一共四个寄存器,通过一个or门,时钟域转换为48MHZ,再延时两拍得到稳定的标志位。通过or门产生的信号会有毛刺,打两拍还可以起到去毛刺的作用。                另外,多bit同频率,异相位的时钟域切换,使用双口ram进行同步(同频异相),不同频不同相时钟转换使用异步FIFO做同步。成帧模块用到了异步FIFO做处理。 (二)GEN_FRAME模块描述 1模块框图            1. SDRAM存储一帧数据后使能read_start信号,GEN_FRAME将帧头发给USB W_FIFO,同时SDRAM向GEN_FRAME的内部FIFO写入一行数据。 2. SDRAM写完一行数据后等待写下一行的命令(read_req),GEN_FRAME继续向USB W_FIFO写入数据(w_flag有效),直到写完一行后等待。当PC将W_FIFO中数据读完,即flag_C==0时,read_req有效。 3. 当read_req有效时,下一行开始传输,GEN_FRAME中的FIFO同时进行读写(SDRAM向GEN_FRAME中的FIFO中写,同时将GEN_FRAME中的数据读出到USB W_FIFO)。 4. 直到读完一帧图像后(即行计数row_cnt计满),read_req无效,w_flag无效,停止读写。 2接口定义   3关键信号时序      A) 读 GEN_frame 数据到 USB W_FIFO ①  Sdram 存完一帧数据后发送 read_start 信号,经夸时钟域处理后得到 read_start_48 ,在此信号后检测到 flag_C 为 0 (即 W_FIFO 为空),因此要将 read_start_48 做延展,得到 read_start_buf ,取它的下降沿为读一帧数据开始。 ②  检测到 read_start_buf 的下降沿后将 w_usb_flag_reg 拉高,同时 w_usb_cnt 开始计数,由于数据给出客观上延时一拍才能读到,所以讲使能信号延时一拍发出,即 w_usb_flag 。该信号为传入下一级的使能信号。 ③  一行数据读出后,继续检测 flag_C=0 时, F_read_req( 向 GEN FIFO 发送读请求 ) , r_fifo_en 与 w_usb_flag 一致,同时读出 fifo 中的数据 r_fifo_data 。 注意:根据同步 fifo 的经验,这里的 r_fifo_en 本应该提前数据一拍给出,但上面写到同时读出 fifo 数据。没错,根据代码发现,异步 fifo 的读使能 r_fifo_en 与读数据 r_fifo_data 居然是同一时刻给出来!!!!! ④  每读完一行数据我们的行计数 gen_cnt_row 要加一。这里的行计数是由 w_usb_flag_reg 的下降沿来触发目的是保证不要丢数据。 ⑤  最终 GEN_FRAME 输出数据 w_data 根据行号来选择, gen_cnt_row=0 选择 zhen_data ,否则选择 fifo_data 。 注意:这里面的 gen_cnt_row 要记到 row_cnt+1 (帧头)。 B)sdram 向 GEN_FRAME FIFO 中写数据 ①   利用 sdram 时钟检测 flag_C 的下降沿,产生 read_req ,并输出到 sdram 控制模块中。 ②  检测到 read_req 为高时, sdram 将数据传入 GEN 模块, cnt_data 开始计数,计数器由 SD_data_v 使能信号控制(读 sdram 被刷新打断,数据会被打断),计数到 499 停止。 ③  写入 fifo 的数据为 512 个 16bit 的数据,数据只有 500 个,所以要补 12 个 16bit 的数据零, cnt_12 从 cnt_data==499 时开始计数,计到 11 为止。 将 SD_data_v 与 cnt_12_flag 作或操作,时序赋值给 w_fifo_en 。数据时序赋值给 w_fifo_data 。分别为写入 fifo 的使能信号与数据信号。 
  • 热度 27
    2015-9-29 15:59
    1387 次阅读|
    0 个评论
    一 .USB2.0简介 USB2.0协议时一种高速串行的通信协议,它是半双工的,最高传输速率可达480MHZ/s,并且支持热插拔等特点,目前被广泛使用。 二.项目描述 既然是图像采集,就要有采集图像的设备,它将采集到的数据发送给FPGA,通过LVDS_BUFF模块将串行数据转换成并行数据,并完成时钟域的转换;然后通过SDRAM_CTRL控制模块将数据缓存到SDRAM中;再通过GEN_F(成帧模块)为数据加上帧结构,以及时钟域的切换;最后通过USB_CTRL模块将数据传送给USB芯片,等待上位机来将数据读走。 该项目一共有四个字模块,各个模块之间的关系可见下图,今天首先介绍USB2.0模块,我们使用的USB芯片型号为CY7C68013A。 项目整体架构图  三.USB子模块介绍 如下图, FPGA 与PC之间通过USB芯片完成数据的传输,USB芯片为两FIFO机制,分别为读、写FIFO。写数据时,FPGA将数据写入到W_FIFO中,FPGA发送一个PKG_END(结束信号),通知PC来取数据。读数据时,PC机先将数据写入R_FIFO,在一定条件下,FPGA通过USB控制模块将数据取出。       从开发板手册上可以看到这样几个管脚(管脚名字已改为笔者自己定义的名字)usb_clk,addr,w_en,usb_data,oe,r_en,flag_b,flag_c。我们来分别看看这些管脚的含义。 usb_clk:usb时钟 addr:选择哪一个FIFO。这个很好理解,既然有两块FIFO,那么我当前使用的是哪一块,就要通过这么一个地址来说明。 w_en:写使能,低有效。w_en有效数据才可写入W_FIFO。 oe:读数据时使用,数据导通到管脚。 r_en:读使能,低有效。在oe有效的前提下,r_en有效,才可从R_FIFO中读出数据。 flag_c:空标志。 flag_b:满标志。 usb_data:数据线,FPGA与USB的数据线只有这么一条,它要完成读写操作,因此它的接口类型为IO(输入输出),是一个三态结构。    1.三态门结构图解说明 注:斜线代表该信号位宽大于1。   三态门结构在IOB中,IOB通过连接PAD(芯片上的IOB与pin连接的接口)与pin连接,将数据输入输出。当en使能时,W_data通过usb_data输出到USB W_FIFO中;当en无效时,R_data通过usb_data将数据读入到R_data中。     2.接口说明 1)写接口       2)读接口   3.关键信号时序 1)写时序 FPGA写数据时: 1. 首先addr选中W_FIFO,延时一个时钟(等待读写FIFO的切换)。 2. 检测FIFO为空(flag_C)将W_en有效,同时开始向FIFO中写入数据W_data,记过两个时钟,flag_C拉高。 3. 写满FIFO后,W_en无效,通知PC来读数据。 4. Pkg_end 为结束标志,随时可以拉底信号,结束写操作,通知 PC 机来读,这里没有使用该信号。只有写满 FIFO ,上位机才来取数据。 2)读时序   FPGA读数据时: 1. 首先addr选中R_FIFO,延时一个时钟(等待读写FIFO的切换)。 2. 检测FIFO为满(flag_b)同时将O_en、R_en有效(或者O_en先有效、R_en再有效),开始从FIFO中读出数据R_data,记过两个时钟,flag_b拉高。 3.读空 FIFO后, O_en、R _en无效。   注:该项目中只使用了写操作,读操作没有使用,但还是把读时序给出,便于大家理解。USB控制模块是这四个模块中最简单的一个模块,后续还会把其它模块按照笔者自己的理解给出,希望对大家有益。   
  • 热度 19
    2014-5-2 16:01
    1326 次阅读|
    0 个评论
    All engineers must have had the unfortunate experience of verifying a part's availability with a vendor, only to have the part ultimately wind up either not getting produced or unexpectedly canceled.   Enter an engineer I once worked with who had a serious knack for choosing seemingly phantom components that never made it to the final design. In fact, he had such an extensive track record for doing this that we called him “Mr. VVI” behind his back: for Vanished Vendor Item.   Mr. VVI gave every other engineer in the department grief for being “a dinosaur.” In his mind, the fact that we all used components that were tried and true meant that we were highly unimaginative engineers who always played it safe. As far we he was concerned, we might as well have been living in the La Brea tar pit.   We stood by, quietly gleeful as he racked up thousands of dollars in redesigns to compensate for his vanished vendor items in project after project.   There was a lot of competition in the late 1980s among AMD, IDT, Cypress, and other semiconductor companies to develop the fastest FIFO. Naturally, Mr. VVI just had to use the fastest one advertised, which, as I recall was 25 nanoseconds read time. The rest of us got by with a relatively sluggish 50 ns.   Since Mr. VVI had received actual sample devices, he decided to put sockets on his board (he would need them!). He had his circuit card populated and proceeded with testing.   Although all of the control signals seemed correct, he was not able to get any output from the FIFO. There wasn't much sympathy among the ranks, I can tell you that.   After a couple of weeks, he took the chip over to the reliability lab. They popped the cover off the chip and discovered that there was no die inside!   In the two months since he had received the samples and subsequently discovered the empty chips, the manufacturer was able to get the chips to work in functional units. So Mr. VVI got a “mulligan.”   Dwight Bues graduated from Georgia Tech with a BSEE in computer engineering. He has worked in power generation, communications, RF, command/control, and test systems for 30+ years. He is a Certified Scrum Master and teaches courses in architecture, requirements, and IVVT.
相关资源
  • 所需E币: 1
    时间: 2022-7-23 16:38
    大小: 657.66KB
    上传者: Argent
    PalletQueueHandling(FIFO)Logix5000
  • 所需E币: 1
    时间: 2022-7-23 16:21
    大小: 18.85KB
    上传者: Argent
    ConveyorFIFOfirstinfirstoutwReject
  • 所需E币: 1
    时间: 2022-7-23 16:21
    大小: 236.38KB
    上传者: Argent
    ConveyorFIFO(firstinfirstout)w-Reject
  • 所需E币: 0
    时间: 2022-5-5 16:27
    大小: 47.72KB
    FIFOMemories-SolutiontoReduceFIFOMetastability(ti)
  • 所需E币: 0
    时间: 2022-5-5 15:44
    大小: 189KB
    ASYNCHRONOUSFIFOARCHITECTURES
  • 所需E币: 1
    时间: 2022-1-8 10:45
    大小: 934.87KB
    上传者: 西风瘦马
    raw-os实例之——FIFO使用(shell的另一种写法)
  • 所需E币: 4
    时间: 2022-1-2 11:54
    大小: 1.08MB
    上传者: czd886
    基于FPGA和FIFO技术的多串口系统设计与实现
  • 所需E币: 3
    时间: 2022-1-2 14:50
    大小: 510.39KB
    上传者: czd886
    基于FPGA的多通道大容量FIFO设计
  • 所需E币: 2
    时间: 2021-9-9 08:59
    大小: 430.67KB
    上传者: 阳yang
    异步,FIFO,设计,Verilog,pdf
  • 所需E币: 0
    时间: 2021-3-25 02:33
    大小: 580.1KB
    上传者: stanleylo2001
    异步FIFO结构异步FIFO最核心的部分就是精确产生空满标志位,这直接关系到设计的成败。本文采用比较读写指针来判断FIFO的空...
  • 所需E币: 0
    时间: 2021-3-18 16:54
    大小: 368.23KB
    上传者: Argent
    FPGA是一个技术密集型的行业,没有坚实的技术功底,很难形成有竞争力的产品。从技术上来看FPGA未来的发展,至少在几年内还是遵循摩尔定律的规则,工艺不断升级,目前xilinx16nm工艺的FPGA已经成熟商用,xilinx下一代产品会升级到7nm,重点应该还是瞄准通信和可能出现的新兴行业如大数据处理等。有这方面需求的网友不妨来共同学习探讨。
  • 所需E币: 0
    时间: 2020-12-25 19:06
    大小: 3.11MB
    上传者: czd886
    基于FPGA的多通道大容量FIFO设计
  • 所需E币: 0
    时间: 2020-8-24 18:01
    大小: 748.78KB
    上传者: samewell
    异步FIFO结构.pdf
  • 所需E币: 4
    时间: 2019-12-25 21:41
    大小: 63.21KB
    上传者: 2iot
    大多数DSP系统都必须通过前向和后向通道和实际系统相连.本文详细介绍了具有代表性的振动控制系统中DSP后向通道的设计包括FIFO接口、双DAC级联以及数字滤波技术的采用,并简要的介绍了控制系统的结构和部分芯片特点.……
  • 所需E币: 3
    时间: 2019-12-25 21:35
    大小: 136.2KB
    上传者: 16245458_qq.com
    TheAIX20modulecombineschanneldensityandspeedwithfourchannelsof20MHzanalogconversion.TheAIX20isbasicallyidenticaltotheAIXmoduleexcepttheA/Disconnectedinthe1Xdecimationmode,resultingina12-bit,20MHzconverterwithnodigitalfilter.Eachchannelhasasingle-polefilterandgain/offseterrorcorrectionforaccuratemeasurements.……
  • 所需E币: 5
    时间: 2019-12-25 21:35
    大小: 130.84KB
    上传者: quw431979_163.com
    TheAIXmoduledeliversfourchannelsof2.5MHz,16bitA/Dconversion,makingitidealforhigh-speedprecisiondataacquisitionandtransientcapture.TheAIXusestherevolutionaryAD9260fromAnalogDevices,deliveringhFIFOighperformance16-bitprecisionatanaffordableprice.TheA/Dusesauniquepipelinedarchitecturethatsamplestheinputatupto20MHzanddigitallyfilterstheoutputforaccurateresults.TheA/Ddelivers2.5MHzdatafroma48-samplefilterpipeline,resultinginlowerdatalatencythanstandardsigma-deltaconverterswhilestillprovidingdigitalanti-aliasfiltering.……
  • 所需E币: 3
    时间: 2019-12-25 21:35
    大小: 118.2KB
    上传者: wsu_w_hotmail.com
    TheAD40modulefeaturestwo,independent,very-high-speedanaloginputchannelsmakingitidealforhigh-speeddataacquisitionandtransientcapturesystems.……
  • 所需E币: 3
    时间: 2019-12-25 21:20
    大小: 198.02KB
    上传者: givh79_163.com
    ThetwoinputchannelsemployAnalogDevicesAD9226A/Dconverterswith12-bitresolutionatupto65MHz.Theinputsignalprocessingchainconsistsof50Ohminputtermination,ahighspeedlowdistortioninput……
  • 所需E币: 4
    时间: 2019-12-25 21:05
    大小: 129.69KB
    上传者: 16245458_qq.com
    制作步骤:先将MPLAB6.3中的BL010100.HEX(MPLAB6.4是BL010101.HEX烧到16F877,CONFIGURATIONWORD(ADDRESS2007h)=3F3Ah要烧正确。按照电路图做好板子。将板子的RS-232Port接到PC的COMPort。执行MPLAB,将Debugger或Programmer设为MPLABICD2。点选MPLABICD2SetupWizard设定COMPort。关掉COMPort的FIFO(在Windows的COMPort驱动程序里)。Connect、DownloadICD2OS。……
  • 所需E币: 4
    时间: 2019-12-28 21:40
    大小: 249.61KB
    上传者: quw431979_163.com
    在Altera公司的StratixEP1S10器件中设计了以Prewitt图像边缘检测为基础的图像处理和显示系统,包括二维滤波器模块、图像VGA显示控制器、ROM存储器、FIFO缓冲器及相应的读写控制器.整个系统集成在一个芯片上,实验证明此设计方法工作效率高,处理速度快,性能稳定,可移植性好.基于FPGA的图像边缘检测系统的设计王绍雷,赵进创,周毅(广西大学计算机与电子信息学院,广西南宁530004)摘要:在Altera公司的Strat没EPlSlO器件中设计了以Pre访tt图像边缘检测为基础的图像处理和显示系统,包括二维滤波器模块、图像VGA显示控制器、ROM存储器、FIFO缓冲器及相应的读写控制器。整个系统集成在一个芯片上,实验证明此设计方法工作效率高,处理速度快,性能稳定,可移植性好。关键词:FPGAPre讲tt算子VGAQuanusII在嵌入式图形系统处理领域,图像的边缘图作为图像的一种基本特征,经常被应用到较高层次的特征描述。换剧烈。对于连续图像以菇,y),其方向导数在边缘(法线)如图像识别、图像分割、图像增强以及图像压缩等图像处方向上有局部最大值,因此,边缘检测就是求以菇,y)梯理和分析的技术中,从而可以对图像作进一步的分析和度的局部最大值和方向。对于离散图像来说,就是利用理解【11。但是图像处理的速度问题一直是很难突破的设计瓶颈。一般情况下,控制领域及数据处理领域几乎是单V/.=01茗,y)_厂(戈一1,,,),以菇,,,)_厂(并,y一1)(1)片机和数字……