SystemC
SystemC é uma linguagem de modelagem e simulação especialmente para o desenvolvimento de sistemas eletrônicos complexos que incluem componentes de hardware e software.
Em contraste com as linguagens de descrição de hardware puras , como VHDL e Verilog-HDL , SystemC não é uma linguagem de programação própria, mas uma biblioteca de classes C ++ . É definido no atual padrão IEEE 1666-2011. Uma implementação de código aberto do padrão também está disponível sob a licença Apache 2.0 . Como uma biblioteca de classes, SystemC C ++ estende os elementos de linguagem que são usados para modelagem de hardware. Ao mesmo tempo, a biblioteca possui um núcleo de simulador para que os modelos descritos com SystemC possam ser executados e testados.
SystemC é usado principalmente para modelagem em níveis mais altos de abstração, por exemplo, B. usado para Modelagem de Nível de Transação (TLM) . SystemC é, portanto, particularmente adequado para projetos de nível de sistema eletrônico , onde o fornecimento antecipado de um protótipo virtual para a avaliação de alternativas de projeto é de grande importância. Projetos RTL clássicos seriam muito complexos e inflexíveis aqui.
Outra vantagem do SystemC não é apenas o rápido desenvolvimento de protótipos, mas também o desempenho de simulação significativamente aprimorado em níveis mais altos de abstração. Os modelos projetados no SystemC no nível de transição podem ter um desempenho de simulação cerca de mil vezes mais rápido do que os modelos RTL . Isso significa que programas mais complexos também podem ser simulados e alternativas de design com relação ao particionamento de componentes de hardware e software podem ser pesadas. Mas também a modelagem de circuitos sintetizáveis no nível de transferência de registro é possível com o SystemC como um substituto para VHDL ou Verilog.
Como SystemC não é uma linguagem independente, mas uma biblioteca pura (de classes ) para C ++, todos os elementos de linguagem típicos de linguagens de descrição de hardware convencionais devem ser mapeados para construções de linguagem C ++ simples. Isso traz ao SystemC a desvantagem de uma sobrecarga sintática que as linguagens de descrição de hardware convencionais não têm. Fornecer uma variedade de pré - processadores - as macros ajudam a atenuar um pouco esse efeito. O desenvolvedor é muito mais livre para se expressar, mas isso geralmente entra em conflito com a capacidade de sintetizar o modelo de hardware.
SystemC é adequado, como B. também a linguagem de modelagem E , para a modelagem de protocolos e periféricos, a fim de utilizá-la para verificar a perfeição de um circuito digital. No entanto, SystemC não é apenas uma linguagem de modelagem, mas também seu próprio núcleo de simulação. Isso está contido na biblioteca SystemC (por exemplo, em cada implementação de referência do OSCI), de modo que um simulador executável com o comportamento do código-fonte é criado compilando um código-fonte do sistema. No entanto, o SystemC também é suportado por ferramentas comerciais de simulação, como o Modelsim .
Muitas universidades estão trabalhando em programas eficientes para síntese de circuitos a partir de modelos SystemC. Algumas empresas oferecem soluções que podem gerar listas de rede para ASICs ou FPGAs a partir de determinados códigos SystemC . Em 2005, a versão 2.1 da descrição de referência do SystemC foi ratificada pela associação internacional de engenharia IEEE como o padrão IEEE 1666-2005, que foi substituído por 1666-2011 em 2012. Este padrão representa o LRM (Manual de Referência da Linguagem) atual e está disponível para download gratuito no IEEE (consulte os links da web). Em 2007, a implementação de referência de código aberto da OSCI (Open SystemC Initiative) foi atualizada para a versão 2.2 para ser totalmente compatível com o IEEE 1666 LRM.
Em 2016, o Analog Mixed-Signal Extension SystemC AMS foi homologado como padrão (IEEE 1666.1-2016). Uma implementação de referência de código aberto está disponível para download gratuito (consulte os links da web).
sintaxe
Visto que SystemC é uma biblioteca de classes para C ++, apenas as construções típicas para SystemC são fornecidas aqui.
Módulos
Módulos são usados para quebrar sistemas mais complexos em partes gerenciáveis. Eles formam blocos de construção, são acessíveis externamente por meio de portas e podem, por sua vez, conter módulos. A sintaxe é
SC_MODULE (Modulname) {
// Modulinhalt
};
Uma instância do módulo é criada pelo construtor
SC_CTOR (Modulname) {. . . }
percebi.
Sinais e portas
As portas formam a interface entre o módulo e o mundo externo. Existem três tipos de portas e, como um quarto tipo, sinais:
sc_in<Porttyp> PortInName; // Eingang sc_out<Porttyp> PortOutName; // Ausgang sc_inout<Porttyp> PortInOutName; // Bidirektional sc_signal<Signaltyp> SigName; // Signal
Processos
A funcionalidade dos módulos é formada por processos. Existem três tipos de processos.
Os processos do método são chamados quando um sinal da lista de sensibilidade muda e depois de executados, o controle é devolvido ao simulador. De
SC_METHOD (Funktionsname);
uma determinada função é instalada que deve ser declarada no módulo de antemão. A lista de sensibilidade acabou
sensitive << Signal1 << Signal2 . . .
gerado.
Em contraste com os processos de método, os processos de thread são iniciados apenas uma vez e executados pelo mesmo loop repetidamente, no qual os comandos wait () são usados para interromper temporariamente.
SC_THREAD (Funktionsname);
Processos de thread sincronizados são processos de thread síncronos cujas ações são visíveis apenas na próxima transição do clock . Em contraste com os processos de thread, não há especificação da lista de sensibilidade, mas o segundo argumento na chamada
SC_CTHREAD (Funktionsname, Taktflanke);
especifica qual borda do sinal de clock dispara o processo.
exemplo
Um somador no SystemC:
#include "systemc.h"
SC_MODULE(adder) { // Moduldeklaration (eine Art Klasse)
sc_in<int> a, b; // Zwei Eingangs-Ports (a und b)
sc_out<int> sum; // Ein Ausgangs-Port
SC_CTOR(adder) {
SC_THREAD(doit);
sensitive <<a <<b;
}
void doit() {
while(true) {
sum.write(a.read() + b.read());
wait();
}
}
};
Veja também
- Apenas outra linguagem de definição de hardware
- ABEL
- SystemVerilog
- SpecC
- Automação de design eletrônico
literatura
- Frank Kesel, modelagem de sistemas digitais com SystemC. De RTL à modelagem de nível de transação . 2012. ISBN 978-3-486-70581-2
Links da web
- Grupo de desenvolvimento de site da SystemC (Inglês)
- Padrão SystemC IEEE 1666-2005 (Inglês)
- Padrão SystemC IEEE 1666-2011 (Inglês)
- Padrão SystemC AMS IEEE 1666.1-2016 (Inglês)
- Download da prova de conceito SystemC AMS (Inglês)
- Página inicial do Fraunhofer IIS / EAS SystemC-AMS (inglês)
- Grupo Europeu de Usuários SystemC (Inglês)
- SCLive, um Linux LiveCD com um ambiente de simulação SystemC completo (Inglês)
- Guia Doulos para SystemC (Inglês)
- Uso do SystemC no código de hardware / software , tese de diploma (PDF; 532 kB)
- Utilitários Veripool SystemC e compilador Verilog para SystemC (inglês)
- 2 teses de diploma no tópico de acoplamento de simulador usando SystemC
Evidência individual
- ↑ SystemC. Recuperado em 8 de fevereiro de 2019 .
- ^ G. Martin: SystemC: da linguagem às aplicações, das ferramentas às metodologias . In: 16º Simpósio em Circuitos Integrados e Projeto de Sistemas, 2003. SBCCI 2003. Anais. Setembro de 2003, p. 3– , doi : 10.1109 / SBCCI.2003.1232796 ( ieee.org [acessado em 8 de fevereiro de 2019]).
- ↑ Frank Kesel: Modelagem de sistemas digitais com SystemC, desde RTL até modelagem em nível de transação . De Gruyter, Berlin, Boston 2012, ISBN 978-3-486-70581-2 , pp. 17 , doi : 10.1524 / 9783486718959 ( degruyter.com [acessado em 8 de fevereiro de 2019]).