Implemente o Circuito Lógico Detector de Igualdade do Ex. 2 com um MUX 8x1. Apresente a descrição VHDL.
Passo 1
O enunciado pede para implementar um detector de igualdade de dois vetores de 3 bits (Ex. 2) usando um MUX 8×1 e gerar a descrição em VHDL.
Passo 2
O detector de igualdade 3-bit deve produzir ‘1’ se e somente se A = B. A ideia é usar o vetor A(2 downto 0) como linhas de seleção do MUX e programar cada entrada D0…D7 para valer ‘1’ apenas quando o índice da entrada coincidir com o valor de B(2 downto 0).
Primeiro, definimos o componente do MUX 8×1. Ele tem oito entradas de dados D0…D7, três linhas de seleção S(2 downto 0) e uma saída Y.
Em seguida, escrevemos a arquitetura do MUX usando um ‘with … select’, mapeando cada combinação de S para a respectiva entrada Di.
Depois, criamos o entity do detector de igualdade com portas A, B (cada uma std_logic_vector(2 downto 0)) e saída Y (std_logic).
Por fim, na arquitetura do detector, instanciamos o MUX e conectamos D0…D7 a expressões booleanas de B: cada Di = ‘1’ quando B = i, ou seja, combinamos B(2), B(1), B(0) (ou seus inversos) para gerar cada Di.
Primeiro, definimos o componente do MUX 8×1. Ele tem oito entradas de dados D0…D7, três linhas de seleção S(2 downto 0) e uma saída Y.
Em seguida, escrevemos a arquitetura do MUX usando um ‘with … select’, mapeando cada combinação de S para a respectiva entrada Di.
Depois, criamos o entity do detector de igualdade com portas A, B (cada uma std_logic_vector(2 downto 0)) e saída Y (std_logic).
Por fim, na arquitetura do detector, instanciamos o MUX e conectamos D0…D7 a expressões booleanas de B: cada Di = ‘1’ quando B = i, ou seja, combinamos B(2), B(1), B(0) (ou seus inversos) para gerar cada Di.
Passo 3
O resultado final é o código VHDL completo com o componente MUX8to1 e a instância no detector de igualdade. A abordagem garante que, quando A coincide com B, o MUX seleciona a entrada Di = ‘1’ e, caso contrário, seleciona sempre ‘0’.
Resposta
– Definição do MUX 8×1
library ieee;
use ieee.std_logic_1164.all;
library ieee;
use ieee.std_logic_1164.all;
entity MUX8to1 is
port(
D0, D1, D2, D3, D4, D5, D6, D7 : in std_logic;
S : in std_logic_vector(2 downto 0);
Y : out std_logic
);
end entity;
port(
D0, D1, D2, D3, D4, D5, D6, D7 : in std_logic;
S : in std_logic_vector(2 downto 0);
Y : out std_logic
);
end entity;
architecture Behavioral of MUX8to1 is
begin
with S select
Y <= D0 when “000”,
D1 when “001”,
D2 when “010”,
D3 when “011”,
D4 when “100”,
D5 when “101”,
D6 when “110”,
D7 when “111”,
‘0’ when others; – caso não ocorra (segurança)
end architecture;
begin
with S select
Y <= D0 when “000”,
D1 when “001”,
D2 when “010”,
D3 when “011”,
D4 when “100”,
D5 when “101”,
D6 when “110”,
D7 when “111”,
‘0’ when others; – caso não ocorra (segurança)
end architecture;
– Detector de Igualdade 3 bits usando o MUX 8×1
entity EqualityDetector3bit is
port(
A : in std_logic_vector(2 downto 0);
B : in std_logic_vector(2 downto 0);
Y : out std_logic
);
end entity;
entity EqualityDetector3bit is
port(
A : in std_logic_vector(2 downto 0);
B : in std_logic_vector(2 downto 0);
Y : out std_logic
);
end entity;
architecture Structural of EqualityDetector3bit is
signal D : std_logic_vector(7 downto 0);
begin
– Gerar cada D[i] = ‘1’ se B = i
D(0) <= not B(2) and not B(1) and not B(0);
D(1) <= not B(2) and not B(1) and B(0);
D(2) <= not B(2) and B(1) and not B(0);
D(3) <= not B(2) and B(1) and B(0);
D(4) <= B(2) and not B(1) and not B(0);
D(5) <= B(2) and not B(1) and B(0);
D(6) <= B(2) and B(1) and not B(0);
D(7) <= B(2) and B(1) and B(0);
signal D : std_logic_vector(7 downto 0);
begin
– Gerar cada D[i] = ‘1’ se B = i
D(0) <= not B(2) and not B(1) and not B(0);
D(1) <= not B(2) and not B(1) and B(0);
D(2) <= not B(2) and B(1) and not B(0);
D(3) <= not B(2) and B(1) and B(0);
D(4) <= B(2) and not B(1) and not B(0);
D(5) <= B(2) and not B(1) and B(0);
D(6) <= B(2) and B(1) and not B(0);
D(7) <= B(2) and B(1) and B(0);
M1: entity work.MUX8to1(Behavioral)
port map(
D0 => D(0),
D1 => D(1),
D2 => D(2),
D3 => D(3),
D4 => D(4),
D5 => D(5),
D6 => D(6),
D7 => D(7),
S => A,
Y => Y
);
end architecture;