sistemas de hardware são geralmente modelados com linguagens de descrição de hardware , como Verilog . Essas línguas são destinados a ajudar os designers a escrever código que é muito próximo do hardware gerado para que a cadeia de ferramentas para design de chips pode usar o código para gerar o hardware final. A desvantagem dessa abordagem é a flexibilidade de programação limitada nessas línguas. SystemC é um conjunto de bibliotecas de classes construídas em linguagem de programação C + +, e sua intenção é modelar sistemas de hardware e, ao mesmo tempo, usar todos os recursos de linguagem do C + + . Coisas que você precisa 
 compilador C + + , como g+ + 
 sistema operacional 
 Show Mais instruções 
 Usando SystemC 
 1 
 Baixe o pacote SystemC . SystemC pode ser baixado gratuitamente a partir da Internet. Antes de baixar, você será solicitado a registrar com a comunidade SystemC . Uma vez que o processo de registo está completo, o pacote pode ser baixado após o login no site com o nome de usuário e senha especificada . 
 2 
 Descompacte o pacote compactado. O pacote compactado terá uma extensão de arquivo chamado " tgz " . Suponha que o nome do pacote é "  . Tgz " . O pacote pode ser descompactado com os seguintes comandos : 
  gunzip  tgz 
  tar - xvf  tar 
 3 < . . p> Mude para o diretório descompactado usando o "cd " comando . Neste diretório , um arquivo chamado "install" pode ser encontrado. Este arquivo fornece orientações passo-a- passo para instalar o pacote . Siga os passos e instalar SystemC . Uma vez SystemC está instalado , sistemas de hardware pode ser modelado na língua . O pacote tem projetos de amostra no diretório " exemplos " . 
 4  Use o seguinte código como exemplo para modelar sistemas de hardware. O exemplo que é de um desenho de um sistema com dois processos . O primeiro processo preenche um buffer de um profundo sempre que ele está vazio. O segundo processo elimina -la e mostra o valor do tampão . Os dois processos operam em diferentes freqüências de clock . O código é explicado abaixo : 
 
 Incluir os arquivos de cabeçalho necessários 
 
 # include " systemc.h " 
 
 # include  
  #. incluir  
  Classe " mybuf " é tem dois relógios de entrada, clk1 e clk2 . Dois métodos , ou seja, inserir e remover são definidos , onde " inserir " é invocado na borda positiva do clk1 , e "remover" é invocado na borda positiva do " clk2 " 
 
 classe mybuf : . Sc_module pública { 
 
 público : 
 
 sc_in_clk clk1 ; 
 
 sc_in_clk clk2 ; 
 
 std :: deque  valores ; 
  SC_HAS_PROCESS ( mybuf ); 
 
 mybuf (nome sc_module_name ) : sc_module (nome ) { 
 
 inicializar (); 
 
 SC_METHOD (insert ); 
 
 sensível < < clk1.pos (); 
 
 SC_METHOD (remover) ; 
 
 sensíveis << clk2.pos (); } 
 
 
 
 vazio inserir (); 
 
 remove void ( ); 
 
 void initialize (); } 
 
 ; 
 
 as seguintes linhas de código implementar a inserção e remoção métodos , junto com um método de inicialização 
 
 mybuf vazio :: inicializar () { 
 
 values.clear (); } 
 
 
 
 mybuf vazio . : : remove () { 
 
 if ( values.size () > 0) { 
 
 std :: cout << sc_time_stamp () << " " << values.front () << endl; 
 
 values.pop_front (); } 
 
 
 
 } 
 
 mybuf vazio :: insert () { 
 
 if ( values.size () == 0) { 
 
 int r = rand ()% 100; 
 
 values.push_back (r ); 
 
 } 
 
 } 
 
 o seguinte segmento de código implementa um banco de ensaio para o exemplo. O clk1 relógios e clk2 são conduzidos a partir deste test- bench 
 
 classe mybuf_tb : sc_module público { 
 
 público : . 
 
 Sc_out  clk1 ; 
  sc_out  clk2 ; 
  SC_HAS_PROCESS ( mybuf_tb ); 
 
 mybuf_tb (nome sc_module_name ) : sc_module (nome ) { 
 
 SC_THREAD ( clock1 ); < br > 
 SC_THREAD ( clock2 ); 
 
 } 
 
 clock1 void ( ); 
 
 clock2 void ( ); } 
 
 ; 
 
 mybuf_tb vazio :: clock1 () { 
 
 while ( true) { 
 
 clk1 = 0; 
 
 esperar (10, SC_NS ); 
 
 clk1 = 1; 
 
 esperar (10, SC_NS ); 
 
 } 
 
 } 
 
 mybuf_tb vazio :: clock2 () { 
 
 while ( true) { 
 
 clk2 = 0; 
 
 esperar (20, SC_NS ); 
 
 clk2 = 1; 
 
 esperar (20, SC_NS ); 
 
 } 
 
 } 
 
 o seguinte segmento de código instancia o módulo de projeto e seu teste de bancada. Em seguida, ele liga os relógios para que o teste - banco fornece os valores de clock para o módulo de design. 
 
 Int sc_main (int argc , char * argv [ ] ) { 
 
 sc_signal  clk1 ; 
  sc_signal  clk2 ; 
  mybuf newbuf ( " mybuffer "); 
 
 newbuf.clk1 ( clk1 ); 
 
 newbuf . clk2 ( clk2 ); 
 
 mybuf_tb 1; 
 
 }