高速内部总线HSIB和设备总线DB




前言

“纸上谈兵”已经快一年,这项目有点意思了,其实、有难度的事情才好玩。从年初至今陆续买了20多套各类开发板,我还没一套去上手试玩;只是买回来“摸摸”感受一下,看看相关资料、用“想象力”探视和思考,之后就丢弃一旁“吃灰”了。音响成品倒是试用过不少,那又不用“开发”,只是用
心去“试听”和比较吧。“飞鸡2号和飞鸡1号”合一了,“飞鸡2号”采用现成的模块(全志H6或RK3568方案)直接插在“飞鸡1号12路1600W纯数字直推功放板”上(通过25Mbps的单端SPI接口通信),构成“多媒体娱乐中心”、也叫“飞鸡2号”;先使用linux操作系统、只是增加一个音频协议转换驱动C程序;这样,难度系数大幅降低,将来再通过100Mbps差分SPI口连接到“AOS的飞鸡1号小电脑”、从而取消“全志H6或RK3568方案”模块。
增加一个项目“中级发烧小电脑”、也叫“飞鸡1号”,这将使用AOS简易操作系统和定制开发的多核(64位RISC)芯片,芯片分为8组。主组:最大32个多核单元 + 外围设备 + 组间仲裁器IARB(Intergroup arbiter),7个副组、每个副组: 最大32个多核单元。组间仲裁器IARB嵌入在主组通信管理员Cadm的RALU核,以便配置和管理。
飞鸡1号小电脑供电电源:20V/15A、300W。

⚫算术逻辑单元核RALU(RISC Arithmetic Logical Unit):主频1GHZ。
AISC压缩16位指令集(A instruction set computer)简写汇编暂为28条指令束:非标准X的基本整数指令集I、原子性存储器指令集A、扩充的位操作指令集B、16位压缩指令集C、事务存储器通信操作指令集T,通过操作SVCU核的打包SIMD扩展指令集P、可伸缩向量扩展指令集V、可伸缩向量单精度浮点指令集F、可伸缩向量双精度浮点指令集D、可伸缩向量四精度浮点指令集Q、可伸缩向量十进制浮点指令集L、可伸缩向量整数指令集VI。
有2套(用户和内核)16个通用64位寄存器x0~x15,X0--X9通用寄存器、X10 = 0、X11 = SR状态标志寄存器、X12 = SP、X13 = PC远端程序计数器、X14 = LR连接寄存器、X15专用装配寄存器。不兼容RISC-V指令集。


⚫可伸缩向量运算单元核SVCU(Scalable Vector calculations Unit):主频1GHZ。
256个通道,每个通道16管道、每个管道分为:单精度浮点4条管线(GPU的4D、或2*2D、1D+3D、模式),双精度浮点2条管线,四精度浮点1条管线,16位半精度浮点8条管线,8位整数16条管线...。可同时做16K个单精度浮点运算,算力达到16TFLOPS(每秒万亿次浮点运算),输入输出缓存8MB的SRAM。芯片可以有128个SVCU核,芯片总算力:2PFLOPS。这是理论估算,按现有工艺、估计功耗可以“开飞机”了,呵呵。核心电源0.8V?5nm工艺可以具现?我不知道。

管线支持乘加、卷积等等多级流水运算,AI应用;单时钟周期256*16*16个8位乘法和加法矩阵计算,缓存可以一次支持:32级流水线*256*16*16 = 2M个8位乘法和加法矩阵计算。通常是APU = SVCU + RALU + 外部DDR5.0的结构,RALU支持分支编程、DDR5.0控制器等等;多核单元的内部总线速度为64GB(字节)/S,外部DDR5.0速度51.2GB(字节)/S。

单说算力是不对的,还要看连接DDR5.0内存的速度;如果APU都有单独连接DDR5.0的2通道外部总线(2*32位),每组连接1根DDR5.0内存条,总的DDR5.0速度:8*51.2GB(字节)/S = 409.6GB(字节)/S,共8根2*64GB的DDR5.0内存条1TB。如果多核单元都没有对外通信、只在内部总线运行,多核单元内部256位总线、那芯片最大总线速度:
8组*32多核单元*64GB(字节)/S = 16TB(字节)/S。
多核单元可以是RALU和APU的多个的灵活组合,APU是试图将GPU、FPU、VPU、AI核(TPU、BPU、DPU、NPU、TPU、等等)、统一架构的设想。

⚫高速内部总线HSIB(High-speed internal bus):主频2GHZ
纵横竖3D立体开关网络连接8组最大256个多核单元(RALU核或APU核或它们的组合),最大组内同时点到点多核单元间通信16对、最大组之间同时点到点多核单元间通信4对,每个组内总线等效为最大4096位、最大总线速度2G*512B/S = 1TB(字节)/S;点到点多核单元最大组间通信总线1024位、最大速度为  2G*128 B/S = 256 GB(字节)/S。如果只有组内多核单元间通信时等效为8组*16*256位 = 32K位总线、那芯片最大总线速度:8TB(字节)/S;组之间实际只有4*256位的总线,可以同时4对多核单元在组之间通信。

⚫256位内部设备总线DB(Device bus):主频2GHZ,速度64GB(字节)/S,DDR5.0双通道速度51.2GB(字节)/S。
专门一个多核管理:空间管理员Sadm(APU多核结构、内存空间MMU管理),含外部DDR5.0总线单通道A的IP核。各种设备都视为大小不一的收发兵乓FIFO(First In First Out)缓冲区(256位/32字节一个单元,缓冲区:1--n个单元),设备处理完一个FIFO缓冲区后、转到另一个FIFO缓冲区工作并发出中断,Sadm对相应设备发送片选和初始地址、再读或写处理完的FIFO缓冲区,之后将相应数据读或写到DDR主存。Sadm的一小部分工作量就是:设备与DDR主存的等效DMA传输,其它CPU节点与DDR主存的数据包传输。

这样一来,统一了各种设备的物理层驱动;不同的设备(不管是高速、低速、千奇百怪,还是各类多核单元),都统一视作对设备之FIFO缓冲区以及DDR主内存的设备相应区域之内存操作(多核单元是独立物理内存区,但都对应到相应的虚拟内存空间)!没有DMA传输了,已经被空间管理员Sadm代替;硬件中断也是极大地被弱化,转化到各个多核单元的是“中断消息包”。简单说:DMA和中断都是存在的,但已是系统硬件统一处理了,编写操作系统时、无需过多考虑;万千设备物理层驱动程序归化为一,不同的设备物理层驱动程序、其不同点只是在DDR主存的设备初始地址和长度以及设备配置寄存器的副本(正本自然是初始化时、已写在设备的配置寄存器组内)。将设备看作文件,设备物理层驱动程序需有“设备文件操作接口”;linux、windows、等等操作系统,对不同的设备需编写不同的设备驱动程序,这是它们千万行以上代码量的原因!你现在不会觉得AOS的小于5000行代码量是“吹牛”吧。AOS的物理层驱动程序会有多少代码量?估计就几十行!AOS的设备物理层驱动程序是一个“设备物理层驱动代码类A”、只有一份,不同设备的物理层驱动程序是A的具体对象、只是有不同的“内存”属性;这样,会形成各种设备的“内存”属性表,我们可以用“网页”来对各种设备动态配置,甚至可以显示芯片引脚的动态配置图像,这就是“生态环境”;STM32单片机在这方面就做得比较好,其对程序员的亲和度较高、编程“生态环境”很好。

设备物理层驱动程序之上是各种设备协议层驱动程序。OSI模型是分层方法中的一种通用功能划分方法,OSI模型分为七层:
1、物理层:
主要对物理连接方式,电气特性,机械特性等制定统一标准,传输“位(比特)流”;如网线的接口RJ类型、光纤的接口类型、各种传输介质的传输速率,FIFO缓冲区及配置控制寄存器的初始地址和大小、时钟、中断、模式、等配置与控制。

设备物理层为软硬件实现,设备物理层之上通常是协议层驱动程序的软件实现。连续的位流或连续的帧或连续的数据包就称为数据流Data stream(也可以m帧为一个数据包DPK(Data packet)),有2种相对方向的数据流,数据流输入DSI(Data stream input),数据流输出DSO(Data stream output);物理层往上层走称为数据流输入DSI,反之、称为数据流输出DSO。有单向输入或输出的设备,也有双向通信的设备。从设备输出数据流DSO、自然会有明确的相关上层协议驱动程序操控,问题是从设备进入的数据流输入DSI该走那一条道路?比如小电脑的类似PCIe 5.0X1口连接另一个装置(含有WIFI、BT、千兆以太网MAC口、USB2.0、USB3.0、
SATA3.0硬盘口、等等),如果从WIFI来了一个数据帧(它可能是键盘数据、也可能是鼠标信息、也可能是话筒信号数据)、那么该是给上层的谁负责?又比如SPI口、它可能接收到的数据帧、或许是音频数据包也或许是FLASH数据、也可能是以太网MAC格式数据包、等等,AOS应该如何应对?

小电脑的硬件端口通常都是相对固定的功能,其物理层驱动相对固定的连接到相应上层,由用户做功能配置和切换;需要考虑的是类似PCIe 5.0X1的高速串行通信端口过来的帧,我们需要一个24位的“流标识”符、来表述进入帧所代表的数据流输入DSI(键盘、鼠标、MAC、SATA3.0磁盘数据、USB2.0、USB3.0、音频、视频、视音频、等等)。我们需要尽量简化和清晰表述物理层,PCIe 5.0显然不符合要求;高速串行通信无非是一对差分接收和一对差分发送,和SPI是类似的,只是时钟嵌入了收发信号中;可用的招数、通信就那几招:强来、调幅、调频、调相位。调频时钟不好恢复去除,余下就3种组合。麻烦的是各类信号的帧(或包)长是不一样的、实时性要求不一样,不能用定长的FIFO去规划。是故,FIFO缓冲区设计为也可以用指定地址去读写缓冲区,实时帧会有一个中断位,如果收到这种实时帧、硬件会发出中断,让空间管理员Sadm读往DDR并运行相关驱动。

高速串行通信端口一个帧最少为一个单元256位,帧头必须有24位“流标识”符、24位实际有效字节数(实际只是21位、2MB,最高位乃中断位、其余2高位备用)和16位帧长度(单元数)。
24位“流标识”符:第一个字节、数据流类型,第二个字节、协议规则(压缩标准(低4位)、源接口等等)、第三个字节、数据流通道(最高位1输入,0位输出)。比如:音频数据流ADS_MP3_USB2.0_LIN3,MP3压缩来源USB2.0接口的音频数据流第三输入左通道,文件数据流FDS_N_SATA3.0_文件动态通道号(文件号等信息在协议内表示)。数据流类型通常有:音频流、视频流、视音频混合流、文件流、MAC网络数据流(里面又包含各种数据流)、分离后的二级流、中间数据流、中间混合流、AI流、原始流、等等,具体有待规划。

任一个层驱动程序,我们都可以抽象出一个最多三端口的层驱动模型:连接上层的数据流端口CULDSP(Connect the upper level data stream port),连接下层的数据流端口CLLDSP(Connect the lower level data stream port ),连接文件操作的控制流端口CFOCSP(Connect the file operations control stream port )。没有上层时,就只有CFOCSP和CL

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值