数据FIFO的读写和信息FIFO的基本使用方法

2023-05-16

数据FIFO
一、写使能-wr_en,写数据-wdata

//din :8bit
assign      wr_en = din_vld ;//din_vld 为数据有效指示信号
assign      wdata = {din_sop,din_eop,din};//如果是包文形式,可以将sop和eop写入数据FIFO的数据中,可以保证起始和结束条件与数据始终同步

注意:此刻的写使能和写数据均为组合逻辑,如果其中一个使用了时序逻辑,那么基于同步的原则,另一个也必须进行同步处理

always @(posedge clk or negedge rst_n)begin
  if(rst_n==0)begin
       wr_en <= 0;
  end
  else begin
       wr_en <= din_vld;
  end
end

always @(posedge clk or negedge rst_n)begin
  if(rst_n==0)begin
       wdata <= 0;
  end
  else begin
       wdata <= {din_sop,din_eop,din};
  end
end

二、读使能-rd_en,输出的数据-q[7:0]

assign   rd_en = empty == 0;//数据FIFO不为空
//优先使用Show-ahead模式

三、读数据部分(包括din_sop和din_eop)

//dout
always@(posedge clk or negedge rst_n)begin
    if(rst_n == 0)begin
       dout <= 0;
    end
    else begin
      dout <= q[7:0];
    end
end 
assign    dout_sop_tmp  = q[9] && rd_en;
assign    dout_eop_tmp = q[8] && rd_en;
//dout_sop
always@(posedge clk or negedge rst_n)begin
    if(rst_n == 0)begin
       dout_sop <= 0;
    end
    else begin
      dout_sop <= dout_sop_tmp;
    end
end
//dout_eop
always@(posedge clk or negedge rst_n)begin
    if(rst_n == 0)begin
       dout_sop <= 0;
    end
    else begin
      dout_sop <= dout_eop_tmp;
    end
end

always @(posedge clk or negedge rst_n)begin
   if(rst_n == 0)begin
      dout_vld <= 0;
   end
   else begin
     dout_vld <= rd_en;
   end
end

信息FIFO
不需要很大的存储空间,但是可以很方便的告诉数据FIFO什么时候读。例:要求收到eop时输出报文,假如第一个报文长度为200字节,而第二个报文长度小于200字节,若设置读使能为 rd_en = empty == 0 && din_eop;
那么在第一个报文没有输出完时就收到了第二个报文的eop,这时根据rd_en的逻辑该输出下一个报文,但是显然第一个报文并未输出完,就会造成数据的缺失。
根据FIFO的读写隔离原则,使用信息FIFO。
一、写使能和写数据

assign     msg_wr_en       =  din_eop ; //输入一个完整的报文,此处条件可以根据不同需求进行更改
assign     msg_wr_wdata =  1 ;//因为此处只是起到一个标识作用,故存储什么都可以,如果有需要存储的,比如报文的长度可以存入信息FIFO

二、读使能

assign   msg_rd_en  =  msg_empty == 0;//信息FIFO不为空,表明数据FIFO中已经有至少一个完整的报文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据FIFO的读写和信息FIFO的基本使用方法 的相关文章

  • 移动端开发——APP端上H5容器化建设

    1 背景 当前移动端和前端的结合愈加紧密 xff0c 尤其是在偏重活动运营的电商App中 xff0c 受制于App版本审核 xff0c 具备研发成本低 可灵活发布等特点的H5页面受到青睐 xff0c 使其在APP端上承接了越来越多的业务 然
  • C++时间与字符串转换

    1 常用的时间存储方式 1 xff09 time t类型 xff0c 这本质上是一个长整数 xff0c 表示从1970 01 01 00 00 00到目前计时时间的秒数 xff0c 如果需要更精确一点的 xff0c 可以使用timeval精
  • 解决linux环境下nohup: redirecting stderr to stdout问题

    在生产环境下启动Weblogic时 xff0c 发现原来好好的nohup信息输出到指定文件中的功能 xff0c 突然出问题了 现象是控制台输出的信息一部分输出到了我指定的文件 xff0c 另一部分却输出到了nohup out xff0c 而
  • [转]Redis作为消息队列与RabbitMQ的性能对比

    周末测试了一下RabbitMQ的性能 xff0c RabbitMQ是使用Erlang编写的一个开源的消息队列 xff0c 本身支持很多的协议 xff1a AMQP xff0c XMPP SMTP STOMP xff0c 也正是如此 xff0
  • Python3.7 实现TCP通信

    TCP 连接程序分为服务端和客户端两部分 服务端步骤如下 xff1a 1 创建套接字Socket 什么是套接字 应用层通过传输层进行数据通信时 xff0c TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题 为了区别不同的应用程序
  • CentOS、Ubuntu、Debian三个linux比较异同

    Linux有非常多的发行版本 xff0c 从性质上划分 xff0c 大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本 商业版本以Redhat为代表 xff0c 开源社区版本则以debian为代表 这些版本各有不同的特点 xff
  • LDAP 中 CN, OU, DC 的含义

    1 LDAP的存储规则 区分名 xff08 DN xff0c Distinguished Name xff09 和自然界中的树不同 xff0c 文件系统 LDAP 电话号码簿目录的每一片枝叶都至少有一个独一无二的属性 xff0c 这一属性可
  • bat修改hosts文件

    attrib R C WINDOWS system32 drivers etc hosts 64 echo 64 echo 127 0 0 1 aaaa bbb com gt gt C WINDOWS system32 drivers et
  • 使用org.apache.tools.zip实现zip压缩和解压

    import java io import org apache tools zip import java util Enumeration 功能 zip压缩 解压 支持中文文件名 说明 本程序通过使用Apache Ant里提供的zip工
  • freeModbus代码解读及移植笔记

    freeModbus的代码库还是很好用的 xff0c 本人在wince和C8051F410下均移植成功 xff08 只用到RTU模式 xff09 但freeModbus提供的文档比较少 xff0c 只能对照着Modbus协议一点点试着读懂源
  • MySQL变量:local_infile

    local infile服务器变量指示能否使用load data local infile命令 该变量默认为ON 该变量为OFF时 xff0c 禁用客户端的load data local infile命令 Sql代码 mysql gt sh
  • strcpy函数实现

    C语言标准库函数strcpy的一种典型的工业级的最简实现 返回值 xff1a 返回目标串的地址 对于出现异常的情况ANSI C99标准并未定义 xff0c 故由实现者决定返回值 xff0c 通常为NULL 参数 xff1a strDesti
  • C++库介绍

    1 C 43 43 标准库 xff08 STL xff09 STL六大组件 容器 算法 迭代器 仿函数 适配器 配接器 空间配置器 1 容器 各种数据结构 xff0c 如vector list deque set map等 xff0c 用来
  • 【C++】extern “C“ 用法详解

    前言 前面简单了解了C 43 43 中的extern 34 C 34 之后 xff0c 可能很多小伙伴对这个陌生的词非常困惑 xff0c 不能理解他的使用场景 所以本章内容就来详细了解extern 34 C 34 的用法 xff0c 这里使
  • FreeRTOS学习第三篇——FreeRTOS任务创建(下)

    声明 xff1a 本文为博主的学习篇章 xff0c 欢迎大家指错 xff0c 共同学习 在解决一下上篇遗留下来的问题之前 xff0c 还得提前做些功课 xff0c 了解一些FreeRTOS的全局变量 PRIVILEGED DATA stat
  • printf用法之打印二进制,八进制,十进制,十六进制

    printf用法之打印2进制 xff0c 八进制 xff0c 十进制 xff0c 十六进制 printf是格式化输出函数 xff0c 它可以直接打印十进制 xff0c 八进制 xff0c 十六进制 xff0c 输出控制符分别为 d o x
  • 【飞控开发基础教程7】疯壳·开源编队无人机-SPI(气压计数据获取)

    COCOFLY教程 疯壳 无人机 系列 SPI xff08 气压计数据获取 xff09 图1 一 SPL06 简介 SPL06 是歌尔公司最新推出新款气压传感器 xff0c 最新推出新款气压传感器SPL06 001 xff0c 歌尔是全球领
  • 【遥控器开发基础教程5】疯壳·开源编队无人机-SPI(2.4G 双机通信)

    COCOFLY教程 疯壳无人机 系列 SPI 2 4G 双机通信 图1 一 NRF24L01 1 1 NRF24L01 简介 NRF24L01 是由NORDIC 生产的工作在 2 4GHz 2 5GHz 的ISM 频段的单片无线收发器芯片
  • tcp之IO模型

    5种io模型 tcp服务器分为了5种io复用模型 分别是 阻塞io模型 非阻塞io模型 io复用 信号驱动io 异步io 本文会讲前面3种io模型的tcp服务器实现 本文只做tcp服务器实现 客户端逻辑处理 接收数据等缓冲区不做深入说明 简
  • C语言带参数的宏定义

    C语言允许宏带有参数 在宏定义中的参数称为 形式参数 xff0c 在宏调用中的参数称为 实际参数 xff0c 这点和函数有些类似 对带参数的宏 xff0c 在展开过程中不仅要进行字符串替换 xff0c 还要用实参去替换形参 带参宏定义的一般

随机推荐