Atualmente, estou envolvido em um projeto universitário para implementar um processador de um conjunto de instruções existente. A idéia é que até o final do projeto eu possa sintetizar esse design e executá-lo em um FPGA. Tudo está indo bem até agora, comecei a implementar o design no Verilog HDL há alguns dias e consegui uma versão muito simples funcionando. Agora, o problema: entrei em contato com algumas pessoas envolvidas no design de hardware há anos e elas sugeriram que, antes de prosseguir, eu deveria passar a usar o SystemC para a implementação. Agora, fiquei muito confuso, porque este era o meu pensamento:
Verilog -> Como uma linguagem HDL, visa especificamente o design de hardware. Possui alguns níveis de abstração, como Verilog estrutural e comportamental, mas é uma forma muito elegante de especificar a RTL de um design. Você pode definitivamente sintetizá-lo usando um monte de ferramentas, dependendo do FPGA que você escolher (no meu caso, estou usando as placas Xilinx Vivado 2014 e Zynq). No lado negativo, o Verilog simples não oferece abstração suficiente para verificação e é por isso que você tem coisas como o System Verilog.
SystemC -> Esta é uma biblioteca de classes C ++ que introduz efetivamente o conceito de tempo no C ++ e permite que você faça uma simulação orientada a eventos. Claramente, é muito mais alto nível do que qualquer HDL e as coisas aqui podem ser implementadas muito mais rapidamente. Isso o torna uma ferramenta muito boa para coisas como verificação e até implementação de simuladores, para que as pessoas possam começar a projetar drivers e itens para um chip antes que o produto seja realmente fabricado. Aparentemente, também existe um subconjunto do SystemC que pode ser sintetizado (acho que até o Xilinx Vivado pode fazer isso) e, em alguns casos, permite que o SystemC seja usado para projetar sistemas muito grandes, onde um nível mais alto de abstração é útil.
Então, minhas perguntas são:
- Essas noções de que systemC e Verilog (ou idiomas HDL, se você preferir) estão corretas?
- Quando devo usar o SystemC e quando Verilog?
- Disseram-me que mesmo em Verilog, o uso de muito código comportamental pode ser um pouco problemático em seções críticas da implementação, porque você está basicamente dando muito menos restrições à ferramenta de síntese sobre como sintetizá-la. Com um nível mais alto de abstração, isso não seria um problema? ou seja, se eu usar o systemC, posso acabar com um design muito lento, com muita energia e grande consumo ...
- A pessoa que sugeriu o SystemC mencionou que parece que estou fazendo "exploração arquitetônica" e é por isso que ele prefere o Verilog. O que exatamente isso significa? Fiquei com a impressão de que a arquitetura normalmente se refere ao conjunto de instruções e à microarquitetura a uma implementação de um conjunto de instruções (portanto, a microarquitetura é o rtl real que executa as instruções). Então, a exploração arquitetônica significa que ele pensa que estou implementando um processador para ver quão viável é um conjunto de instruções?
- Ele disse que um argumento para usar o SystemC é muito mais fácil porque é um nível de abstração mais alto do que um HDL. Ele também afirmou que era mais fácil acertar o momento do design. Até que ponto isso é verdade?
A ajuda seria muito apreciada, estou um pouco confuso e com dificuldades em obter informações claras sobre isso online. Obrigado!