时间:2024-05-04
刘旸 丁涛杰 汤明宏 刘志利
(电子科技集团有限公司第五十八研究所 江苏省无锡市 214000)
由美国加州大学伯克利分校(UCB)设计并公布的RISC-V ISA是一种基于精简指令集计算原理的指令集架构[1,2]。相比当前发展相对成熟的商业架构,RISC-V 指令集架构凭借精简、自由、开源可控等优势[3],其研究与开发受到了越来越多的关注,对IP的前端验证提出了新的要求。如果采用软件系统仿真的方式,成本较低、易于上手[4],但与硬件的结合不够紧密;已有的商业开发平台受限于FPGA时序性能又不能对IP进行充分验证[5]。本文以高性能FPGA为硬件核心,结合RISC-V软件工具链,设计了一套完整的RISC-V处理器IP前端功能验证平台,并在项目中得到了良好的应用。
本验证系统需要实现对RISC-V处理器IP的前端功能进行验证,即通过FPGA来实现RISC-V处理器的RTL行为,并通过与上位机、板上外设芯片的交互,验证RISC-V处理器IP的功能是否正确。验证系统主要由上位机、JTAG调试、FPGA验证板和直流电源组成。其中,上位机通过UART串口与验证板进行交互,同时验证板上的FPGA仿真RISC-V处理器,实现对处理器内核的自测试,并通过与外设芯片的交互验证IP的相关功能,并将交互结果上报上位机显示。验证系统示意图如图1所示。
系统硬件的核心是FPGA验证板,该验证板主要由FPGA、SPI Flash、CFI Flash、SRAM、电源IC等组成。
当FPGA从配置Flash中加载、运行RISC-V IP综合产生的MCS文件后,FPGA相当于RISC-V处理器,此时可以通过GPIO、UART、SPI以及外部存储总线等部件访问Flash、片外SRAM等外设。在综合考虑性能、成本、引脚资源等方面后,选择XC7K325T-FFG900I作为本验证板的FPGA芯片。该FPGA芯片引脚丰富,可实现RISC-V IP所有引脚的引出与功能验证;时序性能较好,满足RISC-V IP在设计主频下的各项功能验证。
外设芯片中的SPI Flash和CFI Flash均为NorFlash(支持XIP功能),同时可用来存储系统运行中需要保存的数据。SRAM可作为指令RAM和数据RAM,作为片内SRAM的替换。两组晶振分别为RISC-V内核时钟和RTC时钟。在本验证板上可通过FPGA中的PLL IP模块对系统晶振进行分频,便于进行主频的摸顶测试。
验证板电源采用DC/DC模块,将直流电源提供的5V电压转换为各个芯片需要的1.0V、1.2V、1.8V、3.3V。其中为满足FPGA上电时序要求,1.0V最先上电、1.2V其次、1.8V和3.3V最后上电。系统硬件框图如图2所示。
验证板通过USB转TTL UART芯片引出一路串口与上位机通信,另两路自回环进行功能测试;GPIO全部通过测试点引出,便于进行相关功能的测试;外部控制接口用来接收外部的控制信号:比如复位等。
图1:系统示意图
图2:系统硬件框图
图3:验证板软件流程
图4:上位机显示的测试结果
本验证平台软件由上位机显控软件和下位机验证板软件组成:上位机显控软件主要用来显示、记录验证板的测试结果;也可以通过下发命令到功能板选择特定的测试;下位机验证板软件运行在以XC7K325T为实体的RISC-V处理器IP上,实现RISC-V处理器IP各个模块的功能验证,并接受、上报相关信息到上位机。
上位机软件通过串口获取验证板上报的测试数据,解析之后显示在软件界面上。上位机软件主要有以下功能:
串口收发:默认串口工作参数:波特率38400bps、无奇偶校验、八位数据位、一位停止位;按照规定的通信协议通过串口与验证板进行数据交互;与RISC-V IP进行心跳检测:如果超时无串口数据上报,则提供告警信息;解析从串口接收来的测试信息并分发给界面显示模块和故障记录模块进行处理。
界面显示:将从串口接收到的测试信息帧,并按照对应的协议解析并提供可视化的图形显示:比如测试通过或不通过时对应项显示“正常”或“异常”并记录错误次数。
验证板软件主要实现对RISC-V IP各个功能的测试,主要通过对CU/ALU、内核寄存器、GPIO、UART、SPI以及外部总线控制器与外设芯片进行交互,验证RISC-V IP的功能是否满足设计要求。主要流程如图3所示。
验证板与上位机之间的串口通信采用SLIP协议进行封装,如表1所示。
表1:上位机与验证板的通信协议
典型数据帧有验证板上报的测试结果数据包、互发的心跳检测数据包、上位机下发的指定测试帧、由于串口传输造成的数据帧不完整或长度不符合协议要求等造成的验证板异常数据包。
以SPI启动为例,首先通过JTAG将下位机程序烧写到SPI Flash中,然后将Boot1/0通过跳线帽分别置高和接地,最后上电启动测试程序。软件流程如下:
(1)外设功能验证,包括定时器、RTC、UART等,只要发生任意一个外设的功能异常,上报异常代码;
(2)CU/ALU测试:运行矩阵、排序、CRC等涉及到加减乘除和逻辑运算的算法,保证CU/ALU部件和CPU指令全覆盖,当输出结果与预期值不一致时,即认为CU/ALU部件异常;
(3)外部总线测试:对挂接的SPI Flash 、CFI Flash和SRAM,进行全地址空间的写操作,采用标准测试pattern:0x00、0xFF、0xAA、0x55,然后回读数据并与初始写入的数据对比;
(4)内核寄存器检测:对内核寄存器中保持不变的寄存器进行检测,默认值变化时即认为发生异常。
相关测试结果可以通过上报上位机软件来进行显示,如图4所示。
对于某些模块的功能测试,比如GPIO输出和中断,需要配合外部激励或设备进行:上位机设置GPIO输出高、低电平时,可以利用示波器对待测GPIO的输出直接进行测量;测试GPIO中断时可以利用信号源或者手动跳线的方式分别测试GPIO的电平中断、正负边沿中断等;对于复位功能,通过复位按键进行测试:通过串口输出的打印可判断RISC-V IP是否复位成功。
本文设计、实现了基于FPGA和上位机软件的RISC-V IP验证平台,可以在测试过程中对RISC-V IP进行全面的功能验证,并准确地显示测试数据,方便评估RISC-V IP是否符合设计要求。在项目中的使用结果表明,该系统满足了对RISC-V IP进行功能验证的要求。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!