Domande e Risposte
1. Come installare la licenza di Quartus II (per versioni
antecedenti alla 8.1)
2. Alcuni problemi di licenza
3. Errori in simulazione
4. Alcuni tipi di dato
5. Dimensione di vettori di bit in operazioni aritmetiche
6. Come salvare le forme d'onda
-->
Guida alla soluzione
std_logic | use IEEE.std_logic_1164.all; |
unsigned | use IEEE.std_logic_unsigned.all; |
signed | use IEEE.std_logic_signed.all; |
operazioni aritmetiche | use IEEE.std_logic_arith.all; |
[...]
signal a, b : unsigned(3 downto 0); --n bit
signal s : unsigned(4 downto 0); --n+1 bit
signal m : unsigned(7 downto 0); --2n bit
[...]
Tuttavia, poichè Quartus interpreta il codice cercando di estrarre operazioni note (somme, contatori, moltiplicatori, etc.) che già possiede in alcune librerie interne, risulta necessario conformarsi alle notazioni di tali componenti. Per le moltiplicazioni vale la regola n bit->2n bit, mentre per le somme il componente che Quartus rileva ed istanzia internamente possiede ingressi ed uscite di pari ampiezza ed un carry out per il bit (n+1)-esimo. Non essendo possibile raggiungere i pin di questo componente "interno", risulta necessario conformarsi a questa notazione nel seguente modo:
[...]
--valgono le definizioni di segnali riportate sopra
s <= conv_unsigned(a,5) + conv_unsigned(b,5); --estensione di 1 bit degli addendi
m <= a*b;
[...]
In questo modo, per le somme, l'addendo viene esteso a n+1 bit all'ingresso del sommatore, mentre i segnali restano in tutti gli altri ambiti a n bit.conv_integer(valore_signed_unsigned)
. Tuttavia occorre prestare attenzione alle ri-conversioni in signed/unsigned o std_logic_vector, assicurandosi di utilizzare il numero corretto di bit. Qualora si definissero dei segnali di tipo integer definire sempre il loro range di utilizzo:signal n : integer range 0 to 255;
Microelectronics Group Home Page | Staff |
Research Activities | Teaching Activity |
Publications | Local Stuff |
DEIS Home Page | University of Bologna Home Page |