飞腾X100 LPDDR颗粒线序配置辅助工具

简介: 飞腾X100 LPDDR颗粒线序配置辅助工具

科技背景_副本 公众号_副本.png

正文内容:      

一、

飞腾X100显存使用LPDDR4时,需要工程师在X100的固件中去配置线序交换说明,就类似下面这个:

        正面.png

图1

我们需要输入每个slice中DQ的线序,也需要输入slice之间的交换关系,这个工作量也不小,同时容易出现错误,所以开发了一款辅助小工具,帮助大家快速配置此信息。(工具下载在文末)

       

二、

下面我们先简单的讲述线序配置原则:

我们以X100 demo图为例子,demo中X100的显存是如下图这样接的。

左边是X100端的解法,我们可以看到是DQ一一对应引出的。

右边是显存LPDDR4这边的接法,从DDR颗粒角度来看,以slice0为例,8bit接线并不是一一对应的,是乱序的。

所以,我们就不去关心X100端了,我们只看右边颗粒端的接线。

640.png

图2

我们取出来LPDDR颗粒端slice0的部分接线。我们可以看到,

LPDDR4的DQ0接到了X100的DQ5上,

LPDDR4的DQ1街道了X100的DQ7上,

……


图3

那么我们从DDR颗粒角度来看,我们按照LPDDR DQ0~DQ7的顺序(之所以这里是从DQ0~DQ7来梳理,是因为原理图从上到下是从DQ0~DQ7的,这样符合直观习惯),把上面的接线整理成表格:

     

正面.png

但是因为最终我们是要去配置X100,所以我们的角度就不能以DDR颗粒了,需要从X100的视角来看。所以我们需要把上面的表,从X100的角度,按照DQ7~DQ0的顺序进行整理(之所以这里是从DQ7~DQ0来梳理,是因为X100的固件配置是从DQ7~DQ0来设置的):

640.png


所以我们在固件里针对slice0的配置,需要去按照X100 DQ7~DQ0的顺序,填入对应的LPDDR4的DQ编号。

也就是上表LPDDR4那一行,从左到右去抄一下,也就是16057423。当然配置的时候需要补一个0x,即0x16057423。

正面.png

图4

那么这是人工手动去梳理的方法,也就是人工将表1改为表2后,再去填入配置的方法。还是那句话,因为从图2原理图设计上看,我们X100那边不需要去管,只需要看LPDDR那边,所以直接能从表1就推导出配置才是我们最需要的。

       

三、

好,现在我们来看下这个填入数据的规律,我们抛去0x这个不管,其实我们填入0x16057423中的有效数据就是16057423(注意,这个数没有0x了,我们需要认为他是十进制数,可以念一下,是1千6百零五万,7千4百二十三)。

因为它是十进制,所以我们可以发现:

16057423

=1*10000000 + 6*1000000 + 0*100000 + 5*10000 + 7*1000 + 4*100 + 2*10 + 3*1

=1*10^7 + 6*10^6 + 0*10^5 + 5*10^4 + 7*10^3 + 4*10^2 + 2*10^1 + 3*10^0


640.png

那么我们发现,我们从DDR颗粒角度来看,我们只需要按DQ0~DQ7的顺序知道对应的X100的DQ是多少就可以。之后,用DDR的DQ值*10的X100的DQ次方,之后再累加就好了。

所以就有了这么一个工具,我们把LPDDR4这部分电路的接线填入软件,它就可以算出来需要怎么交换。

正面.png

它的计算方法就如上面所说:

0*10^5 + 1*10^7 + 2*10^1 + 3*10^0 + 4*10^2 + 5*10^4 + 6*10^6 + 7*10^3

=0*10^(5%8) + 1*10^(7%8) + 2*10^(1%8) + 3*10^(0%8) + 4*10^(2%8) + 5*10^(4%8) + 6*10^(6%8) + 7*10^(3%8)

=16057423

前面补0x后=0x16057423

之所以这里都除8取余,是因为slice0是0~7的,slice1可是8~15呢,那计算的时候可不能*10的8次方或者*10的15次方吧。

       

四、

Slice的交换算法也一样:

所以图2硬件正确的配置为:

正面.png

使用软件计算得到的配置为:

640.png

结果一致,说明工具有效。

关键源码:

procedure calc_sw();
var
  zdiv_value : integer; //z前缀代表是8bit组
  mod_value : integer;
  i: Integer;
  sw_byte : integer;
  j: Integer;
  sw_dq : integer;
  sw_dq_str : string;
begin
  sw_byte := 0;
  for i := 0 to 7 do
  begin
    zdiv_value := dq_x8x8[i][0] div 8; //这一组除以8,商的值就是这组的接的X100 slice
    //根据换算关系,就是商是几,就把i这个数字写到商位置
    //那么就是 i x 10^商
    sw_byte := sw_byte + i * round(power(10,zdiv_value)); //use math , power出来是extended,需要round一下
    sw_dq := 0;
    for j := 0 to 7 do
    begin
      mod_value := dq_x8x8[i][j] mod 8;//这一组除以8的余数,余数的值就是这组的接的X100的DQ
      //根据换算关系,就是余数是几,就把j这个数字写到余数位置
      //那么就是 j x 10^余数
      sw_dq := sw_dq + j * round(power(10,mod_value));
    end;
    if sw_dq < 10000000 then //也就是首位为0,比如0x03571462,如果只用int进行数据处理,这个就会显成0x3571462
    begin
      sw_dq_str := '0' + inttostr(sw_dq);
    end
    else
    begin
      sw_dq_str := inttostr(sw_dq);
    end;
   case zdiv_value of
      0 : mainform.edit_slice0.Text := '0x' + sw_dq_str;
      1 : mainform.edit_slice1.Text := '0x' + sw_dq_str;
      2 : mainform.edit_slice2.Text := '0x' + sw_dq_str;
      3 : mainform.edit_slice3.Text := '0x' + sw_dq_str;
      4 : mainform.edit_slice4.Text := '0x' + sw_dq_str;
      5 : mainform.edit_slice5.Text := '0x' + sw_dq_str;
      6 : mainform.edit_slice6.Text := '0x' + sw_dq_str;
      7 : mainform.edit_slice7.Text := '0x' + sw_dq_str;
    end;
  end;
  mainform.edit_byte.Text := '0x' + inttostr(sw_byte);
end;
相关文章
|
2月前
|
传感器 算法 机器人
在实用化人形机器人控制系统中深入应用FPGA的框架设计(基于特斯拉Optimus-Gen2的硬件系统)
针对实用化人形机器人的控制系统,以深入应用FPGA技术为指导思想做了一个框架设计,提供一个具象化的设计实例、参考技术方案,协助各研发团队及相关决策者了解这一技术思路的价值。 进而,笔者希望读者将这个框架设计与《在实用化人形机器人研发流程中深入应用FPGA技术的流程图》结合起来进行分析、思考,希望: 进一步降低将FPGA深入应用于人形机器人在纯粹技术维度上的门槛; 助力更多正在人形机器人领域参与竞争的团队 -- 及时做出实质性决策,及时将更多资源分配到深入应用FPGA技术这一竞争维度。
86 4
在实用化人形机器人控制系统中深入应用FPGA的框架设计(基于特斯拉Optimus-Gen2的硬件系统)
|
3月前
|
存储 监控 Windows
ABB 分布式控制系统 DCS紧凑型产品套件 紧凑型HMI
ABB 分布式控制系统 DCS紧凑型产品套件 紧凑型HMI
ABB 分布式控制系统 DCS紧凑型产品套件 紧凑型HMI
|
4月前
A-B罗克韦尔 6155R-NPXPDC 不带显示屏的紧凑型工业计算机
A-B罗克韦尔 6155R-NPXPDC 不带显示屏的紧凑型工业计算机
|
5月前
[贴装专题] 视觉贴装平台与贴装流程介绍
[贴装专题] 视觉贴装平台与贴装流程介绍
25 0
|
6月前
|
算法 数据可视化 前端开发
第一代光电小工具(二)
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
6月前
|
传感器 数据可视化 算法
第一代光电小工具(一)
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
8月前
|
JSON JavaScript API
MicroPython 玩转硬件系列6:获取天气情况
MicroPython 玩转硬件系列6:获取天气情况
|
12月前
|
存储 芯片 异构计算
电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现
设计一个乐曲演奏电路,能够自动播放编写好的音乐。要求将音乐通过实验箱上的喇叭播放出来,用发光二级管显示出乐曲的节拍。 (附加功能:本设计在题目所要求的功能全部实现的基础之上又添加了许多附加功能,所有的功能将在“工程设计总述”中阐明,特此声明。
163 0
台达B2伺服系统基本原理图,共四种机型
今天以台达B2伺服系统为例,给大家发送四种机型的伺服系统基本原理图,以下图片均可点击放大。
台达B2伺服系统基本原理图,共四种机型
|
固态存储 Unix 异构计算
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程
硬件开发笔记(一):高速电路设计Cadence Aleegro软件介绍和安装过程