The concept and application of SkyEye
SkyEye, the full name of Tianmu all-digital real-time simulation software in Chinese, is a hardware behavior-level simulation platform based on visual modeling. It supports users to simulate and model hardware at the behavior level by dragging and dropping.
SkyEye currently supports mainstream embedded hardware platforms, can run mainstream operating systems, and can also adapt to the domestic self-developed operating system Tianmai. By using LLVM-based dynamic binary translation technology, the virtual processor can run at a speed of more than 2000 MIPS on a typical desktop computer.
▲Figure-1: Using virtual prototypes to reduce product cycle and cost
▲Figure-2: Screenshots of 4 PowerPCs running 4 Tianmai operating systems
Advantages of SkyEye
SkyEye can be integrated with third-party languages or models
At present, SkyEye and SystemC have been integrated for timing simulation, and SkyEye and MATLAB or Simulink have been integrated for multi-domain co-simulation.
▲Figure-3: MATLAB and SkyEye connection diagram
Hardware modeling based on visual graphics
Hardware modeling based on visual graphics effectively reduces the communication cost between hardware engineers and software engineers. Software engineers do not depend on hardware engineers, but can make changes to the hardware configuration as needed. Through this visual graphics hardware modeling method, software personnel can quickly build a hardware model, and run and debug the same binary file as the real hardware on the hardware model, which can greatly shorten the product development cycle and improve the efficiency of software debugging.
Containerized simulation platform
The traditional model with virtual machines as the smallest resource scheduling unit has a series of problems such as low resource utilization and complex configuration. In order to adapt to the continuous development of cloud computing services, SkyEye supports Docker containerized deployment, encapsulating the correctly configured SkyEye environment into Docker, and users can directly load Docker to run the simulation environment. The Docker container can be opened and closed at any time, which is very suitable for dynamic expansion and shrinkage, making SkyEye flexibly deployed on the cloud platform. At the same time, through multiple containers, one machine can run multiple services, deploy multiple SkyEye Docker to simulate multiple processor architecture models. SkyEye Docker not only supports terminal mode output, but also supports Telnet mode, which can access the output data of the serial port through port mapping.
▲Figure-5: SkyEye Docker deployment principle
FPGA co-simulation
SkyEye realizes the co-simulation with virtual FPGA, which can support the verification method of UVM. The virtual FPGA is connected to SkyEye through the co-simulation bus, and users can independently control the simulation running speed and improve the test efficiency of larger-scale embedded systems. SkyEye itself is a multi-architecture functional level simulation platform, and has rich debugging functions, which can debug multi-core embedded systems.
▲Figure-5: SkyEye and virtual FPGA co-simulation
SkyEye Application Case
SkyEye missile simulation case
The simulation of the whole system environment is controlled by the Core i7 management combination to control a series of operational processes such as powering up and launching of the missile. The entire system environment includes the management combination Core i7 application, launch control system application, bomb-on-machine system application and fire control simulator under Windows.
▲Figure-7: SkyEye missile simulation case
SkyEye satellite simulation case
▲Figure-8: SkyEye satellite simulation case
SkyEye payload software simulation case
SkyEye realizes the full digital software simulation of the space station load software with embedded processors such as AT697 and Loongson, enabling the code to run virtual on the software simulation platform, and supporting test tasks such as code quality analysis.
▲Figure-9: SkyEye payload software simulation case
SkyEye large-scale avionics system simulation case
SkyEye provides an environment for building multi-machine multi-functional target systems for integrated avionics systems (ICP). It can be deployed in a distributed manner, and multiple airborne electronic sub-systems can be cross-linked through multiple transmission data buses to achieve information Measurement, acquisition, transmission, processing, monitoring and display functions, and complete tasks such as flight control, engine control, navigation, and performance management.
▲Figure-10: SkyEye large-scale avionics system simulation case
SkyEye supports multiple processor models
Instruction set architecture | Processor core | SOC chip | Compiler Environment | Supported OS |
ARM | ARM9 | S3C2410、AT91RM9200、OMAPL138、SOPC国威 | arm-gcc、 RVDS | Linux、VxWorks6.9 |
ARM11 | S3C6410 | arm-gcc | Linux | |
CORTEX-M | STM32、STM32F0 | arm-gcc | / | |
CORTEX-R | RM48L952 | arm-gcc | / | |
CORTEX-A | AM335x、IMX6Q | arm-gcc | / | |
飞腾FTC662 | FT-2000A | LambdaAE、 | VxWorks6.9、ACoreOS天脉 | |
workbench | ||||
DSP | C28x | C2812、F28335 | CCS | / |
C54x | C5416 | CCS | / | |
C55x | C5510 | CCS | / | |
C64x | C6416、C6455、C6474 | CCS | / | |
C66x | C6678 | CCS | Linux | |
C67x | C6701、6713、C6748 | CCS | / | |
POWERPC | MPC603E | MPC8245 | workbench | VxWorks6.9 |
E200Z6 | MPC5554 | |||
E300 | MPC8378、MPC5121 | |||
E500 | MPC8560、P1010、P2020 | |||
E600 | MPC755、MPC8641D | |||
E5500 | T1040 | |||
E6500 | T2080、T4240 | |||
SPARC | SPARC V7 | TSC695F | sparc-gcc | / |
SPARC V8 | LEON2、BM3803、 | Tornado2.2 | VxWorks6.8、RT-Thread | |
AT697F、BM3823 | ||||
X86 | ATOM | N270 | workbench | VxWorks6.8 |
PENTIUM | P2、P3、P4 | |||
CORE | I3、I5、I7 | |||
MIPS | GS232 | Loongson 1E | Loongson IDE | Linux、VxWorks6.9 |
LS132R | Loongson 1J | Loongson IDE | / |
List of peripherals supported by SkyEye
Peripheral type (on-chip) | The development board to which the timer belongs | |||
Timer | am3359_timer | c541x_timer | c64x_timer | c6748_timer |
at91rm9200_timer | c5510_timer | c6678_timer | leon2_timer | |
c28_timer | c6474_timer | c6713_timer | omapl138_timer | |
s3c2410x_timer | s3c6410_timer | stm32f0x_timer | ||
UART | 16550_uart | c2812_uart | leon2_uart | mpc8245_uart |
am3359_uart | c5510_uart | ls3a_uart | s3c2410x_uart | |
at91rm9200_uart | c6678_uart | mpc5121_uart | s3c6410_uart | |
tsc695f_uart | imx6_uart | |||
ctrl | am3359_ctrl | c6678_ctrl | omapl138_emac_ctrl | s3c6410_sysctrl |
at91rm9200_sysctrl | f28335_ctrl | s3c2410x_sysctrl | ||
emif | c6713_emif | omapl138_emif | ||
gpio | am3359_gpio | c6713_gpio | omapl138_gpio | s3c6410_gpio |
at91rm9200_gpio | f28335_gpio | s3c2410x_gpio | ||
flash | c6713_flash | f28335_flash | ||
iic | am335x_iic | c6713_iic | f28335_iic | mpc8378_iic |
omapl138_iic | sopa_i2c | |||
pll | c64x_pll | c6713_pll | mpc8641_pll | omapl138_pll |
intc | am335x_intc | c6713_intc | c674x_aintc | omapl138_intc |
lcd | omapl138_lcd | |||
pic | mpc5121_ipic | mpc8245_pic | mpc8378_pic | mpc8641d_pic |
p1010_pic | t2080_pic | |||
pie | f28335_pie | |||
spi | am335x_spi | f28335_spi | omapl138_spi | s3c6410_spi |
other | t2080_bman | imx6q_analog | c6713_semaphore | c6748_sata |
t2080_fman | at91rm9200_vic | c6748_mcBsp | c6748_upp | |
t2080_qman | c2812_xintf | c6748_ecap | c674x_ehrpwm | |
am335x_prcm | c6713_L2cache | c6748_nand | f28335_adc | |
am335x_rtc | c6713_edma | c6748_rtc | f28335_xintf | |
f28335_can | f28335_sci | leon2_irq | mpc8245_pci | |
f28335_ecap | f28335_xinterrupt | mpc5121_sfifoc | mpc8245_ddr | |
f28335_epwm | f28335_mcbsp | mpc5121_dma | mpc8378_pit | |
mpc8560_dpram | omapl138_emac | omapl138_syscfg | stm32f0x_usart | |
mpc8641_rapidio | omapl138_mcasp | omapl138_usbhost | stm32f0x_rcc | |
omapl138_edmacc | omapl138_psc | omapl138_usbotg | s3c2410x_vic | |
s3c6410_camif | s3c6410_rtc | s3c6410_usbhost | s3c6410_vic | |
s3c6410_mfc | t2080_dcfg |
Peripheral type (custom/off-chip) | The development board to which the timer belongs | |||
Timer | c645x_timer | they_timer | rm48x_timer | t104x_timer |
c687_timer | mpc8378_timer | sopc_timer | ||
UART | c687uart | htey_uart | p1010_duart | sopc_uart |
ft2000a_uart | loongson_uart | |||
ctrl | bm3803_sysctrl | c2812_sysctrl | c5510_sysctrl | sopc_ictl |
sparc_fight_ctrl | sparc_sysctrl | |||
emif | c2812_emif | c6678_emif | rm48x_emif | |
gpio | c5510_gpio | c6748_gpio | sopc_gpio | x86_gpio |
c64x_gpio | ft2000_gpio | |||
flash | amd_flash | am29lv160b_flash | s29gl01gs_flash | loongson_flash |
at697f_flash | s29a016d_flash | |||
iic | at607f_iic | rm48x_iic | ft2000_iic | xdht_iic |
pll | c6678_pll | |||
intc | am3359_intc | c6678_intc | nm3823_intc | xdht_intc |
lcd | s3c6410_lcd | uc1608_lcd | ||
pie | c2812_pie | |||
spi | at697f_spi | ft2000_spi | rm48x_spi | m25p128_spi |
c6678_spi | loongson_spi | sopc_spi | xdht_spi | |
other | ad7705 | c687_cldl | loongson_collect | rm48x_sys |
rs485_hdlc | c687_epic | loongson_config | s3c6410_keypad | |
am35x_hecc | c6k_lvds | loongson_hpet | s3c6410_sdhci | |
arinc_bu67118 | can_adv | loongson_ipmb | sopc_a429 | |
at697f_1553_bc | can_bridge | loongson_pwm | sopc_boot | |
at697f_1553b_bc_ram | f28335_can_sja1000 | loongson_sec | sopc_dmac | |
at697f_1553b_rt | ft2000a_cru | mpc8641d_etsec | sopc_fpga | |
bu_61580 | ft2000a_dmac | mpc8378_usb | sopc_fpu | |
bu_61580_ram | ft2000a_gic | p2020_l2_cache | sopc_wdt | |
c2812_xinterrupt | ft2000a_gmac | p2020_ecm | usb_storage | |
c5510_mcbsp | ft2000a_lpc | p2020_elbc | w5100_end | |
c618_sib_bus | ft2000a_mcu | p2020_guts | x86_ad | |
c6678_iic | ft2000a_pcie | p2020_pic | x86_bu61580 | |
c6678_cic | ft2000a_wdg | rm48x_adc | x86_bu_61580_ram | |
c6678_ddr2 | htey_gps | rm48x_esm | x86_rs422 | |
c6678_dsc | htey_client | rm48x_gio | x86_sja1000 | |
c6678_edma | htey_cmd_file | rm48x_io | xdht_can | |
c6678_msmc | htey_hdlc | rm48x_pbist | zn122_atm | |
c6678_mt19f1g | leon2_io | rm48x_pcr | ||
c6678_n25q128 | loongson_1553b_rt | rm48x_pmm | ||
c6678_srio | loongson_adc | rm48x_sci |
Connector (bus device between multiple boards) | ||||
Lvds_bus | ad_linker | can_linker | i2c_bus | spi_bus |
Rs232_bus | arinc_429_bus | dmc_linker | io_linker | std1553b_linker |
Rs422_bus | atm_linker | gpio_gate | rs422_bridge | tsi578_linker |
Rs485_bus | bu61580_bridge | gpio_linker | rs422_linker | ttp_bus |
Embedded software testing tools
Target code coverage test tool
This product is a tool for object code testing based on simulation technology. Run the user's executable program on the built virtual target system to generate execution results, calculate code coverage, display statement coverage, branch coverage, function coverage and other information (support export coverage reports in HTML and Excel) . This tool supports the related requirements of DO-178B's A-level software target code test coverage, and also supports target code coverage tests of embedded software on various platforms, such as ARM, PowerPC, DSP, MIPS, SPARC, etc.
▲Figure-11: Target code coverage test tool
Simulation-based automatic fault injection tool
This product is an automated fault injection tool based on symbolic execution technology and simulation platform technology. Because it is based on simulation technology, the tool can flexibly inject any faults into any hardware; at the same time, it can also symbolize hardware based on symbolic execution technology, and accurately inject faults that can affect system behavior. The advantage of this tool is that it can avoid repeated injections and missed injections in traditional fault injection.
▲Figure-12: Interface of automatic fault injection tool based on simulation