Sunteți pe pagina 1din 2

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE

CENTRO DE TECNOLGIA
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO

SIMULADOR DE CIRCUITOS DIGITAIS


PROFESSOR: ADELARDO ADELINO DANTAS DE MEDEIROS

O objetivo é desenvolver em C++ um programa 4. Para um circuito definido (via teclado ou


simulador de circuitos lógicos, composto por leitura de arquivo), fazer a simulação para o
portas lógicas de 2 a 4 entradas (ou de uma cálculo das saídas a partir de um conjunto
entrada, no caso da NOT) dos seguintes tipos: de valores lógicos das entradas, fornecido
 NOT pelo usuário via teclado.
 AND, NAND 5. Para um circuito definido, gerar a sua tabela
 OR, NOR verdade (saídas para todas as possíveis en-
 XOR, NXOR tradas).

O aplicativo deve ser programado baseando-se As entradas e saídas do circuito e das portas
em objetos polimórficos para modelagem das devem prever a possibilidade de sinais digitais
portas lógicas. Ou seja, não deve haver instru- verdadeiros (TRUE), falsos (FALSE) ou indefini-
ções de controle de fluxo (if, switch, terná- dos (UNDEF). A simulação deve ser capaz de
rios, etc.) que mudem a forma de execução de lidar com circuitos contendo ciclos, calculando
acordo com o tipo da porta (OR, NOT, NAND, as saídas quando for possível fazê-lo ou infor-
etc.). A exceção possível é no tratamento ime- mando que uma ou mais saídas ficam UNDEF
diatamente seguinte à leitura (do arquivo ou para aquelas entradas, apenas quando não for
do teclado) do tipo de porta a ser incluído no possível a sua determinação (TRUE ou FALSE).
circuito, caso em que podem ser previstas ins-
truções de controle de fluxo para criação do ARQUIVO
objeto adequado. Também pode haver instru-
ções de controle de fluxo para lidar com outros Os arquivos de leitura e escrita dos circuitos
tipos de informação que não o tipo da porta. devem seguir rigorosamente um padrão, de tal
forma que possam ser reconhecidos pelos pro-
Os dados de entrada, fornecidos pelo usuário, gramas desenvolvidos por todos os alunos. Há
via teclado ou através da leitura de um arqui- exemplos do arquivo disponível na turma vir-
vo, são: tual no SIGAA (tanto arquivos corretos quanto
 Número de entradas e saídas do circuito. arquivos contendo erros). O formato dos ar-
 Número de portas lógicas do circuito. quivos é o seguinte:
 Para cada uma das portas lógicas:
o O tipo de porta (AND, NOT, etc.). CIRCUITO: Nin Nout Nportas
o O número de entradas da porta (exceto PORTAS:
para portas NOT). id) type num_in: id_in1 id_in2
o Para cada entrada da porta: ...
 A origem do sinal lógico: uma porta id) type num_in: id_in1 id_in2
ou uma das entradas do circuito. SAIDAS:
 Para cada uma das saídas do circuito: num) id_out
o A origem do sinal lógico: uma porta ou ...
uma das entradas do circuito. num) id_out

O programa deve ter ao menos as seguintes Os trechos escritos em COURIER NEW negrito
funcionalidades: devem estar presentes no arquivo exatamente
1. Definição de um novo circuito a partir de como aparecem acima. Os trechos em ARIAL
dados fornecidos via teclado. itálico correspondem aos locais onde serão
2. Salvamento em arquivo de um circuito. salvos no arquivo os valores numéricos corres-
3. Leitura de um circuito a partir de um arqui- pondentes ao circuito específico. O significado
vo previamente salvo. dos valores no arquivo é o seguinte:
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE TECNOLGIA
DEPARTAMENTO DE ENGENHARIA DE COMPUTAÇÃO E AUTOMAÇÃO

 Nin: número de entradas do circuito ALGORITMOS


 Nout: número de saídas do circuito
 Nportas; número de portas do circuito Os algoritmos em pseudocódigo listados a se-
 id: identificador da porta (1 ≤ id ≤ Nportas) guir podem ser úteis no desenvolvimento do
 type: tipo da porta: aplicativo.
o NT = porta NOT;
o AN = porta AND; SIMULAR CIRCUITO:
o NA = porta NAND;
Para i de 0 a Num_portas-1
o OR = porta OR; | portas[i].saida <- UNDEF;
o NO = porta NOR; Fim Para
o XO = porta XOR;
o NX = porta NXOR Repita
 num_in: número de entradas da porta lógi- | tudo_def <- true;
| alguma_def <- false;
ca (1 para NOT; 2 a 4 para as demais) | Para i de 0 a Num_portas-1
 id_in: identificador da origem do sinal lógi- | | Se (portas[i].saida == UNDEF)
co de cada uma das entradas da porta | | | in_porta <- entradas
(compatível com o número anterior). | | | booleanas da porta i
o > 0 se o sinal vem da saída de uma porta | | | portas[i].simular(in_porta)
| | | Se (portas[i].saida == UNDEF)
(1 ≤ id_in ≤ Nportas) | | | | tudo_def <- false
o < 0 se o sinal vem de uma entrada do | | | Caso contrário
circuito (-1 ≥ id_in ≥ -Nin) | | | | alguma_def <- true
 num: número da saída (1 ≤ num ≤ Nout) | | | Fim Se
| | Fim Se
 id_out: identificador da origem do sinal | Fim Para
lógico da saída do circuito: Enquanto (!tudo_def && alguma_def)
o > 0 se o sinal vem da saída de uma porta
(1 ≤ id_in ≤ Nportas) GERAR TABELA VERDADE:
o < 0 se o sinal vem de uma entrada do
Para i de 0 a Num_inputs-1
circuito (-1 ≥ id_in ≥ -Nin)
| inputs[i] <- FALSE;
Fim Para
As portas e saídas devem estar ordenadas no
arquivo, de modo que as linhas corresponden- Repita
tes à primeira porta e à primeira saída no ar- | simular_circuito(inputs);
quivo devem ter id e num iguais a 1; as últimas | // Qual input incrementar?
| i <- Num_inputs-1
devem ter id e num iguais a Nportas e Nout, | Enquanto (i >= 0 &&
respectivamente. As linhas intermediárias de- | inputs[i] == UNDEF)
vem estar ordenadas. | | inputs[i] <- FALSE
| | i--
Todo arquivo de descrição de circuito, durante | Fim Enquanto
| // Incrementa a input escolhida
a leitura, deve ser conferido para verificação de | Se (i >= 0)
que está correto (não há entradas de portas ou | | Se (inputs[i] == FALSE)
saídas desconectadas, referência a uma id de | | | inputs[i] <- TRUE
porta inexistente, formato incorreto, etc.). | | Caso contrário // É TRUE
Caso seja encontrada qualquer incoerência, o | | | inputs[i] <- UNDEF
| | Fim Se
arquivo deverá ser desconsiderado.
| Fim Se
Enquanto (i >= 0)

S-ar putea să vă placă și