Progettare un circuito combinatorio significa realizzare una rete di porte logiche il cui comportamento è conforme ad una descrizione data a parole ed in termini umani o, più formalmente, ad una tabella di verità.
Sono necessari tre passaggi:
Vogliamo realizzare un circuito combinatorio con due ingressi digitali A e B ed un'uscita Q. Q è alta quando entrambi gli ingressi sono uguali.
Creiamo la tabella di verità che corrisponde alla descrizione. In giallo sono indicati gli ingressi, con le 22 righe possibili; in azzurro è indicata l'uscita corrispondente alla descrizione:
A | B | Q |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Si definisce mintermine il prodotto (nota 3) delle variabili di ingresso prese in forma normale (A) se valgono 1, prese in forma negata (A) se valgono 0. A volte è indicato con la lettera m minuscola. La tabella seguente, relativa ad una rete con due ingressi, mostra i quattro mintermini:
A | B | m |
0 | 0 | A · B |
0 | 1 | A · B |
1 | 0 | A · B |
1 | 1 | A · B |
Per il passaggio dalla tabella di verità all'espressione booleana occorre:
A | B | Q | ||
0 | 0 | 1 | ← | A · B |
0 | 1 | 0 | ||
1 | 0 | 0 | ||
1 | 1 | 1 | ← | A · B |
Q = (A · B) + (A · B)
Tale espressione viene chiamata Prima Forma Canonica oppure Forma Canonica SP (somma di prodotti).
La Prima Forma Canonica è l'espressione duale della Seconda Forma Canonica (nota 2) e viceversa, ovviamente.
Si definisce maxtermine la somma (nota 3) delle variabili di ingresso prese in forma normale (A) se valgono 0, prese in forma negata (A) se valgono 1. A volte è indicato con la lettera M maiuscola. La tabella seguente è relativa ad una rete con due ingressi e mostra i quattro maxtermini:
A | B | M |
0 | 0 | A + B |
0 | 1 | A + B |
1 | 0 | A + B |
1 | 1 | A + B |
Per il passaggio dalla tabella di verità all'espressione booleana occorre:
A | B | Q | ||
0 | 0 | 1 | ||
0 | 1 | 0 | ← | A + B |
1 | 0 | 0 | ← | A + B |
1 | 1 | 1 |
Q = (A + B) · (A + B)
Tale espressione viene chiamata Seconda Forma Canonica oppure Forma Canonica PS (prodotto di somme).
La Seconda Forma Canonica è l'espressione duale della Prima Forma Canonica (nota 2) e viceversa, ovviamente.
Le due forme canoniche sono ovviamente diverse come pure sono diversi i due circuiti. Il comportamento è però identico (nota 4).
Nei circuiti complessi è possibile scrivere direttamente il codice VHDL che descrive la tabella di verità e lasciare al software di sintesi l'onere di trovare la rete. Di seguito un esempio, sempre relativo a questa tabella di verità. L'ingresso è un array di due elementi
library IEEE;
use IEEE.std_logic_1164.all;
entity COMPARATORE is
port (
I : in std_logic_vector (1 downto 0;
Q : out std_logic);
end entity COMPARATORE ;
architecture RTL of COMPARATORE is
begin
with I select
Q <= '1' when '00',
'1' when '11',
'0' when others;
end architecture RTL;
Vogliamo realizzare un circuito combinatorio che somma aritmeticamente tre numeri di un bit ciascuno:
Creiamo la tabella di verità che corrisponde alla descrizione:
Per scrivere velocemente tutte le otto combinazioni degli ingressi A, B e C sono possibili due tecniche:
L'ordine delle righe non ha particolare importanza, anche se è utile per evitare confusione, dimenticanze o righe duplicate (nota 1).
La tabella, non ancora completata:
A | B | C | MSB | LSB |
0 | 0 | 0 | ||
0 | 0 | 1 | ||
0 | 1 | 0 | ||
0 | 1 | 1 | ||
1 | 0 | 0 | ||
1 | 0 | 1 | ||
1 | 1 | 0 | ||
1 | 1 | 1 |
Possiamo quindi scrivere il valore delle uscite, leggendo la descrizione data a parole. L'ultima colonna, la somma in decimale, è stata inserita solo per chiarezza:
A | B | C | MSB | LSB | |
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 1 | 0 | 2 |
1 | 0 | 0 | 0 | 1 | 1 |
1 | 0 | 1 | 1 | 0 | 2 |
1 | 1 | 0 | 1 | 0 | 2 |
1 | 1 | 1 | 1 | 1 | 3 |
Se preferiamo, possiamo leggere la tabella precedente come costituita da due tabelle, ciascuna con una sola uscita:
A | B | C | MSB |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
A | B | C | LSB |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
Si definisce mintermine il prodotto (nota 3) delle variabili di ingresso prese in forma normale (A) se valgono 1, prese in forma negata (A) se valgono 0. A volte è indicato con la lettera m minuscola. La tabella seguente, relativa ad una rete con tre ingressi, mostra gli otto mintermini:
A | B | C | m |
0 | 0 | 0 | A · B · C |
0 | 0 | 1 | A · B · C |
0 | 1 | 0 | A · B · C |
0 | 1 | 1 | A · B · C |
1 | 0 | 0 | A · B · C |
1 | 0 | 1 | A · B · C |
1 | 1 | 0 | A · B · C |
1 | 1 | 1 | A · B · C |
Per il passaggio dalla tabella di verità all'espressione booleana occorre:
A | B | C | MSB | ||
0 | 0 | 0 | 0 | ||
0 | 0 | 1 | 0 | ||
0 | 1 | 0 | 0 | ||
0 | 1 | 1 | 1 | ← | A · B · C |
1 | 0 | 0 | 0 | ||
1 | 0 | 1 | 1 | ← | A · B · C |
1 | 1 | 0 | 1 | ← | A · B · C |
1 | 1 | 1 | 1 | ← | A · B · C |
MSB = (A·B·C) + (A·B·C) + (A·B·C) + (A·B·C)
Tale espressione viene chiamata Prima Forma Canonica oppure Forma Canonica SP (somma di prodotti).
La Prima Forma Canonica è l'espressione duale della Seconda Forma Canonica (nota 2) e viceversa, ovviamente.
La scrittura della prima forma canonica relativa a LSB è lasciata come esercizio.
Si definisce maxtermine la somma (nota 3) delle variabili di ingresso prese in forma normale (A) se valgono 0, prese in forma negata (A) se valgono 1. A volte è indicato con la lettera M maiuscola. La tabella seguente, relativa ad una rete con tre ingressi, mostra gli otto maxtermini:
A | B | C | M |
0 | 0 | 0 | A + B + C |
0 | 0 | 1 | A + B + C |
0 | 1 | 0 | A + B + C |
0 | 1 | 1 | A + B + C |
1 | 0 | 0 | A + B + C |
1 | 0 | 1 | A + B + C |
1 | 1 | 0 | A + B + C |
1 | 1 | 1 | A + B + C |
Per il passaggio dalla tabella di verità all'espressione booleana occorre:
A | B | C | MSB | ||
0 | 0 | 0 | 0 | ← | A + B + C |
0 | 0 | 1 | 0 | ← | A + B + C |
0 | 1 | 0 | 0 | ← | A + B + C |
0 | 1 | 1 | 1 | ||
1 | 0 | 0 | 0 | ← | A + B + C |
1 | 0 | 1 | 1 | ||
1 | 1 | 0 | 1 | ||
1 | 1 | 1 | 1 |
MSB = (A+B+C) · (A+B+C) · (A+B+C) · (A+B+C)
Tale espressione viene chiamata Seconda Forma Canonica oppure Forma Canonica PS (prodotto di somme).
La Seconda Forma Canonica è l'espressione duale della Prima Forma Canonica (nota 2) e viceversa, ovviamente.
La scrittura della seconda forma canonica relativa a LSB è lasciata come esercizio.
L'ultimo passaggio è il disegno della rete a partire da una qualunque delle due forme canoniche (nota 4); in genere conviene scegliere la più piccola, se esiste. Nel caso di questo esempio è indifferente (il numero di 1 coincide con il numero di 0) e viene mostrata la rete completa ottenuta con la Prima Forma Canonica:
Il codice per la sintesi VHDL:
library IEEE;
use IEEE.std_logic_1164.all;
entity SOMMA is
port (
I : in std_logic_vector (2 downto 0;
MSB : out std_logic);
LSB : out std_logic);
end entity SOMMA ;
architecture RTL of SOMMA is
begin
with I select
MSB <= '1' when '011',
'1' when '101',
'1' when '110',
'1' when '111',
'0' when others;
with I select
LSB <= '1' when '001',
'1' when '010',
'1' when '100',
'1' when '111',
'0' when others;
end architecture RTL;
Ricavare la Seconda Forma Canonica di LSB del precedente Esempio 1
Disegnare lo schema logico di MSB e LSB del precedente esempio ottenuto a partire dalla Seconda Forma Canonica
Realizziamo un "votatore"
L'uso delle forme canoniche ha diversi vantaggi:
Ha lo svantaggio importante che il circuito prodotto è piuttosto grande (molte porte con molti ingressi). Per esempio, anche intuitivamente, è facile verificare che il seguente circuito produce lo stesso risultato della prima parte della rete progettata al punto precedente pur usando meno porte ciascuna delle quali ha meno ingressi:
Svariati sono i metodi che permettono di ottenere reti logiche ottimali, nessuno dei quali verrà qui spiegato:
Pagina creata nel settembre 2020
Ultima modifica: 6 ottobre 2021
Appunti scolastici - Versione 0.1014 - gennaio 2023
Copyright 2012-2023, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera stata rilasciata con licenza Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)