HIL-Sim台架CHS使用手册
本文档主要介绍HIL-Sim台架CHS(Caronsim HIL-Sim)的使用方法和SDK二次开发。台架硬件配置见:https://caronsim.com/hil_sim
CH2板卡

CH2板卡基础用法配置如下:
- SW9拨码配置为0/1/0/1的sd卡启动模式(注意拨码数字"1234"一侧为0,而"ON KE"一侧为1)
- SW10拨码配置为0/1/0/1,配置MAX9295加串器的IIC默认地址为80,以及GMSL2为6Gbs模式
- sd卡用读卡器在PC上格式化为fat32,然后在根目录下放入BOOT.BIN(固件镜像),最后把sd卡插入CH2板卡的sd卡插槽
- 注意风扇正确插入FAN插槽,RST开关拨ON(即靠近FAN插槽一侧)。在服务器关机状态下,把CH2板卡插到PCIe的x16插槽,此时板卡完全由PCIe插槽供电不需要外接电源
- 上图中有三组12路视频编号,这里推荐用“罗森版HFM四腔母头转XX”系列的mini-fakra线材来连接CH2板卡和你的域控,比较常见的情况如下:
CH2板卡进阶使用方法:
SW9全部为ON/ON/ON/ON状态为JTAG模式,OFF/ON/OFF/ON为sd卡启动模式,原理图如下:

SW10为OFF/ON/OFF/ON状态为I2C地址80+6Gbs模式,OFF/ON/ON/OFF状态为I2C地址80+3Gbs模式,其他模式配置见如下原理图:

两个12pin的简牛口引出了GMSL2加串器的frame-sync/frame-trigger接口以及IIC接口,方便获取对应信号,如下图:

刷写固件:把BOOT.BIN放到hil_sim_sdk/tools目录下,运行./flash.sh BOOT.BIN可以刷写CH2板卡固件,刷写完后CH2板卡会自行断电下线(你会听到咔的一声),然后你需要reboot重启服务器。
安装依赖
SDK默认运行环境为ubuntu22.04,如果是其他Linux操作系统,我们可以进行适配工作。
在ubuntu22.04系统中下载SDK后unzip hil_sim_sdk-vx.y.z.zip解压,cd进入hil_sim_sdk目录,用root运行host_install.sh脚本。host_install.sh脚本做了三件事:
- 更换lowlatency的ubuntu内核,并且优化系统性能
- 安装必要的系统依赖和pip依赖
- 安装Nvidia显卡驱动和CH2板卡驱动
- CAN卡驱动(PEAK的pcan驱动和FINTEK的f81601a驱动),如果你没有用这两种CAN卡可直接忽略
安装过程中请按照脚本提示对系统进行重启,最终输出"host_install ok!"代表脚本运行成功。
如果服务器插了CH2板卡,如果ls /dev/xdma*可以看到相关设备则代表CH2板卡驱动安装成功。
如果服务器插了Nvidia显卡,运行nvtop可以看到GPU信息代表显卡驱动安装成功。
如果服务器插了PEAK或者FINTEK的CAN卡,运行ip link show可以看到can0/can1/can2/can3这样的socketcan设备,则代表can卡驱动安装成功。
部署SDK
在config.sh中可以对SDK参数进行配置,每次修改完config.sh之后,必须运行一次./host_deploy.sh重启服务。
可以看到SDK包含了video.service(必选)、can.service(可选)和timesync.service(可选)这三个服务:
- video.service:常驻后台服务,video.service通过共享内存接受来自decode_video_app解码后的raw图像,然后再走PCIe传到CH2板卡中
- can.service:常驻后台服务,负责管理socketcan接口
- timesync.service:常驻后台服务,负责管理域控和服务器的时间同步,自带基于clockdiff和ptp两种时间同步方法
在config.sh中,配置core核心参数部分:
- HOST_USER:操作系统非root普通用户名
- ENABLE_SERVICES:这里必选video,can和timesync服务可以不选
- HIL_TS_SRC:回灌数据的时候可能需要给注入udp数据(比如lidar点云)打上时间戳,这就需要把域控制器和HIL-Sim台架服务器时间进行同步,然后通过hil_api.h的hil_ts_get()接口获取当前HIL_TS_SRC指定的同步时间源
- CLOCK_REALTIME:HIL_TS_SRC就是当前系统时间,即运行date命令输出的这个时间
- clockdiff:需要在config.sh中的timesync.service服务中配置DUT_HOST_SYNC=clockdiff,通过chronyd测量HOST服务器和DUT域控的系统时间差clockdiff,来间接获取DUT的系统时间
- /dev/ptp0:HOST网卡时间,也就是运行
sudo phc_ctl /dev/ptp0 get输出的这个时间。一般用法是基于ptp协议把DUT域控时间同步到HOST网卡上,在config.sh的timesync.serivce中配置DUT_HOST_SYNC=ptp可以自动把域控时间同步到HOST的LAN口网卡上
- REPLAY_OR_SIM: 这里Sim模式为1
- BIND_CPU: 在大负载的情况下,用lscpu.txt配置文件对关键进程绑定到固定CPU核心上,优化性能
在config.sh中,配置carla参数部分:
- MASTER_TICK_US:配置carla的master节点仿真步长,根据经验5ms(200Hz)已经可以满足车辆动力学需求了,更小的值对服务器配置要求更高
- NODE_SLAVES:以json字符串方式配置carla的slave节点,NODE_NAME为slave节点名,SLAVE_TICK_US为slave节点仿真步长(FSYNC代表仿真步长和fsync-trigger步长一致)
在config.sh中,配置video.service参数部分:
- VIDEO_PERIOD:camera每帧时间周期,单位us
- VIDEO_FSYNC_USE:VIDEO_FSYNC_USE=0的时候,不使用域控DUT的fsync-trigger信号,而是每隔VIDEO_PERIOD时间构造一次假的fsync-trigger信号;VIDEO_FSYNC_USE=1的时候,图像会等待域控的frame-sync/frame-trigger信号到达后才注入
- VIDEO_FSYNC_IDX:从域控的哪一路camera获取frame-sync/frame-trigger信号
- 12路视频每两路一组总共分成六组:0到1为一组、2到3为一组、4到5为一组、6到7为一组、8到9为一组、10到11为一组,每组的分辨率和图像格式必须相同
- VIDEO_*_SIZE_H:头嵌入行数+图像本体行数+尾嵌入行数
- VIDEO_*_SIZE_W:图像宽度
- VIDEO_*_NAME:相机名字,方便在decode_video_app针对不同的相机进行不同处理
- VIDEO_*_PATH:回放视频h264/h265文件
在config.sh中,can.service参数部分配置CHR台架自带PEAK和FINTEK的CAN卡(你可以在ENABLE_SERVICES环境变量中删除这个服务):
- CAN_DRIVER:PEAK对应pcan,FINTEK对应f81601a
- CAN_*:配置socketcan名称和是否为canfd
在config.sh中,timesync.service参数部分配置CHR台架自带的clockdiff和ptp的两种同步机制(你可以在ENABLE_SERVICES环境变量中删除这个服务):
- HOST_*:这部分配置是为了让DUT域控能通过HOST的WAN口上外网
- DUT_HOST_SYNC:选择clockdiff会在DUT域控的dut.service服务中启动chronyd服务器端,timesync.service会运行chronyd客户端去测量和DUT域控系统时间的差clockdiff,然后保存到/dev/shm/HOST_clockdiff_DUT共享内存中,从而间接获取DUT系统时间;选择ptp会在DUT域控的dut.service运行ptp4l服务端,HOST主机通过ptp4l把时间到本地网卡HOST_LAN中
- timesync这个服务假设DUT域控是aarch64的linux操作系统,所以不支持QNX系统。修改完config.sh中timesync相关参数后,需要运行./dut_deploy.sh,该脚本会把dut_deploy目录下的dut.service服务部署的DUT域控中,域控开机自启动服务运行dut.sh