Programação  
 
Conhecimento computador >> Programação >> C /C + + programação >> 
Como modelo de sistemas de hardware em SystemC
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;

}

Anterior :

Próximo : No
  Os artigos relacionados
·Como desenhar linhas no Visual C + + 
·Como reverter elementos de um array em C 
·Como preencher um DataReader Usando Statement 
·Como converter Float para String em C + + 
·Como Entrar em Papaya Android 
·Como inicializar uma matriz em C 
·Como limpar a tela no Visual C 
·Precauções para um buffer overflows 
·Como escrever um fluxo de entrada em um fluxo de saída…
·Como converter radianos em graus em Linguagem C + + em …
  Artigos em destaque
·Como usar Int para obter o código de cor RGB 
·Definição de Abstração de Dados em C + + 
·'C' Programação Android 
·Como encontrar uma String na memória buffer com C + + 
·Como Fake um Código Modelo 
·Como fazer um gráfico em movimento em C # 
·Como usar linguagem C para calcular juros compostos 
·Como Target subexibição no iPhone SDK 
·C + + Função chamada está faltando Lista Argument 
·Como projetar uma classe chamada Conta em C + + 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados