vitis 实现一拍完成的方法总结

vitis中常规操作是通过循环获取反复从fifo中读取数据,实现对一个完整数据包的处理,这个的好处是可以做到类似面向对象的作用,比如:一个函数可以处理一个udp包,并把数据包的数据拆解写入fifo,并送往下一个环节。

但是单纯的for循环需要一拍完成相应的解析工作,如果超过一拍会导致整个数据包处理时延变成2N,这种情况一般有以下几种做法:

1 通过优化代码,将处理流程压缩到一拍完成,必要的时候可以将数据处理分成两个过程,第一个过程一个周期完成,剩余的放到后续过程完成。

2 流水打拍,通过流水打拍控制每拍都能启动,做到处理数据的时延是N+M,确定是一旦遇到需要开始需要前一条数据结束的情况,流水打拍就比较困难了

3 利用接收数据间隔,比如:读取一个fifo的数据,可以预判到这个fifo数据是间隔的,那么可以利用间隔时间处理数据,类似写法:

if( !fifo,empty())

/// 接收数据

else

/// 处理数据

4 循环中延迟一次,这种场景适合在循环中偶尔会出现一次两拍(大多数情况一拍)的场景,比如:中间偶尔需要发送两个包,可以循环继续,但是读取数据可以通过变量控制不读取,这个方法的前提是中金计算过程不需要用到i值

5 通过有限状态机控制循环

这种场景需要把for循环的i++动作提取到函数体中,并且放到最后一步(i++以后不能在用到i,否则做不到1拍),然后通过有限的状态机控制执行,比如:

for( int =0;i<100;)

{

if( status == 0)

/// 处理1

else if(status == 1)

///处理2

else if( status == 2)

{

/// 接收数据

i++;

status = 0;

}

}

上述方案的确定是不能在综合报告体现出循环执行的次数

ps:上述方案中,如果能用有限状态机,尽量用有限状态机,因为硬件综合逻辑和软件不一样,对于if else分支,硬件综合逻辑是两个分支并行,并且判断条件是根据if的条件取反。

如果有多个if判断条件比较复杂,并且多个if else分支,综合时有可能会判断if 和else if两个分支可能并行执行!

这种情况下代码中如果有相互依赖,综合会判断一拍无法完成,而且这个问题很难查,所以如果if else判断尽可能逻辑简单,最好用有限状态机来实现

相关推荐
国科安芯2 天前
【AS32系列MCU调试教程】SPI调试的常见问题解析
单片机·嵌入式硬件·性能优化·硬件架构·硬件工程
水龙吟啸3 天前
计算机组成原理与体系结构-实验四 微程序控制器 (Proteus 8.15)
硬件架构·proteus·硬件工程
S,D3 天前
MCU引脚的漏电流、灌电流、拉电流区别是什么
驱动开发·stm32·单片机·嵌入式硬件·mcu·物联网·硬件工程
国科安芯13 天前
基于ASP4644多通道降压技术在电力监测系统中集成应用与发展前景
嵌入式硬件·硬件架构·硬件工程
逼子格14 天前
硬件工程师笔试面试高频考点汇总——(2025版)
单片机·嵌入式硬件·面试·硬件工程·硬件工程师·硬件工程师真题·硬件工程师面试
Svan.15 天前
Portable Watch:基于STM32的便携智能手表
arm开发·驱动开发·stm32·嵌入式硬件·硬件工程·pcb工艺·智能手表
阿群今天学习了吗15 天前
python基础(3)
python·学习·算法·硬件工程
aixingkong92115 天前
需求初步探讨-从OR-AR
服务器·嵌入式硬件·自动驾驶·硬件工程
QQ_77813297416 天前
DFT ATPG中core chain 和wrap chain区别
硬件工程·智能硬件
nikoni2316 天前
Return ratio法计算环路增益
笔记·其他·硬件工程