virtual function {(d7seg_ifsc_type)/decodIFSC/F} display_virtual
add wave -position end sim:/decodifsc/C
add wave -position end sim:/decodifsc/F
add wave display_virtual
force -freeze sim:/decodifsc/C 000 0
run
force -freeze sim:/decodifsc/C 001 0
run
force -freeze sim:/decodifsc/C 010 0
run
force -freeze sim:/decodifsc/C 011 0
run
force -freeze sim:/decodifsc/C 100 0
run
</syntaxhighlight>
8.2 UPC: Unidade de Processamento Combinacional
11 07/04: Prova Combinacional
Desenvolver um projeto hierárquico com módulos em VHDL que implemente o circuito abaixo. Esse circuito controla 3 canais de áudio com prioridade. Os canais de áudio são “simulados” por chaves. A ordem decrescente de prioridade das entradas é A, B e C. O bloco de prioridade deve selecionar (SelOut) corretamente a entrada do MUX que deve ser chavetada para saída. Além disso, a saída F deve mostrar nos LEDs a saída selecionada. O decodificador de 7 segmentos deve decodificar a saída SelOut e mostrar no display “A”, “b” ou “C”, dependendo da saída selecionada.
Todos os módulos devem ter arquivos de teste (*.do), inclusive o topo. O teste do decodificador deve incluir um “virtual type” para simplificar a simulação.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity test_proc is
port(
data_in : in std_logic;
data_out: out std_logic
);
end test_proc;
architecture circuit of test_proc is
signal A,B,C,D: std_logic;
begin
A <= data_in;
data_out <= D;
--Version 1 --Version 2
process(A) --process (A,C)
begin
B <= A;
B <= '0';
C <= A and '1';
C <= not A;
D <= C;
end process;
end circuit;
</syntaxhighlight>
Lista de Sensibilidade (reentrada no process)
test_proc.vhd (não funciona no Quartus):
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity test_proc is
port(
data_in : in std_logic;
data_out: out std_logic
);
end test_proc;
architecture circuit of test_proc is
signal A,B,C,D: std_logic;
begin
A <= data_in;
data_out <= D;
process
begin
wait on A,C;
if A'event then
wait for 1 ns;
elsif C'event then
wait for 3 ns;
end if;
B <= A;
B <= '0';
C <= A and '1';
C <= not A;
D <= C;
end process;
end circuit;
</syntaxhighlight>
test.do:
vlib work
vcom -93 -work work {test_proc.vhd}
vsim work.test_proc
force -freeze sim:/test_proc/data_in 0 @10ns,1 @20ns,0 @30ns
run 40ns
</syntaxhighlight>
15 05/05: Código Seqüencial
Conceito de Variável
Variável vs. Signal
Estruturas de Controle
Exercícios:
Contador até 10
Temporizador 60 segundos
15.1 Variável vs. Sinal
library ieee;
use ieee.std_logic_1164.all;
entity sig_var is
port( d1: in std_logic;
res1, res2: out std_logic);
end sig_var;
architecture behv of sig_var is
signal sig_s1: std_logic;
begin
proc1: process(d1)
variable var_s1: std_logic;
begin
var_s1 := d1;
res1 <= var_s1;
end process;
proc2: process(d1)
begin
sig_s1 <= d1;
res2 <= sig_s1;
end process;
end behv;
</syntaxhighlight>
15.2 Estruturas de Controle
15.2.1 IF
Sintaxe Simplificada:
[ label: ] if condition1 then
sequence-of-statements
elsif condition2 then \_ optional
sequence-of-statements /
elsif condition3 then \_ optional
sequence-of-statements /
...
else \_ optional
sequence-of-statements /
end if [ label ] ;
</syntaxhighlight>
Exemplo:
if a=b then
c:=a;
elsif b<c then
d:=b;
b:=c;
else
do_it;
end if;
</syntaxhighlight>
15.2.2 LOOP
Sintaxe Simplificada:
[ label: ] loop
sequence-of-statements -- use "exit statement" or "next statement"
end loop [ label ] ;
[ label: ] for variable in range loop
sequence-of-statements
end loop [ label ] ;
[ label: ] while condition loop
sequence-of-statements
end loop [ label ] ;
</syntaxhighlight>
Exemplo:
loop
input_something;
exit when end_file;
end loop;
for I in 1 to 10 loop
AA(I) := 0;
end loop;
while not end_test loop
input_something;
end loop;
</syntaxhighlight>
15.2.3 CASE
Sintaxe Simplificada:
[ label: ] case expression is
when choice1 =>
sequence-of-statements
when choice2 => \_ optional
sequence-of-statements /
...
when others => \_ optional if all choices covered
sequence-of-statements /
end case [ label ] ;
</syntaxhighlight>
Exemplo:
case my_val is
when 1 =>
a:=b;
when 3 =>
c:=d;
do_it;
when others =>
null;
end case;
</syntaxhighlight>
16 26/05: Introdução a FSM
Introdução a máquina de estado:
Estado
Transição
Ação
Estrutura de máquinas de estado
Técnicas de implementação (1, 2 e 3 processos)
Exercício de simulação de uma FSM
18 24/06: Exercício UPC Sequencial
18.1 Objetivo
Reduzir a quantidade de chaves no projeto combinacional da primeira avaliação, utilizando apenas um conjunto de 8 chaves, SW(7..0), para leitura dos dois operandos. A UPC terá o seguinte funcionamento:
Definir a operação (SW(17..16))
Entrar com o primeiro operando (SW(7..0)), pressionar Enter
Entrar com o segundo operando (SW(7..0)), pressionar Enter (somente para as operações "soma", "xor ou "or")
Mostrar o valor da operação
A partir do objetivo geral, temos o seguintes objetivos específicos:
Implementar um registrador de tamanho genérico;
Adicionar um registrador para armazenar o primeiro operando;
Adicionar registradores para armazenar o resultado das operações;
Implementar e adicionar uma máquina de estado (FSM) para fazer o controle como descrito abaixo.
A FSM terá o seguinte funcionamento:
No estado inicial, “Esperando”, as saídas da FSM estão desabilitadas (Enable_1=‘0’, Enable_2=‘0’, Selecao=“XX”). Isso garante que nenhuma atividade ocorrerá na calculadora, enquanto o usuário não fornecer os operandos e a operação.
Quando Enter (Key(1)) for ‘0’, a FSM avança para o próximo estado, para aguardar até o Enter voltar para ‘1’ (botão “não pressionado”).
No estado “Operação” é realizada uma transição para o próximo estado, de acordo com a operação selecionada.
Se a operação for “ID” (de apenas um operando), a operação é realizada, o resultado é armazenado no registrador de saída (Enable_2=‘1’) e a FSM retorna para o estado inicial “Esperando”.
Para as demais operações, a leitura do segundo operando é realizada em um estado adicional - Enable_1 e Enable_2 precisam ser devidamente controlados em cada estado.Para essas operações, quando o Enter for pressionado pela segunda vez (Key(1) = ‘0’), o resultado é escrito nos registradores de saída (Enable_1=‘1’), e a FSM retorna para o estado inicial “Esperando”.
19 30/06: 2ª Avaliação e 1ª Recuperação
Utilizando os conceitos de máquinas de estado, projete um circuito que analisa a senha de 3 dígitos (ex.: 306) para um controle de acesso.
Obs.:
Tecla: Valor BCD de 0-9 e 15 para não pressionado.
Reset, Libera e Espera: Ativo em 1.
Intervalo de tempo máximo entre toques das teclas é 3 ciclos de clock.
Intervalo de tempo do sinal libera é 5 ciclos de clock.
Entrega:
Desenho máquina de estado
Arquivo *.vhd da FSM
Arquivo *.do testando a FSM
Recuperação:
Implementar o topo conforme o imagem abaixo e modificar o decodificador para mostrar de 0-9 e '–' para outro valor BCD.