Esta dissertação propõe-se a desenvolver um sistema com uma arquitetura heterogénea em que será aplicado o conceito de lockstep a dois processadores com arquiteturas diferentes, um hard-core e um soft-core. O objetivo é correr, quando o sistema estiver todo implementado, uma aplicação num cenário de segurança (safety) usando mecanismo de lockstep. O desenho de todo o sistema terá foco em segurança (safety), onde serão seguidos alguns standards para esse efeito como, por exemplo, o Motor Industry Software Reliability Association (MISRA). Nesta dissertação, o lockstep aplicar-se-á a uma arquitetura heterogénea composta por processadores diferentes, um CortexTM-A9 e um Rocket, de arquiteturas diferentes Arm e RISC-V. Para se lockstep ser implementado, definira-se-á pontos de comparação iguais em ambos os processadores (checkpoints), onde se sabe que ambos os códigos obrigatoriamente passarão. Estes checkpoints podem ser definidos, por exemplo, no final de todas as funções. Sempre que uma função terminar, a saída tem de ser igual em ambos os processadores. É aí que o mecanismo de verificação (checker) entra em ação, fazendo a comparação das saídas dos processadores e verificando se ocorreu algum erro ou não. Caso um erro ocorra, o sistema volta ao último checkpoint ou é feito reset ao sistema. Este sistema será projetado para ser implementado numa plataforma Xilinx Zynq que possui um processador dual-core CortexTM-A9.
O objetivo principal da dissertação, é colocar uma aplicação a correr, num cenário de segurança (safety), sobre um sistema que possuí um mecanismo de tolerância a falhas, o lockstep. Para alcançar esse objetivo maior, outros 3 grandes objetivos devem ser atingidos: (1) Implementar, numa plataforma Xilinx Zynq, uma arquitetura heterogénea, composta por um processador hard-core Arm e por um processador soft-core RISC-V; (2) Implementar um módulo de hardware, checker, não só para fazer as comparações associadas ao lockstep, mas também para garantir sincronismo entre os processadores, sempre que o código atinge um checkpoint. (3) Alterar o compilador de cada arquitetura para compilar a mesma aplicação para dois processadores diferentes e inserir checkpoints no código, de modo a ser possível de se fazer as comparações para o lockstep.