增强芯片稳定性之——模块高速安全互通接口(HSI)
企业级SSD不仅要求更高性能,而且对于稳定性有着苛刻的要求;CQ9作为专业的企业级SSD公司,从芯片设计到产品开发都具有完整的质量保证体系。
01 基于模块间高速安全通信接口介绍
今天介绍一种基于模块间高速安全通信接口,以增强芯片设计的稳定性;为了提高Timing和吞吐量,一般采用接收端放置FIFO(同步或异步);通过FIFO的满状态通知发送端是否这次传输被接收端接收;这样就要求接收端发送的FIFO满状态必须被接收端正确采样,在Timing收敛时就要求单个时钟周期内满足 setup/hold timing 要求,否则发送端发送的数据就有可能丢失;从发送端观察无疑形成了一个 loop。
CQ9 自研主控芯片DP600
对于一个独立模块内部这种loop情况影响可能并不严重,但是对于较大模块,在后端物理实现时往往需要单独做 harden flow(固化流程);在harden flow过程中后端工程师虽然可以尽力将模块接口信号 timing margin 放大,但是两个独立harden 模块之间的timing 由于placement and route 的不确定性,有可能导致发送模块和接收模块间的timing 恶化,而无法满足单时钟周期Timing要求。这样后端工程师需要反复调整发送和接收模块信号位置,模块位置,以及Harden形状;影响芯片后端设计进度,更严重的是无法满足芯片 Timing要求。
另外,这种传统数据传输时往往采用数据加奇偶校验的方式进行保护,如果需要提高保护强度,势必需要大幅增加数据奇偶校验位宽,从而导致数据位宽进一步增大,影响后端布局布线;且这种数据奇偶校验方式本身保护强度较弱。
综上所述,传统模块间高速通信方式对于一些大的项目模块缺点有以下几点:
1. Timing 受限于接收模块状态传递延迟大小,如果无法满足单个时钟周期Timing要求,只能降低工作频率。
2. 对于后端设计约束太多,使后端设计在独立模块 harden和TOP PnR时需要反复尝试。
3. 对于一些安全和稳定性要求非常高的芯片,传统传输方式无法达到。
02 CQ9芯片设计方案
Dapustor在芯片设计中采用接收端传递FIFO指针方式,指针以格雷码方式传递给发送端,发送端在发送数据之前不需要单个时钟周期判断接收端是否接收成功,只需要根据自己发送数据量和接收端当前的接收量来判断是否可以继续发送数据到接收端。采用格雷码传输接收端状态方式,一方面是可以轻松实现接收和发送异步,另一个方面是即使在同步时钟状态下,格雷码指针仍然可以当作异步来处理,后端设置最大延迟方式。这样就解决了接收端到发送端状态传递单时钟周期要求的问题。即使FIFO指针被延迟多个时钟周期,只要接收端FIFO深度设置合适,仍然不会影响通信性能。
对于安全和稳定性性方面,本设计采用将数据封包方式传递,一个完整的数据传输分为包头,数据部分和校验部分;其中包头采用ECC保护方式,数据部分采用CRC保护方式;并在包头中加入了防止报丢失和路由错误检查。
如下图模块间互联结构:
上图中支持发送模块A和接收模块B 异步时钟处理,接收模块B FIFO采用特殊异步FIFO方式,FIFO的写空间判断放入发送模块A中,发送模块A根据本地写指针状态和和接收模块B传输的状态来判断数据是否可以发送,接收模块B传输当前读指针格雷码[Rcv Resp(Rptr-Gray)]到发送模块A端;发送数据及信号不需要每个时钟周期采样模块B的读指针状态,从而实现真正的单向通信。
当后端设计遇到模块A和模块B之间Timing Violation时,如果从模块A到模块B路径有Timing Violation时,后端工具可以通过插入pipeline registers 进行优化时序,插入pipeline registers不会对性能有任何影响;当模块B到模块A路径有 timing violation 时,可以在SDC(Synopsys Design Constraints)中通过格雷码传输特性放大 Max Delay 约束,对性能也不会产生任何影响。
图2:后端PnR Timing Closure方案
下图显示了数据包传输格式,包头中的SID/DID分别表示了数据源头ID和目的ID,避免包在路由过程中产生发送接收错误,SEQ对每个数据包进行连续编码方式,当数据包发生丢失时会导致接收端SEQ不连续,从而判断传输过程中发生错误;CMD和Payload length分别标记了用户发送命令和当前数据包数据长度;Parity Check 采用CRC对数据payload 部分进行保护,在接收端做CRC校验。
图3:数据传输格式
对于模块B接收端采用多重检查校验方式,来判断数据是否正确, 如下图Flow:
图4:数据接收Flow
03 总结
如上所述,在接收端通过Rptr-Gray传递到发送端可以有效解耦发送和接收端对时序的要求,提高了发送接收效率,并且灵活的后端实现使芯片能更加容易满足设计性能要求。同时通过对数据进行简单的封包处理,可以有效提高数据传输过程中的安全稳定性。