You are on page 1of 65

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

DEPARTAMENTO DE INFORMTICA E MATEMTICA APLICADA

Introduo SystemC
Certificado

Participao nas atividades propostas;


Mnimo 75% de presena no curso:
2 listas de presena dirias:
15 minutos depois do incio;
15 minutos antes do fim.
Introduo 1.
2.
Introduo;
Instalao;

Systemc 3.
4.
Definies bsicas;
Tipos de dados;
5. Mdulos;
Dia 1 6. Processos;
7. Exerccios.
Introduo

SystemC um conjunto de classes e macros para C++;


SystemC open source:
Disponvel em: https://github.com/systemc.
Primeira verso lanada em 1999 pela OSCI (Open SystemC Initiative);
Prov uma sintaxe para construo de hardware e um ncleo de simulao;
A verso utilizada no curso 2.3.1.
Instalao 1/2

Faa download usando:


wget http://accellera.org/images/downloads/standards/systemc/systemc-2.3.1a.tar.gz
Descompacte o arquivo:
tar -xzvf systemc-2.3.1a.tar.gz
V para a pasta descompactada:
cd systemc-2.3.1a
Crie uma pasta para instalao:
mkdir $HOME/systemc231
Crie uma pasta objdir:
mkdir objdir
V para a pasta criada:
cd objdir
Instalao 2/2

Execute o comando ../configure:


../configure --prefix=$HOME/system231/
Execute o comando make:
make
Finalmente instale o SystemC:
make install
Compilando

Exporte a varivel SYSTEMC_HOME usando:


export SYSTEMC_HOME=$HOME/systemc231
Para compilar seu cdigo use:
g++ -I. -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux64
-Wl,-rpath=$SYSTEMC_HOME/lib-linux64 -o nome_do_executavel
nome_do_arquivo_fonte.cpp -lsystemc -lm
Execute o arquivo usando:
./nome_do_executavel
Ou baixe nosso script: https://goo.gl/X1MNrL e siga as instrues:
D permisso de execuo utilizando: chmod +x compiler.py
./compiler.py arquivo1.cpp arquivo2.cpp nome_do_executavel
Compilando - Exerccio

Escreva o cdigo abaixo em um arquivo chamado hello.cpp, compile


e execute para ver o resultado.
Compilando - Sada
Representao numrica

Problema: Estamos acostumados a representar nmeros na base decimal,


porm o computador lida com grandezas representadas como sequncias de
bits (base 2);
Fazer manipulao com nmeros binrios pode ser custoso e pouco intuitivo
para ns, mas necessrio entender como um computador representa esses
dados na base binria.
Converso de bases

A transformao de um nmero representado em uma base


genrica para a base decimal feita segundo a expresso:

n10 = di . bi + .. + d1 . b1 + d0 . b0
onde n10 o nmero na base 10 correspondente sequncia de i+1
dgitos di na base b.

Exemplos:
00110111 = 1 x 2 + 1 x 2 + 1 x 2 + 1 x 2 + 1 x 2 = 55 10
Representao numrica

Nmeros inteiros:
A converso de base que vimos nos leva a interpretar a sequncia de bits como sendo a
representao de um nmero natural;
Como podemos representar nmeros inteiros (i.e., com sinal)?
Exemplo:
1 1 02 = 610 Nmero natural;
1 1 02 = -210 Com sinal e Magnitude.
O bit mais significativo representa o sinal:
1 - Negativo;
0 - Positivo.
Complemento de 2 - 1/2

Em computao, complemento de dois um tipo de representao


binria de nmeros com sinal amplamente usada nas arquiteturas dos
dispositivos computacionais modernos;
Regra: basicamente, deve-se pegar o numero na base binria e inverter
todos os bits (trocando todos os 0s por 1s e 1s por 0s), em
seguida soma-se o resultado da troca com 1.
Complemento de 2 - 2/2
Ex: 0 0 1 12 ( 310).

Passo 1: Inverter os bits.


1 1 0 02
Passo 2: Soma +1.
Para conferir o resultado basta pegar a representao do
1 1 0 02 bit mais significativo e subtra-la da representao dos
demais. Como o resultado 1 1 0 12, pegamos a
+ representao do bit mais significativo, ou seja,
0 0 0 12 1 0 0 02 (810) e subtramos da representao dos demais
0 1 0 12 (510). Resultado: 5 - 8 = -3.
1 1 0 12 (-310)
Tipos de dados

Para modelar o hardware, o SystemC fornece tipos especficos;


Temos o tipo bool que permitem a modelagem de operaes lgicas;
H tambm o sc_int que permitem a modelagem de clculos mais
complexos;
Como o SystemC baseado em C++, ele suporta todos os tipos de dados do
C++. Em geral, uma boa idia usar tipos de dados do C++, pois os tipos de
dados do SystemC consomem mais memria e tendem a deixar a simulao
mais lenta.
Tipos de dados do C++

int (Para nmeros inteiros entre -32.767 e 32.767);


long int (Para nmeros inteiros entre - 2.147.483.648 e 2.147.483.647);
unsigned int (Para nmero inteiros positivos entre 0 e 65.535);
unsigned long int (Para nmeros inteiros positivos entre 0 e
4.294.967.295);
unsigned short int (Para nmeros inteiros positivos entre 0 e 65.535);
float (Para nmeros reais entre 10^-38 e 10^+38);
char (Para caracteres individuais como +, A @, #, , $);
bool (Para indicar 1 - verdadeiro ou 0 - falso).

O SystemC suporta todos os tipos de dados listados acima.


Tipos de dados do SystemC

Tipo bit (bool):


bool o tipo de dado que pode assumir dois valores 0 e 1, onde 1 representa verdadeiro e
0 representa falso.

OBSERVAO: sc_bit is deprecated.


Operadores - bool

deprecated not not expr


Exemplo - bool
Bool - Exerccio 1

Implemente uma calculadora binria onde deve ter:


Entradas de dois valores binrios;
Sinal para habilitar cada possvel operao;
Seu programa deve ser capaz de imprimir o resultado de todas as operaes
binrias habilitada.
Tipos de dados

Tipo Bit com largura arbitrria (sc_bv):


A largura do vetor especificada em inteiro;
Uma largura M define o tamanho do vetor;
O seu sentido da direita para esquerda;
O elemento do ndice 0 o bit menos significativo;
O elemento do ndice M-1 o bit mais significativo.
Operadores - sc_bv
Mtodos para manipular sc_bv
Exemplo - sc_bv
Sada - sc_bv
Tipos de dados 1/2

sc_int
Armazenam os inteiros (com sinal) e possuem preciso fixa de 64 bits;
sc_uint
Armazenam os inteiros (sem sinal), tambm possuem preciso fixa de 64 bits, mas como no
necessrio a representao de sinal pelo bit mais significativo esse tipo pode representar
valores maiores.
Tipos de dados 2/2

sc_bigint
Haver projetos em que os operandos precisaro ser maiores que 64 bits. Para
esses tipos de projetos o sc_int no funcionar. Para esses casos, o SystemC
fornece o tipo sc_bigint (inteiro com sinal e de tamanho arbitrrio);
Esses tipos permitem que o projetista trabalhe com inteiros de qualquer tamanho,
limitado apenas pelo sistema subjacente.
sc_biguint
Similar ao tipo sc_bigint, a nica diferena a representao dos inteiros sem sinal.
Operadores bsicos de inteiros
Operadores de atribuio compostos
Operadores lgicos
Exemplo - sc_int
Sada - sc_int
Mdulos

Os mdulos so blocos de construo bsica dentro do SystemC que


permite ao projetista quebrar projetos complexos em peas menores
e mais gerenciveis;
Os mdulos do SystemC so semelhantes aos mdulos do Verilog e
do VHDL.
Mdulos

Um mdulo deve conter portas, construtor e mtodos / funes para


trabalhar nas portas;
Abaixo est a lista de partes de um mdulo:
Portas;
Variveis Internas:
Construtor;
Mtodos Internos.
SC_MODULE 1/2

No SystemC os mdulos so declarados com a palavra chave


SC_MODULE;
Sintaxe:

SC_MODULE: Palavra reservada;


module_name: Qualquer nome de mdulo vlido.
SC_MODULE 2/2

Se voc no deseja escrever usando a palavra chave SC_MODULE


poder escrever na sintaxe pura do C++ da forma:

Esta forma de declarao se assemelha a declarao de um struct ou de uma


classe no C++.
Exemplo - SC_MODULE
Portas dos mdulos 1/2

As portas dos mdulos passam dados para os processos de um mdulo


para o mundo externo, como em Verilog e VHDL;
Deve-se declarar a direo da porta IN (entrada), OUT (sada), INOUT
(entrada ou sada);
Deve-se tambm declarar o tipo de dado da porta, como qualquer tipo de
dado do C++, ou do SystemC ou o tipo de dado definido pelo usurio;
Tipos de portas:
IN: porta de entrada;
OUT: porta de sada;
INOUT: porta de entrada ou sada.
Portas dos mdulos 2/2

As portas sc_in, sc_out e sc_inout so predefinidas pela biblioteca do


SystemC;
Sintaxe:

sc_direction type variable;

port_direction: sc_in ou sc_out ou sc_inout;


type: Tipo de dado;
variable: Nome vlido para uma varivel.
Exemplo - portas dos mdulos
Variveis internas

O SystemC permite o uso de variveis locais como Verilog ou qualquer


outra linguagem de programao;
Essas variveis locais podem ser de qualquer tipo do C++, SystemC ou
pode ser tambm de algum tipo definido pelo usurio.
Exemplo - Variveis internas
Processos

A funcionalidade real do mdulo implementada em processos;


O processo pode ser tornado sensvel ao nvel da lgica combinacional ou
pode ser uma lgica sensvel as bordas (clock);
Nota: Os sinais sensveis que desencadeiam um processo devem ser portas e
no podem ser um sinal ou uma varivel local.
Exemplo - Processos
Construtor

O construtor de mdulos cria e inicializa uma instncia de um mdulo;


O construtor cria as estruturas de dados internas que so usadas para
o mdulo e inicializa essas estruturas de dados em valores
conhecidos;
Os construtores de mdulos no SystemC so implementados de modo
que o nome da instncia de mdulos e hierarquia do mdulo seja
passado para o construtor no instante de criao (criao). Isso ajuda
a identificar o mdulo quando ocorrem erros ou ao informar dados do
mdulo.
Exemplo - Construtor
Exerccio 2 - Somador

Implemente um somador binrio onde deve ter:


Entradas de dois valores, cada um com 8 bits;
Sada indicando a soma dos dois valores.
Seu programa deve ser capaz de imprimir o valor referente a soma dos dois
valores.
Somador Soluo 1/7

+ RESULT

B
Somador Soluo 2/7
Somador Soluo 3/7 - Testbench
Somador Soluo 4/7 - Testbench
Somador Soluo 5/7 - Testbench
Somador Soluo 6/7 - Main
Somador Soluo 7/7 - Simulao
Exerccio 3 - Subtrator

Implemente um subtrator de 8 bits onde deve ter:


Entradas de dois valores, cada um com 8 bits;
Sada indicando a subtrao do primeiro valor pelo segundo.
Seu programa deve ser capaz de imprimir o valor referente a subtrao do
primeiro valor pelo segundo.
Exerccio 4 - Comparador

Implemente um comparador binrio onde deve ter:


Entradas de dois valores, cada um com 8 bits;
Sada indicando o resultado da comparao.
Seu programa deve ser capaz de imprimir os seguintes resultados:
1 - Se os valores da entrada forem iguais;
0 - Se os valores forem diferentes.
Projeto de um bloco contador 1/6

Contador sincronizado de 4 bits ;


Reset assncrono;
Sinal para ativao.
Projeto de um bloco contador 2/6
Projeto de um bloco contador 3/6
Projeto de um bloco contador 4/6
Projeto de um bloco contador 5/6
Projeto de um bloco contador 6/6
Projeto Contador Exerccio 1

Escreva o cdigo do contador, compile e execute para ver o resultado.


Projeto Contador Exerccio 2

Modifique o cdigo do contador para contar de forma decrescente.


Referncias

http://slideplayer.com.br/slide/359173/
https://www.slideshare.net/DVClub/design-verification-using-systemc
http://www.asic-world.com/systemc/tutorial.html

You might also like