12
SISTEMAS DIGITAIS 2015-2016, MEEC Página | 1 SISTEMAS DIGITAIS LABORATÓRIO III CIRCUITOS SEQUENCIAIS 13-11-2015 Grupo 84-Turno de laboratório (Quarta-Feira, LSD3) Professor Francisco Garcia Ana Bárbara Faias Mateus - 83992 Paulo Jorge Laranjeira Bernardo - 84157

LABORATÓRIO IIIweb.tecnico.ulisboa.pt/~ist425292/wordpress/wp...teste teórico de Sistemas Digitais que também tivemos de enfrentar. Não conseguimos ser 100% bem-sucedidos na aula

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 1

    SISTEMAS DIGITAIS

    LABORATÓRIO III

    CIRCUITOS SEQUENCIAIS

    13-11-2015

    Grupo 84-Turno de laboratório (Quarta-Feira, LSD3)

    Professor Francisco Garcia

    Ana Bárbara Faias Mateus - 83992

    Paulo Jorge Laranjeira Bernardo - 84157

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 2

    Introdução

    O laboratório L3 tinha objetivo principal servir de tutorial à escrita linguagem de simulação e prototipagem

    de circuitos lógicos VHDL, através da ferramenta ISE da XILINX. Aliado à aprendizagem desta linguagem, este

    projeto também pretendia instruir de uma forma prática o funcionamento de componentes como Flip- Flops e

    Somadores de 4 entradas, até a este laboratório nunca antes testados experimentalmente.

    Este trabalho estava separado em duas partes principais, sendo a primeira a apreensão de como utilizar o

    XILINX e as suas capacidades mais úteis. A segunda nada mais era que, partindo do circuito tutorial previamente

    fornecido e testado, criar o nosso próprio circuito lógico através da linguagem VHDL.

    Respostas às Questões do Enunciado

    1. X1 X2 X3 Y

    0 0 0 0

    0 0 1 0

    0 1 0 1

    0 1 1 0

    1 0 0 0

    1 0 1 1

    1 1 0 1

    1 1 1 1

    2. A partir da análise da Tabela 1, e do logigrama do circuito, obteve-se a expressão mínima disjuntiva abaixo:

    Y = f(X1, X2, X3) = X1* X3 + X2 * 𝐗𝟑̅̅ ̅̅

    3. O circuito dado poderá ser substituído por um Multiplexer uma vez que é exatamente esse componente que a

    função que define o circuito descreve. Isto observa-se se considerarmos como bits de entrada os bits A3 (como o

    bit de escolha), A1 (quando A3=1 ⇒ Y=A1), e A2 (quando A3=0 ⇒ Y=A2).

    Tabela 1- Tabela de verdade do circuito “nand_logic”

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 3

    Tabela 2 – Valores apresentados no diagrama temporal do circuito

    Tabela 3 – Tabela de Verdade do circuito “unidade_aritmetica”,

    onde 𝑄0𝑡+1 = 𝑄0 + 𝑢𝑚 𝑓𝑙𝑎𝑛𝑐𝑜 𝑑𝑒 𝑟𝑒𝑙ó𝑔𝑖𝑜 𝑎𝑠𝑐𝑒𝑛𝑑𝑒𝑛𝑡𝑒 e

    𝑄1𝑡+1 = 𝑄1 + 𝑢𝑚 𝑓𝑙𝑎𝑛𝑐𝑜 𝑑𝑒 𝑟𝑒𝑙ó𝑔𝑖𝑜 𝑎𝑠𝑐𝑒𝑛𝑑𝑒𝑛𝑡𝑒

    Fig. 1 – Diagrama temporal obtido através do programa XILINX

    4. t/ns 000 100 200 300 400 500 600 700 800 900

    X1 0 0 0 0 0 1 1 1 1 0

    X2 0 0 0 1 1 0 0 1 1 0

    X3 0 0 1 0 1 0 1 0 1 0 Y 0 0 0 1 0 0 1 1 1 0

    Os valores das 3 entradas X e da saída Y, correspondem ao longo do tempo aos valores obtidos para Y na Tabela (de verdade) 1, comprovando-se assim que esta, e consequentemente a função apresentada em (2.) se encontram corretas.

    5. E 𝑸𝟎𝒕 𝑸𝟏𝒕 𝑸𝟎𝒕+𝟏 𝑸𝟏𝒕+𝟏 S

    0 0 0 0 0 0

    0 0 1 0 0 1

    0 1 0 1 1 1

    0 1 1 1 1 0

    1 0 0 1 0 0

    1 0 1 0 1 1

    1 1 0 1 0 1

    1 1 1 0 1 0

    Considerando Q0 a saída do FDR “da esquerda” e Q1 a saída do FDR “da direita” no logigrama do circuito

    “unidade_aritmetica” e sendo 𝑸𝑶𝒕 e 𝑸𝟏𝒕 os valores de Q0 e Q1 um flanco de relógio antes de 𝑸𝑶𝒕+𝟏 e 𝑸𝟏𝒕+𝟏 respetivamente, obtém-se a Tabela (de verdade) 3. Aqui Os valores tomados como iniciais para Q0, Q1 e E são os que dão entrada no circuito “nand_logic”. Sendo a saída destes a entrada dos Flip-Flops tipo D, cuja saída Q varia sempre que a entrada D varia (no flanco de relógio seguinte), a saída Q dos flip-flops mudará para o valor que saiu dos circuitos “nand_logic”. Assim sendo, serão estes valores que poderão ser encontrados nas saídas do circuito correspondentes a Q0 e Q1.

    S provém da ligação a uma porta XOR de 𝑸𝑶𝒕+𝟏 e 𝑸𝟏𝒕+𝟏. Como tal, S só fica ativa se 𝑸𝑶𝒕+𝟏 ≠ 𝑸𝟏𝒕+𝟏.

    6. É a presença da entrada E no circuito que possibilita uma alteração de estado dos Flip-Flops tipo D (ou seja, a

    variação das suas saídas Q):

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 4

    Quando E se altera de 0 para 1, é o FDR-0 (Q=Q1) a variar no flanco de relógio imediatamente seguinte (ou seja, é a saída Q0 que varia de valor).

    Quando E se altera de 1 para 0, é o FDR-1 (Q=Q1) a variar no flanco de relógio imediatamente seguinte (ou seja, é a saída Q1 que varia de valor).

    Estas variações devem-se à ligação de E, Q0 e Q1 às entradas X3, X2 e X3 (respetivamente) de ambos os circuitos “nand_logic” (denotar que num destes Q1 é negado, o que provoca uma ainda maior variação de valores). Partindo da Tabela (de verdade) 1, as saídas Y dos circuitos “nand_logic” correspondem às entradas D dos FDR, e como tal influenciam diretamente a variação dos valores de Q0 e Q1 (e também a saída S), ou seja, afetam diretamente o estado destes Flip-Flops.

    7.

    Através da observação do diagrama pode-se observar que este começa com a ativação momentânea do

    RESET, forçando tanto Q1 como Q0 a "0". No momento em que há um impulso do exterior que compele o bit E a ser ativado, em concordância com a

    Tabela 3, a entrada do Q0 é ativada também, ficando Q0 = "1", sendo que Q1 não é afetado por E=1. Quando E retorna a "0" os valores das entradas são novamente mudados, sendo desta vez o sinal de Q1

    ativado, e mantendo-se Q0 estável, pois E=0 não o influencia. Esta variação de Q1 e Q0 dependente de E=0 e E=1 respetivamente prolonga-se indefinidamente, sempre que há variação de E. Sendo S um OU-exclusivo das saídas Q1 e Q0, este é ativado sempre que Q0 ≠ Q1, ou seja, quando um está ativado e o outro não.

    8.

    Fig. 3 – Diagrama de

    estados do circuito

    “unidade_aritmetica”

    Fig. 2 – Diagrama

    temporal do circuito

    “unidade_aritmetica”

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 5

    9. Quando E passa a 1, no flanco de relógio ascendente imediatamente seguinte S fica com um valor igual a Q0.

    Quando E retorna a 0, no flanco de relógio ascendente imediatamente S fica com um valor igual ao de Q1. Estes valores correspondem aos apresentados na Tabela (de verdade) 3, onde efetivamente, dependendo do

    valor de E, S varia de acordo com 𝑸𝟏𝒕 e 𝑸𝟎𝒕 , não sendo influenciado pelo Q oposto.

    10. 1º Erro O código “is” estava em falta na linha onde se denomina a entidade do circuito na linha 30

    (“entity unidade_aritmetica (is)”) 2º Erro Sendo o componente “somador_4bits” um somador de 4 bits, a entrada “pre_soma_opa” estava

    definida apenas pelos bits “101”, na linha 81. Assim sendo, este foi por isso substituído por “0101” (pois o 0 não tem qualquer interferência no valor, que se mantém (5)10).

    3º Erro O componente “xor_3bits” referenciado no programa na linha 81, não se encontrava definido na arquitetura da entidade “unidade_aritmetica” sendo por isso necessário defini-lo. Na verdade, a descrição do programa já la e encontrava, estando, contudo, identificada como um comentário (escrita após dois hífens). Ao retirar os hífens, o programa passou a reconhecer o “xor_3bits”.

    4º Erro No final da descrição encontrada na linha 107 faltava um semi-colon ( ; - ponto e vírgula), tendo sido necessária a sua reposição.

    11. (Poderá encontrar o código da “unidade_aritmetica” sem erros no final do relatório)

    12.

    No logigrama representado na Fig. 4 encontra-se representada a divisão inteira de A e posterior soma a 5.

    Após isto é efetuado o complemento de B (ou seja, obtemos no final -B), que é depois somado com o resultado das duas operações anteriormente exercidas sobre A. Assim sendo:

    S = (𝐀 𝟐⁄ + 5) - B

    Fig. 4 – Logigrama do circuito

    “unidade_aritmetica”

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 6

    13. Cálculo de K0 (dígito menos significativo (base 4) do número de aluno de menor valor):

    O número de aluno de menor valor entre ambos é 83992. Assim sendo, o dígito menos significativo (base 4) corresponderá ao resto da divisão de 83992 por 4. 83992= 20998 * 4 + 0 → Sendo o resto da divisão zero, K0 = 0.

    Cálculo de K1 (dígito menos significativo (base 2) do número de aluno de maior valor): O número de aluno de maior valor entre ambos é 84157. Assim sendo, o dígito menos significativo (base 2) corresponderá ao resto da divisão de 84157 por 2. 84157= 42078 * 2 + 1 → Sendo o resto da divisão um, K1 = 1.

    Cálculo de c0 (K0mod3 + 1): Sendo c0 a soma de 1 ao resto da divisão de K0 por 3, e sendo K0 = 3 * 0 + 0, conclui-se que K0mod3 = 0. Assim sendo, c0 = 0 + 1 = 1.

    Cálculo de c1 ((−𝟏)𝑲𝟏): Sendo K1 = 1, (−1)1 = -1. Assim sendo c1 = -1.

    Cálculo de Z: Z = c0 * A + c1 * B Z = 1 * A + (-1) * B Ou seja, a função aritmética é dada por Z = A – B.

    14.

    15. (Poderá encontrar o código da nova “unidade_aritmetica” [A – B] no final do relatório)

    Fig. 5 – Logigrama do circuito

    “unidade_aritmetica” (modificado

    para corresponder à função Z = A – B)

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 7

    Fig. 6 – Diagrama temporal obtido através do programa XILINX da

    nova “unidade_aritmética” (A-B)

    Implementação do Circuito

    Inicialmente surgiam erros no circuito que não compreendíamos, e que nos impediam de fazer uma correta

    implementação deste. Nem mesmo o professor foi capaz de imediatamente esclarecer que problema poderia

    estar a ser criado, mas já depois da própria aula, uma análise mais aprofundada permitiu-nos corrigi-los,

    garantido uma implantação do circuito eficaz, onde erros como “0 – 0 =5” já não surgiam segundo o diagrama

    temporal do circuito.

    Para a montagem do circuito foram seguidas as instruções dadas no guia, garantindo assim que era realizada

    a operação Z = A - B, simplesmente alterando o valor de A para (0)10 = (000)2. Após isto, B foi ligado aos

    interruptores a si atribuídos, garantindo assim que, apresentando um dado valor para B, este seria subtraído a A.

    Isto já só foi feito na aula por necessidade de esclarecimento de certas dúvidas.

    Após o término deste planeamento, enviou-se o circuito para o computador existe na sala, que tinha conexão

    direta com a placa de prototipagem de VHCL “Basys”. Nesta o circuito foi estudado e verificado, após a ativação

    da placa através do programa Adept.

    Foi assim possível observar que os LEDs, correspondendo a um dado valor de B, coagiriam que caracteres

    apresentados no display a vermelho a mostrar à saída do circuito os valores correspondentes a um dado B, ou

    seja, os resultados da função Z = A – B, em numeração hexadecimal.

    Conclusão

    Este laboratório foi efetivamente mais complexo que qualquer um dos anteriores, e por isso mais difícil de

    concretizar. Dado isto, a sua preparação foi mais morosa, principalmente por ser necessária de conjugar com o

    teste teórico de Sistemas Digitais que também tivemos de enfrentar.

    Não conseguimos ser 100% bem-sucedidos na aula laboratorial, devido a erros que inicialmente nem o

    próprio professor conseguia corrigir, mas que, depois de analisarmos com tempo, foram reparados. Apesar disto

    o funcionamento da plataforma Basys ocorreu como pretendido, ainda que ao princípio fosse difícil compreender

    que informação esta nos estava a providenciar.

    Podemos concluir positivamente que no fim fomos bem-sucedidos no nosso laboratório, mesmo com a

    linguagem VHDL a não nos ser ainda muito acessível. Aguardamos agora as diretrizes do próximo laboratório, às

    quais pretendemos dedicar mais tempo anterior à aula laboratorial, para estarmos mais familiarizados com toda

    e qualquer pergunta que nos possa ser feita na aula e também com os programas utilizados.

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 8

    Código de “unidade_aritmetica” sem erros

    ----------------------------------------------------------------------------------

    -- Company:

    -- Engineer:

    --

    -- Create Date: 15:44:21 10/15/2015

    -- Design Name:

    -- Module Name: unidade_aritmetica - Behavioral

    -- Project Name:

    -- Target Devices:

    -- Tool versions:

    -- Description:

    --

    -- Dependencies:

    --

    -- Revision:

    -- Revision 0.01 - File Created

    -- Additional Comments:

    --

    ----------------------------------------------------------------------------------

    library IEEE;

    use IEEE.STD_LOGIC_1164.ALL;

    use IEEE.STD_LOGIC_ARITH.ALL;

    use IEEE.STD_LOGIC_UNSIGNED.ALL;

    ---- Uncomment the following library declaration if instantiating

    ---- any Xilinx primitives in this code.

    --library UNISIM;

    --use UNISIM.VComponents.all;

    entity unidade_aritmetica is

    port

    (

    -- A e B são dois operandos sem sinal

    A : in std_logic_vector(2 downto 0);

    B : in std_logic_vector(2 downto 0);

    Y : out std_logic_vector(7 downto 0)

    );

    end unidade_aritmetica;

    architecture Behavioral of unidade_aritmetica is

    COMPONENT xor_3bits

    PORT(

    A : IN std_logic_vector(2 downto 0);

    B : IN std_logic_vector(2 downto 0);

    Y : OUT std_logic_vector(2 downto 0)

    );

    END COMPONENT;

    COMPONENT somador_4bits

    PORT(

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 9

    A : IN std_logic_vector(3 downto 0);

    B : IN std_logic_vector(3 downto 0);

    CIN : IN std_logic;

    S : OUT std_logic_vector(3 downto 0);

    COUT : OUT std_logic

    );

    END COMPONENT;

    signal n_b : std_logic_vector(2 downto 0);

    signal sh_a : std_logic_vector(3 downto 0);

    signal pre_soma_opa, pre_soma_opb : std_logic_vector(3 downto 0);

    signal pre_soma_res : std_logic_vector(4 downto 0);

    signal carry : std_logic;

    signal soma_opa, soma_opb : std_logic_vector(7 downto 0);

    signal soma_res : std_logic_vector(7 downto 0);

    begin

    ----

    sh_a '0',

    S => pre_soma_res(3 downto 0),

    COUT => pre_soma_res(4)

    );

    --------------------------------------------------------------------------

    -- 3 bits XOR gate

    --------------------------------------------------------------------------

    ----

    Inst_xor_3bits: xor_3bits PORT MAP(

    A => B,

    B => "111",

    Y => n_b

    );

    ---------------------------------------------------------------------------

    -- Operacao aritmetica sobre operandos A e B com sinal

    ---------------------------------------------------------------------------

    ----

    soma_opa

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 10

    ----

    low_somador_4bits: somador_4bits PORT MAP(

    A => soma_opa(3 downto 0),

    B => soma_opb(3 downto 0),

    CIN => '1',

    S => soma_res(3 downto 0),

    COUT => carry

    );

    high_somador_4bits: somador_4bits PORT MAP(

    A => soma_opa(7 downto 4),

    B => soma_opb(7 downto 4),

    CIN => carry,

    S => soma_res(7 downto 4),

    COUT => open

    );

    ---------------------------------------------------------------------------

    -- Saida

    ---------------------------------------------------------------------------

    Y

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 11

    ---- Uncomment the following library declaration if instantiating

    ---- any Xilinx primitives in this code.

    --library UNISIM;

    --use UNISIM.VComponents.all;

    entity unidade_aritmetica is

    port

    (

    -- A e B são dois operandos sem sinal

    A : in std_logic_vector(2 downto 0);

    B : in std_logic_vector(2 downto 0);

    Y : out std_logic_vector(7 downto 0)

    );

    end unidade_aritmetica;

    architecture Behavioral of unidade_aritmetica is

    COMPONENT xor_3bits

    PORT(

    A : IN std_logic_vector(2 downto 0);

    B : IN std_logic_vector(2 downto 0);

    Y : OUT std_logic_vector(2 downto 0)

    );

    END COMPONENT;

    COMPONENT somador_4bits

    PORT(

    A : IN std_logic_vector(3 downto 0);

    B : IN std_logic_vector(3 downto 0);

    CIN : IN std_logic;

    S : OUT std_logic_vector(3 downto 0);

    COUT : OUT std_logic

    );

    END COMPONENT;

    signal n_b : std_logic_vector(2 downto 0);

    signal sh_a : std_logic_vector(3 downto 0);

    signal pre_soma_opa, pre_soma_opb : std_logic_vector(3 downto 0);

    signal pre_soma_res : std_logic_vector(4 downto 0);

    signal carry : std_logic;

    signal soma_opa, soma_opb : std_logic_vector(7 downto 0);

    signal soma_res : std_logic_vector(7 downto 0);

    begin

    ----

    sh_a B,

    B => "111",

    Y => n_b

    );

  • SISTEMAS DIGITAIS 2015-2016, MEEC

    Página | 12

    --