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;
}