Host1x 为orin/thor中的硬件模块,为各子系统(isp/codec/gpu/pva/ofa/cpu等) 提供编程与控制接口。cmd既可从内存中的push-buffer提供,也可由CPU直接提供,随后通过host1x通道传输至主机控制器后端的客户端。这些通道还通过硬件同步点信号(Syncpts)实现了软件与独立模块之间,以及各模块之间的同步机制,当Syncpts 到达时,以中断的方式通知ACPU,完成数据(camera picture、模型推理数据、vi、isp等)在各子系统间的流转,从而完成相关功能。

有如下功能
Sync Points 原理
Host1x使用同步点 (Sync Points) 的硬件机制,利用硬件计数器和中断实现以下功能:
同步点是一种用于在软件与Host1x客户端之间,以及Host1x客户端彼此之间实现同步的机制。该机制通过32位计数器实现,每当特定的预设条件(或事件)发生时,计数器值递增1。当计数器达到其最大值时,下一次递增操作将使其回绕 (Wraps) 归零。
利用同步点进行同步通过以下方式实现:
所有主机控制器客户端(例如,视频输入模块 VI)均实现以下递增同步点的方法,
Incr_Syncpt<条件><索引>
主机控制器客户端接收 Incr_Syncpt 方法指令,并为每个条件存储对应的索引值。每当指定的"条件 (Condition)"事件发生时,客户端将该索引值返回给主机控制器。
同步点计数器递增有两种基本方式:
syncpt_cpu_incr 寄存器写入一个索引值同步点逻辑(Syncpt Logic)中的寄存器(包括同步点计数器寄存器 (Syncpt Registers) 和阈值寄存器 (Threshold Registers))均采用 RAM (随机存取存储器) 实现,以减小芯片面积 (Reduce Area)。 同步点寄存器可被多个客户端 (Clients) 进行读写访问。
具有写访问权限的客户端包括:
具有读访问权限的客户端包括:

Single Channel Example

Channel Concurrency Example
基于上述示例,由于不存在通道间相互阻塞的情况,两个通道可实现完全并发工作。在为通道分配客户端时需谨慎规划:通道并行性(Channel Concurrency)与通道吞吐量(Channel Throughput)对系统性能至关重要
系统共设704个同步点(Syncpts)。其运作机制类似于信号量:主机控制器向客户端下发同步点方法指令时,会指定同步点计数器索引并约定执行状态条件。通过主控器的"等待"方法,可配置任意通道在特定同步点索引值处进入等待状态。
当客户端接收到同步点方法指令后,将根据预设条件向主机控制器返回对应的同步点索引。主机控制器据此递增该特定同步点计数器。以下简单示例演示同步点与等待机制如何实现同步,其中箭头表示通道间的依赖关系(即某通道等待另一通道触发同步点递增)。

Channel Synchronization Example
软件架构
Host program and set syncpoint

Check Syncpoints
