首页 > 其他分享 >FIFO读数取数

FIFO读数取数

时间:2024-08-20 11:06:45浏览次数:9  
标签:rd 读数 FIFO 取数 wire en wr rst

FIFO:先进先出的缓存器。

常应用于带宽不同或者跨时钟域等数据传输情况。 相关参数:数据宽度,存储深度,将空标志位。空标志位。将满标志位,满标志位。读写时钟。其中将满信号与将空信号相较于真正的满信号与空信号都会提前一个时钟周期拉高。

FIFO generator配置注意事项:

Basic选项卡:Interface Type 选 Native,即传统接口。FIFO Implementation是指选择想要实现的是同步FIFO还是异步FIFO,以及使用什么资源实现FIFO,当选择Independent Clocks Block RAM,就是表示用块RAM实现异步FIFO。值得注意,FIFO是一种不包含地址的缓存方式。因此这里选择RAM或者ROM其实不影响对FIFO的应用。 Native Ports选项卡:Read Mode用于设置读FIFO时的读模式,一般选默认的 Standard FIFO. 在Data Port Parameters中设置读写端口的数据总线宽度与FIFO深度(Write Width,Write Depth,Read Width)。Reset Pin是复位信号,按需勾选。其余默认。 Status Flags选项卡:按需勾选将满和将空。其余默认。 Data Counts选项卡:计数FIFO中有效数据的个数,为更方便观察读写过程,可以将读写端口的计数都打开。Write/Read Data Count表示计数值总线位宽。一般选8bit就够用了。 Summary选项卡:显示当前配置。确认当前配置无误时直接点击OK. Generate Output Products窗口,直接点击Generate。

.veo例化模版:

fifo16to8 your_instance_name (
  .rst(rst),                      // input wire rst
  .wr_clk(wr_clk),                // input wire wr_clk
  .rd_clk(rd_clk),                // input wire rd_clk
  .din(din),                      // input wire [15 : 0] din
  .wr_en(wr_en),                  // input wire wr_en
  .rd_en(rd_en),                  // input wire rd_en
  .dout(dout),                    // output wire [7 : 0] dout
  .full(full),                    // output wire full
  .empty(empty),                  // output wire empty
  .rd_data_count(rd_data_count),  // output wire [10 : 0] rd_data_count
  .wr_rst_busy(wr_rst_busy),      // output wire wr_rst_busy
  .rd_rst_busy(rd_rst_busy)      // output wire rd_rst_busy
);

基础的模块例化之fifo_rd:

功能:设定rd_cnt[7:0],以便取数存用。

`timescale 1ns / 1ns

  module fifo_rd(
      input             clk ,       // 时钟信号
      input             rst_n ,   // 复位信号
      input                CLJwhole_en , //收好一组指令留待处理。
      output  reg  [7:0]  rd_cnt ,   // 向外读64个。
      output  reg   fifo_rd_en        // FIFO读使能
  );
  
 reg  [3:0]  state;
 
 //读出FIFO的数据
 always @(posedge clk ) begin
     if(~rst_n) begin
         fifo_rd_en <= 1'b0;
         rd_cnt    <= 4'd0;
         state      <= 4'd0;
     end
     else begin
        case(state)
            2'd0: begin                     
                if(CLJwhole_en) begin        //如果检测到FIFO被写满
                    rd_cnt <= 8'd1;     //给出第一个rd_cnt.
                    fifo_rd_en <= 1'b1; 
                    state <= 2'd1;         //开始取数。得到64个8比特数。
                end
                else
                    state <= state;
            end 
            2'd1: begin //接下来在rd_cnt从1数到64的过程中FIFO就会每个时钟拍打出一个[7:0] dout。
                if(rd_cnt == 8'd65) begin //rd_cnt数到第65开始关闭rd_en。等待下一个whole_en。
                    fifo_rd_en <= 1'b0;    //关闭读使能
                    rd_cnt <= 8'd0;
                    state   <= 2'd2;          //开始读操作
                    end
                else
                    rd_cnt <= rd_cnt + 4'd1;
            end
            2'd2: begin
                rd_cnt <= 8'd0;
                fifo_rd_en <= 1'b0;    //关闭读使能
                state      <= 4'd0;
            end 
            default : state <= 2'd0;
        endcase
     end
 end
 
 endmodule

fifo_rd功能优化之“存满读空预处理”

(留待编辑)

generate 变量i取数

wire [7:0]  rcvCLJ_fifo [63:0];
genvar i;
generate
for(i=0; i<=63; i=i+1) begin: data
   assign rcvCLJ_fifo[i] = (rd_cnt == i+2) ? fifo_dout : rcvCLJ_fifo[i];
end
endgenerate

 为什么从i+2开始算?

(留待编辑)

标签:rd,读数,FIFO,取数,wire,en,wr,rst
From: https://www.cnblogs.com/Sichg/p/18369049

相关文章

  • fpga图像处理实战-图像缓存(FIFO)
    FPGA实现`timescale1ns/1ps////Company://Engineer:////CreateDate:2024/08/1813:47:22//DesignName://ModuleName:line_buffer//ProjectName://TargetDevices://ToolVersions://Description:////Dependencies:////Revision......
  • 指针式仪表自动读数系统设计
    摘要随着模式识别技术、计算机技术等多种技术的不断完善和发展,机器视觉获得了巨大的进步与发展。目前在许多企业中,存在着大量的仪表,仪表的读数都要靠人来完成,工作量很大而且误差率相对来说比较高,基于这个原因,设计了一个工业生产线在线检测数据数字化处理系统。首先通过摄像......
  • Axios请求使用params参数导致后端获取数据嵌套
    问题重述:首先看前端的axios请求这里我使用params参数将data数据传给后端letdata=JSON.stringify(this.posts);axios.post("/blog_war_exploded/insertPost",{params:{data:data......
  • linq快速动态获取数据库表字段名称、类型、数据
     varbj="Bj";             varpbj=typeof(Xs_xx).GetProperty(bj);//获得班级属性      /*      varcxbj=fromaainsjklj.Xs_xx            lety=(string)pbj.GetValue(aa,null)//linq......
  • 振弦读数仪 轻松测量传感器振弦、电压、电流数据
    振弦读数仪轻松测量传感器振弦、电压、电流数据VH03型多功能读数仪是一款专用于多类型传感器的手持式设备。主要用于测量单弦式振弦传感器的数据,同时也能够辅助测量电压和电流传感器的数据。该仪器采用了32位ARM处理器和大尺寸全彩屏幕,以及阵列按键设计,使得操作体验更加顺畅。V......
  • 异步FIFO设计
    AsynchronousFIFODesign总结来自CliffordE.Cummings论文《SimulationandSynthesisTechniquesforAsynchronousFIFODesign》一、设计难点使用格雷码计数时空和满的判断。同步FIFO读写时钟相同,而异步FIFO读写来自不同两个读写时钟,需要考虑跨时钟域设计。二、设......
  • Windows出大事,超高危漏洞 + 降级攻击风险;“0.0.0.0日”漏洞卷土重来,盯上MacOs和Linux;
    新闻1:警告!18年前的浏览器漏洞卷土重来,MacOS和Linux设备面临威胁!网络安全研究人员发现了一个新的“0.0.0.0日”漏洞,该漏洞影响所有主流网络浏览器,恶意网站可能会利用该漏洞侵入本地网络。OligoSecurity的研究员AviLumelsky表示,这一严重漏洞“暴露了浏览器处理网络请求时......
  • 「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)
    概述队列,是一种基本的数据结构,也是一种数据适配器。它在底层上以链表方法实现。队列的显著特点是他的添加元素与删除元素操作:先加入的元素总是被先弹出。一个队列应该应该是这样的:--------------QUEUE-------------———————————......
  • Python Telegram Bot 从数据库获取数据时出错
    我正在开发用于管理企业用途任务的电报机器人。团队负责人注册他的公司并获得唯一的ID,然后可以分配任务。问题是,当团队负责人分配任务时,他可以使用/viewtasks访问它们。但是,当员工尝试查看任务时,它会打印出“错误。您尚未注册”。似乎无法检索与用户关联的company_id,即使......
  • FPGA设计之跨时钟域(CDC)设计篇(5)----同步FIFO的两种设计方法(计数器法/高位扩展法 | 手撕
    1、什么是FIFO?        FIFO(FirstInFirstOut)是一种先进先出的数据缓存器,在逻辑设计里面用的非常多。它是一种存储器结构,被广泛应用于芯片设计中。FIFO由存储单元队列或阵列构成,第一个被写入队列的数据也是第一个从队列中读出的数据。        FIFO设计可......