Chiplet SPI User Guide 详细解读

目录

一. 基本介绍

1.1.整体结构

1.2. 结构细节与功能描述 

二. 输入输出接口 

2.1. IO Ports for SPI Leader

2.2. IO Ports for SPI Follower

2.3. SPI Mode Configuration

2.4. Leader IP和Follower IP功能图

三. SPI Programming

3.1. Leader Register Descriptions

3.2. Write to Follower Register

3.3. Read from Follower Register

3.4. Follower Message Formats

3.5. Follower Configuration Register Description

四. 实例分析

4.1. Auto Write Sequence

4.2. Auto Read Sequence

4.3. Write to Target Sequence

4.4. Read from Target Sequence


一. 基本介绍

1.1.整体结构

SPI广泛的应用于单片机与外围设备的连接,对于这种传统连接的SPI采用了MISO,MOSI,SCLK,SELECTS的信号线,并且支持一主多从的结构模式。那么本文中的Chiplet之间采用SPI通信接口仍然保留了此等特点,只不过文中将master对应为SPI leader,slave对应为SPI follower。同样是采用全双工方式通信,leader和follower同时在miso,mosi两条数据线上传输数据。

1.2. 结构细节与功能描述 

如图2所示,Chiplet A中包含了SPI leader和一个initiator,initiator是整个Chiplet SPI的幕后主使者,它驱动着leader和follower以及target之间的一切行为,后文为有详细案例说明。在结构中只需要明白SPI leader IP 与initiator会在一个chiplet中,这个chiplet一般为FPGA,SOC或者ASIC。initiator与SPI leader之间采用AVMM接口片内通信。 当我们配置好initiator与SPI leader之间的关系之后,chiplet之间进行inter-chip interconnection就需要用到SPI 通信的原理了,这里首先要选定哪一个chiplet的spi follower进行通信,其次对于选定的chiplet也具有对应的结构。这里我们拿Chiplet B来进行说明,ChipletB中首先用于片间通信的IP就是SPI follower IP,其次Chiplet B使用AVMM接口进行片内通信,用于连接SPI follower与target。(这里的target可以是AIB接口,对其进行配置,也可以是application register,图2中chipletB中AVMM0,AVMM1的target都是AIB IP,AVMM2是application register)。initiator may be a NIOS soft IP microconctroller

二. 输入输出接口 

2.1. IO Ports for SPI Leader

 对于SPI leader的接口主要包含两个方面,一个方面是SPI leader与SPI follower之间通信的片间接口,其中就是SPI的基本元素,sclk时钟信号,ss_n[3:0]是follower的片选信号,最多支持4个follower,mosi和miso就是master out slave in和slave out master in, mosi是一位位宽,miso[3:0]是因为每个slave对应一条miso线。AVMM不做过多赘述,自行理解,在chiplet spi系统的讲解中我们只需要直到AVMM起到片内通信作用即可。但是需要值得注意的是SPI leader IP中的AVMM是follower,initiator才是AVMM leader。

2.2. IO Ports for SPI Follower

Table 2是follower的IO细节,首先具有SPI follower的interface与SPI leader进行片间通信,信号线与SPI leader基本一致, Select信号和miso信号都变为1位位宽。AVMM接口有三个,因为需要对应三个target。具体细节自行阅读table 2。

2.3. SPI Mode Configuration

在chiplet SPI系统中,只采用一种SPI mode,即mode 0. CPOL=0, CPHA=0。代表sclk在低电平时无效,在上升沿时采样。如下图所示。

Chiplet SPI IP支持DWORD (32 bit)传输,所以读写的数据传输必须是32bits的倍数。MSB首先被传输:bit 31,最后是bit 0。

2.4. Leader IP和Follower IP功能图

SPI leader和SPI follower都有command and status Register,以及write buffer和read buffer。CSR决定了SPI leader的片选信号以及改系统的启动信号,后文会有详细介绍。SPI leader的CSR 由initiator通过AVMM直接写入,而SPI follower的CSR需要由initiator先写入到SPI leader的write buffer,然后通过mosi发送到follower的write buffer,再register write至SPI follower的CSR。SPI follower的command就可以指导follower与target之间的操作。

The Follower IP decodes the command from the Leader on the mosi signal. The miso
signal from the Follower sends data back to the Leader if directed by the Leader’s
command.

三. SPI Programming

在user guide的第三部分,主要就是具体的系统通信操作以及相关代码分析。首先在进行具体的案例分析前,我们需要再次强调整体部件的功能。在整个系统中,initiator才是真正的核心,它是CHIPLET spi系统读写指令的产生和发出者。SPI Leader则相当于一个傀儡,无条件的执行来自initiator的指令,进行读写操作,这里我认为SPI Leader有点像Bridge的功能作用。

3.1. Leader Register Descriptions

我们之前在结构细节中提到了Leader主要包含了CSR,Write buffer,Read Buffer。下表则给出了Leader中涉及的register的详细说明,我们进行解读。

对于Leader而言,只有Command Register,Write buffer,Read buffer最为有用,其中Command Register是来自initiator的指令将直接存在这里,首先它的31:30bits用于选择SPI Follower。15:2是burst length,用于决定读写DWORDS的大小,DWORDS的大小= burst length - 1.假如burst length =3 ,则代表DWORDS的数量为4。bit 1则是区分读写操作,1代表read transaction,0代表write transaction。(但是这个对于SPI leader的操作来说是没有意义 ,因为SPI为全双工,当信号线拉低时,mosi和miso同时有数据在传输)。bit 0非常重要,用于启动通信,当把trans_valid =1时,则开始传输。并且在一条新的指令执行开始前,我们都需要等待trans_valid = 0,代表idle。

Write buffer是initiator写在write buffer中的数据,通过mosi发出到follower中,一般来说第一个数据将会被follower当作指令进行decoding,后文会通过详细案例介绍。read buffer则是miso从follower的read buffer发到leader read buffer的数据。

3.2. Write to Follower Register

1. 等待trans_valid = 0,即command register bit 0 = 0,从而确保SPI system在此时是idle的。

2. initiator通过AVMM接口将要发送的数据写入到leader的write buffer中。代码如下:

avmm_if_mspi.cfg_write(17'h200, 4'hf, 32'h1010_0000);
avmm_if_mspi.cfg_write(17'h204, 4'hf, 32'h0080_0200);
avmm_if_mspi.cfg_write(17'h208, 4'hf, 32'h0017_0800);
avmm_if_mspi.cfg_write(17'h20c, 4'hf, 32'hdead_beef);
3. 设置command register的组成,设置bits31:30进行follower选择,以及burst length设置,同时拉高trans_valid代表开始传输。
avmm_if_mspi.cfg_write(17'h000, 4'hf, 32'h0000_000d);
4. 等待trans_valid = 0 代表传输结束
//Keep polling SPI leader command register bit 0 until it goes to 0
rdata_reg[0] = 1’b1;
while (rdata_reg[0] !== 1'b0) begin
avmm_if_mspi.cfg_read (17'h000, 4'hf, rdata_reg);
$display("%0t: cmd polling: rdata_reg = %x", $time, rdata_reg);
end
需要注意的是ss_n信号是被leader command控制的,所以这里没有单独使用这个信号。SPI通信是双向的,虽然这里bit 1设置的是0代表读模式,但是miso仍然在发送read buffer的数据。Leader不需要关心此时是在读还是写。这样做的好处是:Firmware can take advantage of that for maximum bandwidth usage. Command Register field rdnwr, bit 1, is used for firmware bookkeeping
only.

3.3. Read from Follower Register

1. 等待trans_valid = 0

2. initiator通过AVMM写入read command至leader 的write buffer,随后发送到follower进行告知,后续follower的command具体指令将会在后文介绍。

// Programm SPI Leader’s write buffer for a Follower read command
avmm_if_mspi.cfg_write(17'h200, 4'hf, 32'h0010_0000);
3. 设置follower的片选信号,以及burst length和bit 1 rdnwr和trans_valid。
avmm_if_mspi.cfg_write(17'h000, 4'hf, 32'h0000_000d);
4. read buffer接收数据,并且等待trans_valid为0
//using a function written for this purpose
leader_polling();
//Read back follower registers from read buffer
//First word is always don’t care
avmm_if_mspi.cfg_read (17'h1000, 4'hf, rdata_reg);
avmm_if_mspi.cfg_read (17'h1004, 4'hf, rdata_reg);
// Do something with rdata_reg
avmm_if_mspi.cfg_read (17'h1008, 4'hf, rdata_reg);
// Do something with rdata_reg
avmm_if_mspi.cfg_read (17'h100c, 4'hf, rdata_reg);
// Do something with rdata_reg

3.4. Follower Message Formats

我们之前说明了Leader的相关操作,比如Leader向Follower写,以及Leader从Follower读。相对于Leader而言,Follower的操作会更难一点,因为Leader相当于一个傀儡,全部由initiator说什么就做什么,不需要自行做过多的判断操作。但是follower则不一样,因为mosi这根线不仅要传数据,还要传让follower执行的指令,所以要对此进行区分的话,就要就一些额外的设定。所以就有了message formats。

对于Leader通过mosi发送到follower的message:

第一个DWORD,DW0代表指令:该指令的组成为:Command CMD[31:28], Burstlen[27:19], Address ADDR[18:0].which has the same format as Command Register0 [20:2]。19个bits,前两位为AVMM接口选择,后17bits为AVMM start address。

DW1-DWn:write data或者donot care。

对于Follower通过miso发送到Leader的message:

DW0: Dummy DW

DW1 - DWn: Read data or don't care, depending on the CMD and Command Register1 auto_rd_lat setting in table.

Table 4和Table 6显示了DW0的前四位 CMD[31:28]对应的功能。其中代表了六种不同的操作模式,后续会在实例中解释。

3.5. Follower Configuration Register Description

对于Follower而言,它有两个command registers,command register0 和 command register 1。Command Register0用于配置follower与target之间的具体操作,选定AVMM接口,配置AVMM burst length。以及rdnwr = 0或者1,用于确定follower与target之间的读写关系。以及同样配置了trans_valid,当这个被拉高,则start,否则finished。Command Register 1专门用来配置auto操作的一些问题,后文将会对auto sequence做详细说明,方便理解。

四. 实例分析

4.1. Auto Write Sequence

1. 首先将DW0通过initiator写入到leader的write buffer里面去,其次再把auto write的4个数据写进write buffer。对于DW0要进行严谨配置,首先是CMD=4'H7代表auto write,其次是burstlen = Dwords -1,这里四个数据的话,burstlen=3.配置AVMM接口,channel ID,AVMM start address。
// Compose the Auto Write command into DW0 of the Leader Write Buffer
// Burstlen=3 (Four DWORDSs to write to target),
// ADDR = 0x31C (avmm target 0, addr 0x31C)
avmm_if_mspi.cfg_write(17'h200, 4'hf, {4'h7, 9'h3, 19'h31c});
// Write the DWORDs to be sent to the target into the Leader Write Buffer
avmm_if_mspi.cfg_write(17'h204, 4'hf, 32'haaaa_bbbb);
avmm_if_mspi.cfg_write(17'h208, 4'hf, 32'hcccc_dddd);
avmm_if_mspi.cfg_write(17'h20c, 4'hf, 32'heeee_ffff);
avmm_if_mspi.cfg_write(17'h210, 4'hf, 32'h5555_6666);
2. 配置leader的command register,指定follower,burstlen,这里四个数据一个DW0,所以一起是五个数据,burstlen=4。然后通过mosi发出。
// Compose the Leader Command Register value
// Follower Select=0, Burst Length=4 (Five DWORDs to send over SPI),
// rdnwr=0 (write), trans_valid=1 (send)
avmm_if_mspi.cfg_write(17'h000, 4'hf, 32'h0000_0011);
3. To complete the Auto Write, the Initiator first polls the Leader Command Register
until the SPI bus is idle. Then, the Initiator polls the Follower Command Register0
until the Follower’s writes to the target are complete.
// by polling Leader Command Register bit 0
master_polling();
// Check that the Follower has finished AVMM writes by
// polling Follower Command Register0 bit 0
follower_polling();

4.2. Auto Read Sequence

auto read就是从Target取到数据一直到leader的write buffer的过程再一个SPI transaction完成。由于AVMM clk和SPI clk是同步的,所以需要通过Follower Command Register1的auto_rd_lat 这个参数设置donot care 的 DWORDS直到read data 有效。

1. 根据AVMM target的类型配置Command Register 1,如果这个target是application register block,the fields auto_chan_num and auto_offset_addr are typically 0.target is an AIB PHY, set auto_chan_num to the number of channels to be written, minus one. If the target is an AIB PHY, set auto_offset_addr to 0x800. The following example shows a 24-channel four burst Auto Read. The Initiator programs the Follower Command Register1 field auto_chan_num to 23 to indicate that 24 channels are to be written.

2. 将DW0给follower的command写入到write buffer。其中包含了burstlen = 3,CMD = 6, addr。

avmm_if_mspi.cfg_write(17'h200, 4'hf, {4'h6, 9'h3, 19'h31c});

3. 配置Leader 的command register,开始读取同时也发送。

avmm_if_mspi.cfg_write(17'h000, 4'hf, {16'h0, 14'h61, 2'h1});

3. master_polling( );

4. 开始接收数据

// Initiator can now read all 4x24 data from the Leader Read Buffer
for (int i=0; i<13; i++) begin
avmm_if_mspi.cfg_read((17'h1000 + i*4), 4'hf, rdata_reg);
// do something with rdata_reg
end

4.3. Write to Target Sequence

 

与auto操作不同的是,正常的write和read需要使用到follower的command register0.我们要通过follower的command register0指导follower与target的操作。所以一共要分为两个环节

第一环节:

1. 等待trans_valid=0

2. initiator写入leader write buffer 32'h 30000000, 代表buffer write

3. 将要发给target的data先写入到leader write buffer。

4. 配置leader command register并将write buffer里面的东西发送到follower的write buffer

5. content 包含(command DWORD和write buffer data)

第二环节:

1. 等待trans_valid = 0

2. 发送到leader write buffer 32‘h 10000000,代表register write,并且写到register 0

3. DW1为要存到follower command register0中的指令,该指令要包含:avmm_burst_len,AVMM接口选择,start addr,rdnwr=0(write),trans_valid。

4. 配置leader command register将这两个words发送过去

5. 等待trans_valid = 0

4.4. Read from Target Sequence

1. 等待 trans_valid = 0

2. 与write to target sequence环节相反,先配置follower的command register 0,写入到leader write buffer中(32'h 10000000)-》register write

3. 写入DW1,DW1为真正的command register0指令,包含avmm_burst_len,avmm选择,start_address = target's AVMM start address, rdnwr = 1(read), trans_valid = 1

4. 设置leader command register发送这两个words到follower

5. 等待trans_valid = 0

6. 将buffer read的指令通过initiator发送到Leader 的 write buffer DW0 32’h 20000000 -》buffer read

7. 设置leader的command register,开始从follower读取data,第一个为dummy word,后面为正常data。所以需要在正常words数量上加1.

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

算法:数值算法

矩阵乘法 定义与性质 矩阵乘法是线性代数中的一个基本运算&#xff0c;它涉及到两个矩阵的点积运算。给定两个矩阵 A&#xff08;mn&#xff09;和 B&#xff08;np&#xff09;&#xff0c;它们的乘积 C&#xff08;mp&#xff09;定义为&#xff1a; 其中&#xff0c; Cij …

大连智点文化传媒有限公司介绍

在辽宁省大连市的文化传媒领域,大连智点文化传媒有限公司(以下简称“智点文化”)以其独特的魅力和专业的服务,逐渐崭露头角。作为一家集广告、文化、营销策划等多功能于一体的综合性文化传媒公司,智点文化不仅拥有深厚的行业底蕴,还不断探索与创新,以适应快速变化的市场需求。 …

在英特尔 Gaudi 2 上加速蛋白质语言模型 ProtST

引言 蛋白质语言模型 (Protein Language Models, PLM) 已成为蛋白质结构与功能预测及设计的有力工具。在 2023 年国际机器学习会议 (ICML) 上&#xff0c;MILA 和英特尔实验室联合发布了ProtST模型&#xff0c;该模型是个可基于文本提示设计蛋白质的多模态模型。此后&#xff0…

AI发展下的伦理挑战:构建未来科技的道德框架

一、引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;我们正处在一个前所未有的科技变革时代。AI不仅在医疗、教育、金融、交通等领域展现出巨大的应用潜力&#xff0c;也在日常生活中扮演着越来越重要的角色。然而&#xff0c;这一技术的迅猛进步也带来…

面试前端实习常问的关于【ES6新特性】的问题

ES6新特性 日常前端代码开发中&#xff0c;有哪些值得用 ES6 去改进的编程优化或者规范? 常用箭头函数来取代有this指向的函数常用 let 取代 var 命令常用数组/对象的结构赋值来命名变量&#xff08;结构更清晰&#xff0c;语义更明确&#xff0c;可读性更好&#xff09;在长字…

《Java初阶数据结构》----6.<优先级队列之PriorityQueue底层:堆>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

ElasticSearch学习篇15_《检索技术核心20讲》进阶篇之TopK检索

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 相关问题&#xff1a; ES全文检索是如何进行相关性打分的&#xff1f;ES中计算相关性得分的时机?如何加速TopK检索&#xff1f;三种思路 精准To…

60个常见的 Linux 指令

1.ssh 登录到计算机主机 ssh -p port usernamehostnameusername&#xff1a; 远程计算机上的用户账户名。 hostname&#xff1a; 远程计算机的 IP 地址或主机名。 -p 选项指定端口号。 2.ls 列出目录内容 ls ls -l # 显示详细列表 ls -a # 显示包括隐藏文件在内的所有内…

Linux系统上安装Redis

百度网盘&#xff1a; 通过网盘分享的文件&#xff1a;redis_linux 链接: https://pan.baidu.com/s/1ZcECygWA15pQWCuiVdjCtg?pwd8888 提取码: 8888 1.把安装包拖拽到/ruanjian/redis/文件夹中&#xff08;自己选择&#xff09; 2.进入压缩包所在文件夹&#xff0c;解压压缩…

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案&#xff0c;使用 React 语法规范来开发多端应用&#xff08;包括小程序、H5、React Native 等&#xff09;。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目&#xff08;本来就有的旧项目&#xff09;的步…

前后端分离的开发模式+YAPI接口文档

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;JavaWeb关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 早期的开发模式&#xff1a;前后端混合开发 在这种模式下开发下&#xff0c;…

WAF+API安全代表厂商|瑞数信息入选IDC报告《生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势》

近日&#xff0c;全球领先的权威资讯机构IDC正式发布《IDC Market Presentation&#xff1a;生成式AI推动下的中国网络安全硬件市场现状及技术发展趋势&#xff0c;2024》报告。报告中IDC 评估了众多厂商的安全硬件产品能力&#xff0c;并给出了产品对应的推荐厂商供最终用户参…

浏览器渲染机制和node事件循环

浏览器渲染机制 Document Object Model (DOM) 当浏览器读取 HTML 代码时&#xff0c;只要遇到 body、div 等 HTML 元素&#xff0c;就会创建一个名为 Node 的 JavaScript 对象。 浏览器从 HTML 文档中创建了 Node 之后&#xff0c;就要把这些节点对象创建成树状结构。 CSS Obje…

如何从2D到3D动画(计算机图形学基础)

引言 计算机图形学是一门将数学、计算机科学和艺术结合起来的学科&#xff0c;它在现代技术中扮演着越来越重要的角色。从游戏设计到虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和元宇宙&#xff0c;计算机图形学的应用无处不在。它不仅为人们提…

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示&#xff0c;点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径&#xff0c;点击箭头所指浏览按钮&#xff0c;会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 在本研究中&#xff0c;我们采用Python编程语言&#xff0c;利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构&#xff0c;我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

JavaScript——变量与运算符、输入输出、判断、循环

文章目录 前言概述使用 js从文件引入 js 代码importjs 的作用变量计算输入格式化输出保留小数向上取整&#xff0c;向下取整条件判断循环总结 前言 为了监督自己的进度&#xff0c;把学习任务一点点都写出来&#xff0c;写多少就算多少&#xff0c;不求完美&#xff0c;只求完…

# JVM 参数大全

JVM 参数大全 文章目录 JVM 参数大全内存参数垃圾收集器配置GC日志配置dump 日志参数配置发生Full GC时生成dump文件在IDEA中配置JVM参数 内存参数 -Xmx3550m&#xff1a;设置JVM最大堆内存为3550M -Xms3550m&#xff1a;设置JVM初始堆内存 为3550M。此值可以设置与-Xmx相同&am…

【Python实战因果推断】57_因果推理概论7

目录 The Bias Equation A Visual Guide to Bias The Bias Equation 既然你现在理解了为何样本平均值可能与它试图估计的平均潜在结果存在差异&#xff0c;我们不妨更详细地探究为什么平均差值通常无法恢复出ATE&#xff08;平均处理效应&#xff09;。 在销售的例子中&…

linux ftp操作记录

一.ftp 创建用户 passwd: user ftpuser does not exist 如果你遇到 passwd: user ftpuser does not exist 的错误&#xff0c;这意味着系统中不存在名为 ftpuser 的用户。你需要首先确认FTP用户是否是系统用户&#xff0c;还是FTP服务器软件&#xff08;如Pure-FTPd&#xff…