001-什么是VOQ

news/2024/9/25 18:55:34/文章来源:https://www.cnblogs.com/xuzhi-fpga/p/18431977

1、什么是VOQ(Virtual Output Queues)?

VOQ(虚拟输出序列)是一种存储结构,由FIFO与RAM以及逻辑结构组合构成。在一些数据应用场景中能够有效存储数据并且能够及时输出,避免阻塞。一句话来说VOQ的优点在于:共享存储,较少存储资源,避免数据阻塞,提高数据输出效率。

2、为什么FIFO会有数据阻塞,而VOQ不会有数据阻塞?

生活举例如下:在一条可以右转和直行的道路上,如果前面的直行车在等红路灯,虽然右转线已空闲,但是由于直行车的阻塞后面的右转车辆就只能等待。FIFO也会出现这种情况。

应用场景如下:4路数据共用一个数据输入端口,由于FIFO是先入先出,而第0路数据由于下游模块没有处理数据暂时停止读取,此时会导致后面的第1路、2路、3路数据无法读取,造成排头阻塞。

克服这种局限性的一种方法是使用虚拟输出队列(Virtual Output Queues)。

虚拟输出队列(Virtual Output Queues)总体的想法十分朴素:在输入端口将发送到不同端口的数据包虚拟成不同的队列,并且彼此互不影响,这样一来即使队头数据包被阻塞也将不会影响发送到其他端口的数据包的发送

3、VOQ的是如何实现的?

下文以MAC中的VOQ实现为例,讲解VOQ的实现方案

3.1 VOQ的结构

模块中只有一个数据输入,输出端口,但是有4路数据,由mac_tx_client_in[1:0]区分。

如果采用传统FIFO(先入先出)结构,假设0用户先输入,那么在一段时间内0用户数据没有读出(原因可能为:0用户下游处理模块处理不过来,起反压,一段时间内不能再发数据),就会阻塞后输入的1用户、2用户、3用户数据,导致其他用户数据无法读出。而采用VOQ结构,0用户数据暂停读取并不会影响其他用户数据读取。

 

MAC VOQ包含三部分,数据存储模块DATA_RAM、指针存储模块PTR_fifo、每个client专用的指针存储desc_fifo。为方便说明,假设MAC的client数据为4个,分别为0、1、2、3(即mac中的数据有4路),VOQ输入数据:mac_tx_data_in[1023:0],mac_tx_vld_in,mac_tx_client_in[1:0],来自下游的输入请求voq_read_req,voq_read_client。

3.2 VOQ的内部结构图

VOQ结构如图所示:

假设存储深度为256:4个client号,需要4个desc_fifo(256x8)

 一个数据存储RAM(256x1024),一个指针ptr_fifo(256x8)。数据data_RAM存储的是数据流mac_tx_data_in的数据,指针ptr_fifo存储的是DATA_RAM中未写入数据的地址,desc_fifo存储的是每个client数据在DATA_RAM中的地址。

NOTE:在模块使用之前,即复位释放后,指针ptr_fifo会自动进行初始化操作,将fifo写满,数据为0~255,表示data_ram中的0~255地址都是未写入的。

 

 

 

mac_tx_data_in[1023:0]

input

输入数据

mac_tx_vld_in

input

输入数据有效信号,作为ptr_fifo读使能、data_ram写使能、desc_fifo写使能

mac_tx_client_in[1:0]

input

用户标志号0~3,表示数据是哪路数据,作为选择器控制信号用于区分desc_fifo,

Voq_read_req

input

来自下游的读请求信号,作为desc_fifo的读使能,ptr_ram的写使能,以及data_ram的读使能

Voq_read_client

input

来自下游的读请求信号client

mac_tx_data_out[1023:0]

output

VOQ模块输出数据

mac_tx_client_out[1:0]

output

输出数据client

mac_tx_vld_out

output

输出数据有效信号

3.3 VOQ数据写入流程:

1、输入数据有效信号mac_tx_vld_in作为ptr_fifo读使能信号ren驱动源,读出ptr_fifo数据ptr_rdata

2、将ptr_rdata作为data_ram的写地址waddr,将mac_tx_data_in[1023:0]写入data_ram。

3、根据mactx_client将DATA_RAM写地址waddr(即ptr_rdata)写入相应的desc_fifo。

3.4 VOQ数据输出流程:

1、Voq_read_req为1有效,读取相应的desc_fifo数据desc_rdata。(根据voq_read_client选择desc_fifo。若为0则选择读desc_fifo_0)

2、将desc_rdata作为DATA_RAM的读地址,读取DATA_RAM中的数据作为mactx_tx_data_out。(voq_read_client打拍后赋值给mac_tx_client_out,打拍延时由desc_fifo读延时和RAM_DATA读延时确定)

3、将desc_rdata作为写数据写入ptr_fifo中,表示DATA_RAM中的此地址为空。

NOTE:

Voq_read_req作为desc_fifo的读使能,ptr_ram的写使能,以及data_ram的读使能

mac_tx_vld_in作为ptr_fifo读使能、data_ram写使能、desc_fifo写使能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/803604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pl/sql小技巧

pl/sql中文乱码 select userenv(language) from dual cmd命令行 set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK pl/sql拖到cmd窗口下执行 pl/sql 显示行号pl、sql字体大小调整

结对项目-四则运算

github链接这个作业属于哪个课程 班级的链接这个作业要求在哪里 作业要求的链接这个作业的目标 实现四则运算自动生成程序,结对协作开发姓名 学号柳浩 3122004444洪吉潮PSP表格PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)Planning 计划 20 25Esti…

基于Sentinel自研组件的系统限流、降级、负载保护最佳实践探索

一、Sentinel简介 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: •丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、…

信息学奥赛复赛复习03-CSP-J2019-03-纪念品-背包、01背包、完全背包

PDF文档公众号回复关键字:202409251 2019 CSP-J 题目3 纪念品 [题目描述] 小伟突然获得一种超能力,他知道未来 T天 N 种纪念品每天的价格。某个纪念品的价格是指购买一个该纪念品所需的金币数量,以及卖出一个该纪念品换回的金币数量 每天,小伟可以进行以下两种交易无限次:任…

《DNK210使用指南 -CanMV版 V1.0》第二十六章 摄像头图像捕获实验

第二十六章 摄像头图像捕获实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k…

实时网络的仿真和配置工具RTaW Pegase v4.6版本更新

01概述随着嵌入式系统日益复杂,高效可靠的设计工具变得愈发重要。RTaW公司的仿真工具RTaW-Pegase最新发布的4.6版本,为用户带来了一系列重要更新和功能增强。本文将详细介绍RTaW-Pegase v4.6版本的主要更新内容,涵盖了DDS、SOME/IP、Ethernet、CAN以及SDV等多个关键领域的改…

CTFSHOW pwn03 WrriteUp

本文来自一个初学CTF的小白,如有任何问题请大佬们指教! 题目来源 CTFShow pwn - pwn03 (ret2libc) https://ctf.show/challenges 思路 1.下载题目放到checksec先查一下2.IDA打开题目Shift + F12查看字符串发现没有system和/bin/sh,但是有libc文件。 3.用gdb的cyclic查询一…

如何正确的在项目中接入微信JS-SDK

微信JS-SDK的功能 如果你点进来,那么我相信你应该知道微信的JS-SDK可以用来做什么了。微信的官方文档描述如下。微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系…

kafka的安装与配置

kafka的安装与配置 kafka的安装 在这我才用的是oracle云,系统是Ubuntu,在docker上按照的 安装docker 具体的安装方法请见docker-compose教程 查看docker版本 docker --versionDocker version 27.0.3, build 7d4bcd8创建 Docker Compose 文件 Kafka 依赖 Zookeeper 来管理集群…

面试官:项目中如何实现布隆过滤器?

谈起“布隆过滤器”相信大家都不陌生,它也算日常面试中的常见面试题了。例如,当面试官在问到 Redis 模块的相关问题时,可能会问到缓存穿透(Redis 四大经典问题之一),而缓存穿透的经典解决方案之一,则是“布隆过滤器”。 但是,对于布隆过滤器是什么?以及布隆过滤器的实…

LLM大模型: 生成式模型的数学原理和prompt融入image

1、(1)上文介绍了DDPM生成图片的原理和代码测试结果,训练时给样本图片加上gaussian noise,预测时也是预测gaussian noise;这里为啥要用gaussian distribution?为啥不用其他的分布?高斯分布相对比较简单,只有两个参数:均值和方差,容易控制;为啥一张随机生成的gaussio…

P3311 [SDOI2014] 数数

参考题解做法。 题目思路 数位 dp + AC 自动机好题。 直接往下递归,dfs(u, ver, limit, st) 表示目前在数字 \(n\) 的第 \(u\) 位进行讨论,\(ver\) 表示当前在 AC 自动机上的节点,\(limit\) 是是否步步紧逼 \(n\),只要位数不足 \(n\) 的位数或者有一位小于 \(n\) 的那一位就…