知道外边接的是什么,要从哪个接口去传输命令呢,这个就是在BIOS生成的时候,有个配置选项,来告诉OS系统我外边接的什么。
表 不同电源管理控制器使用的通讯接口和配置方式
涉及S3状态,有个管脚要特别说明一下:GPIO0_A1,这个脚的使用一定要好好看下手册说明。当主机从S3恢复到S0状态时,板上的CPLD控制单位会通过信号引脚 K17(信号名 UART_0_CTS_N/GPIO0_A1)向CPU发送主板当前的是否满足S3→S0状态的S3_OK信号。S3_OK 信号为高电平时候,表示可以正常恢复到S0。S3_OK信号为低时,通知CPU主板出现异常状态(内存掉电等情况),系统将重新启动,而不是从 S3 恢复。如果设计上没有S3的需求,那么这个GPIO0_A1要做拉低处理,不能不管,要不会出错的。
2.1.3 内存
飞腾CPU的内存控制器做的还是比较好的,如果设计没有硬伤,走线没有太差,不管使用内存条还是DDR颗粒,都会得到一个很好的训练参数支撑系统的运行。
首先要说的是,飞腾桌面CPU,FT-2000/4是支持DDR3和DDR4的,到D2000芯片是只支持DDR4的。这些内容在芯片手册中都有说明,这里特别拿出来提醒大家一下。
芯片是有两个DDR控制器的,我们可以称为两个通道。每个控制器有4个片选信号,我们可以叫做4rank。所以,我们一个CPU最大的设计是这样的:2个通道×4rank。像下图一样的设计,就可以插4条双rank的内存条。
图 双通道×4rank的D2000板卡
内存控制器若按照 8bit 划分为一个 slice,一个通道 72bit 可划分为 9 个 slice(第9个,即slice[8]为ECC)。
DQ交换:在进行X8兼容内存的设计时,slice内部的8个DQ可以自由互换。
Slice交换:slice[0:7]可以进行slice之间交换。Slice[8]为ECC用途,不能与其它slice交换。若用户需要使用ECC的内存条,slice[8]必须与DIMM条上的slice [8]进行连接。若确认无需ECC功能,将slice [8]信号浮空即可。
这里还有个特别说明的地方,就是DDR控制器有个MEMRESET,这个是输出到DDR上给DDR做复位的。前面在供电和电源管理章节里提到过,S3状态是需要将待机状态压到内存的,那么待机时就要求DDR不能掉电,当然更不能被复位。因为S3状态下除了DDR,包括CPU在内的其他无用的电都是需要被关闭的,那么CPU这个MEMRESET一定是个无效的状态。所以,如果我们的板卡应用会有S3,也就是睡眠状态的,这个MEMRESET就需要控制一下。
这个就是demo图中的这个电路。可以看到,CPU输出的MEM_RST是过了一个MOS的,这个MOS的控制端是接到了CPLD上,因为是不是从S0跳转到S3状态,CPLD是可以通过PWR_CTR0、PWR_CTR1这两个脚数脉冲来知道的,那么它也就知道是否需要控制MOS将CPU输出的MEM_RST传递给DDR。
图 demo图中S3状态对于MEMRESET的处理
2.1.4 调试串口
调试飞腾,要是不把调试串口引出来,那基本就等死就完了。
UART 接口电平为 1.8V CMOS 电平标准,若使用的外设不兼 容 1.8V CMOS 电平,需进行电平转换;默认UART_1为系统调试串口,用于输出系统打印信息,波特率115200bps。记住,这玩意儿默认就是串口1,不能改。你要非得改,要动的代码千千万,还不是你自己能改的了的,何必动它呢。你就用串口1就行了。
是用TTL还是RS232,根据硬件需求自己设计就好。
2.1.5 QSPI接口
前面提到好几次CPU的BIOS,那么BIOS存放在哪?CPU启动的时候从哪里读呢?
都是从QSPI接口。QSPI 接口兼容 SPI,且作为启动加载片外固件的唯一接口。CPU 启动后,最先通过 QSPI 接口的 QSPI_CSN0 片选的 Flash 芯片加载固件,来执行相关指令。固件正常执行完成,才能在后面引导OS系统启动。
图 QSPI flash接口电路
QSPI Flash有16pin的、8pin的,1.8V的、3.3V的。设计时选取根据要自身的需求。并且最好选取大家常用的,飞腾兼容适配过的型号,同时建议flash最好16MB以上,8MB有的用起来还是小,会有问题。
2.1.6 存储
这里存储是个广义的概念,也就是所有能存放OS的都可以叫做存储,SD卡、NVME、SATA、NOR Flash都可以。他们作为OS存储的要求很简单,只要能放得下OS,能被固件读写就可。
一般咱们PC机都是用SATA硬盘作为存储介质,飞腾CPU上没有sata接口,如果要用sata硬盘做存储,那就需要通过PCIe外扩sata。如果不想外扩,那就用NVME SSD。如果系统比较小,比如一些实时系统Vxworks啥的,那么把系统生成bin文件,放到启动用QSPI Flash剩余的空间也是可以的,当然放到SD卡里也是可以的。要求前面也说过了,只要放的下,固件能看到这个存储,能操作它就可以。
2.2 如何让CPU开始工作?
2.2.1 上电时序
在前面2.1.2供电和电源管理章节讲过,要让CPU从未加电状态到加电后工作状态,就是使CPU从S4/S5状态转到S0状态。这个状态跳转其实就是通过外边的电源管理控制器(CPLD或EC或X100)跑一下CPU的上电时序。
图 CPU上电时序
这里提示一点,手册里给出了上电时序的各个时序之间的延时t值,就是上面图中的t1~t12,那就严格按照手册来做就好了。不要去问不这么做会怎么样。可能你设计的好,不这么做也能用,但是这个可没法保证每次这么做都可以,手册都给参数了,就按手册做不就好了么。
上电时序跑完,CPU就会启动了,它下一步就会去QSPI CS0接口去读数据了,所以你如果不知道自己时序是不是好了,那就可以用示波器去量QSPI CS0是否有读数据的动作,同时测量一下QSPI的时钟,在固件加载前应该是380KHz。也就是CS0是否有拉低的状态。要是有拉低,那就说明CPU在尝试去读外置FLASH了,那么也就说明CPU上电正常了,已经开始工作了。
2.2.2 固件
固件这个名字其实应该不陌生,很多网卡,很多PCIe桥片都要烧EEPROM,那里面的Bin文件我们就叫固件。这里CPU启动用的程序,我们也叫固件,借鉴X86的叫法,那就叫BIOS。只是个名字,不要纠结,在飞腾这里基本都叫固件。
固件这里的情况汇总到下表:
表 飞腾CPU固件情况说明
固件提供方 |
厂家 |
费用 |
固件形式 |
对应OS |
联系方式 |
飞腾 |
飞腾 |
免费 |
Uboot |
实时系统(Vx+国内实时系统) 桌面系统(能用设备树引导的开源linux) |
联系飞腾FAE |
UEFI |
桌面系统(麒麟+开源linux) |
第三方 |
昆仑 |
收费 |
联系厂商 |
联系厂商 |
http://www.kunluntech.com.cn/lxwm |
百敖 |
收费 |
http://www.byosoft.com.cn/rhgm/index.jhtml |
国科银河 |
收费 |
http://hngkyh.com/i |