Você está na página 1de 5

Meu

Processador não funciona. O que posso fazer?


Versão: 1.2 (12/10/2011) 

1) Conhece suas ferramentas: 
a. O “RTL Viewer” para verificar as conexões entre os blocos. 

b. Paneis de “Warnings” e “Errors” 

  

  
 


 
c. Monitoramento de sinais na simulação. No “Node Finder” clique nos três pontos e 
selecione a instancia desejada (por exemplo, a unidade de controle). Depois clique 
no  triangulo  ao  lado  do  “Filter”  e  selecione  “Design  Entry  (all  names)”.  Depois, 
selecione o sinal (por exemplo, “atual” que mostre o estado atual com o nome).  
 

 
Atenção:  o  filtro  “Design  Entry”  mostra  todos  os  sinais  antes  da  fase  de 
optimização  durante  a  compilação.  Ao contrário, o filtro “Post-synthesis” que só
mostra os sinais existentes depois da compilação. Somente os sinais contidos no
“Post-synthesis” poderão ser simulados.

   


 
d. Números das células usadas para analisar se blocos não forem criados (número de 
células  igual  zero).  Se  a  coluna  não  estiver  disponível  clique  no  botão  direito  do 
mouse  sobre  a  barra  que  contém  a  palavra  “Entity”  e  selecione  “Customize 
Columns” e adicione “Logic Celles”. 
 

 
 
 
2) Assegure‐se  que  para  todos  os  casos  de  atribuição  de  sinais,  os  sinais  de  saída  sejam 
definidos.   
a. Esse comportamento pode ser observado pelos “warnings” do tipo:  
Warning (10631): VHDL Process Statement warning at controladora.vhd(60): 
inferring latch(es) for signal or variable "R_end_rc", which holds its previous value 
in one or more paths through the process 
 
b. Zere os sinais na controladora antes do “case”: 


 
c. Use “when OTHERS” em multiplexadores e troca “NULL”s pelo “(others => “0”)” 

3) Coloque todos os sinais de entrada relevantes na lista de sensibilidade. 
a.  

 
 
b. Esse comportamento pode ser observado pelos “warnings” do tipo: 

Warning (10492): VHDL Process Statement warning at controladora.vhd(213): 
signal "RIent" is read inside the Process Statement but isn't in the Process 
Statement's sensitivity list  

4) Remova ”se possível” todos os “warnings”. Só os “warnings” seguintes não ocasionarão 
problemas: 
 
Warning: Feature LogicLock is only available with a valid subscription license. Please 
purchase a software subscription to gain full access to this feature. 
 
Warning: Found 9 output pins without output pin load capacitance assignment 
 
Warning: The Reserve All Unused Pins setting has not been specified, and will default to 'As 
output driving ground'. 
 
Warning: Found pins functioning as undefined clocks and/or memory enables. 
 
 
5) Coloque um exemplo para CADA instrução na memória de instruções (MI). 


 
6) Não use as bibliotecas “ieee.std_logic_signed.all”, ”ieee.std_logic_unsigned.all” e 
"ieee.std_logic_arith.all" como eles não pertencem ao padrão IEEE e podem criar 
problemas na síntese. Só use “ieee.std_logic_1164.all” e “ieee.numeric_std.all” 

A sintaxe é: 

a. Addição/Substração:  
output_aux <= std_logic_vector(signed(Ent1) + signed(Ent2)); 
output_aux <= std_logic_vector(signed(Ent1) ‐ signed(Ent2)); 
 

ou 
 

output_aux <= std_logic_vector(unsigned(Ent1) ‐ unsigned(Ent2)); 
output_aux <= std_logic_vector(unsigned(Ent1) + unsigned(Ent2)); 
 
b. Comparação: 
if(signed(Ent_1) < signed(Ent_2)) then 
 
 
c. Deslocamento: 
res <= std_logic_vector(shift_left(signed(Ent2),to_integer(unsigned(Ent1))));  
 
d.  Acesso de matrizes: 
BR_aux(to_integer(unsigned(R_end_ra))) <= Ra; 
  e 
Rb <= BR_aux(to_integer(unsigned(R_end_rb))); 
 
 

7) Use uma notação clara para o “port mapping”: 

8) Comece cada simulação com “reset = 1” durante 2‐3 ciclos de clock. 

9) Para  simulações,  selecione  uma  frequência  que  é  baixa  suficiente.  Recomendo  1  MHz. 
(Extensão do tempo para simulações pelo “Edit > End Time..”).