Códigos VHDL para uso nas Aulas 2011-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Descrição do hardware de uma porta E

entity PortaE is
	port
	(
		-- Input ports
		A,B	: in  bit;
		-- Output ports
		C	: out bit
	);
end entity PortaE;
architecture v1 of PortaE is


begin
 C <= A and B;
end architecture v1;

Descrição do hardware de um Latch tipo D

O circuito descrito é ativo a entrada alto a entrada EN e ativo ao reset baixo RST

library IEEE;
use IEEE.std_logic_1164.all;

entity LAD is
        port(
              D, EN, RST: in std_logic;
              Q: out std_logic
             );
end entity LAD;  
                                                   
architecture v1 of LAD is
                                                                   
begin
                                                                     
process (D,EN,RST)
begin
        if (RST = '0') then
                Q <= '0';       -- reset ocorre quando RST=0
        elsif (EN = '1') then
                Q <= D;         -- O valor de D passa para Q quando EN=1
        -- note que a falta do uso de um else indica que nada deve ser feito caso contrário, 
        -- portanto o valor anterior de D permanece inalterado -> armazenamento (storage state)
        end if; 
end process;

end architecture v1;

LATCHD.png

Descrição do hardware de um registrador com 4 Latch tipo D

O circuito descrito é ativo a entrada alto a entrada EN e ativo ao reset baixo RST

library IEEE; 
use IEEE.std_logic_1164.all; 

entity REGD4 is 
 port(
      EN, RST: in std_logic; 
      D: in std_logic_vector (3 downto 0); 
      Q: out std_logic_vector (3 downto 0)
      ); 
end entity REG; 

architecture v1 of REGD4 is 

begin 

process (D,EN,RST) 
begin 
   if (RST = '0') then 
      Q <= "0000";  -- reset ocorre quando RST=0 
   elsif (EN = '1') then 
      Q <= D;  -- O valor de D passa para Q quando EN=1 
   end if   
end process; 

end architecture v1;

REGD4-RTL.png REG4 SIM.png

Descrição do hardware de um registrador com N Latch tipo D

O circuito descrito é ativo a entrada alto a entrada EN e ativo ao reset baixo RST Note neste exemplo o poder do VHDL de parametrizar o tamanho do registrador através do generic

library IEEE; 
use IEEE.std_logic_1164.all; 

entity REGDN is 
 generic (N: integer := 4) 
 port(EN, RST: in std_logic; 
  D: in std_logic_vector (N-1 downto 0); 
  Q: out std_logic_vector (N-1 downto 0)); 
end entity REGDN ; 

architecture v2 of REGDN is 
begin 
process (D,EN,RST) 
begin 
 if (RST = '0') then 
  Q <= (others =>  '0'); -- reset todos os bits Q quando RST=0 
 elsif (EN = '1') then 
  Q <= D;  -- passa todos os valores de D para as saídas Q correspondentes
 end if;    
end process; 
end architecture v2;

Descrição do hardware de um Flip Flop tipo D

O circuito descrito é ativo a entrada de clk sensível a borda de subida

---------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------
ENTITY DFF IS
PORT 
   ( 
   d, clk, rst: IN STD_LOGIC;
   q: OUT STD_LOGIC
	);
END DFF;
---------------------------------------
ARCHITECTURE behavior OF DFF IS

BEGIN
PROCESS (rst, clk)
BEGIN
    IF (rst='1') THEN  
	    q <= '0';
    ELSIF (clk'EVENT AND clk='1') THEN
       q <= d;
    END IF;

END PROCESS;
END behavior;
---------------------------------------


Implementação de uma lógica combinacional And + Ou + Inversor (Direta)

library ieee; use ieee.std_logic_1164.all;

entity AOI is port ( A,B, C, D : in std_logic; F : out std_logic ); end AOI;

architecture v1 of AOI is begin F <= not((A and B) or (C and D)); end v1;

</syntaxhighlight>

AOIv1.png

architecture v2 of AOI is

  signal I1, I2, I3 : std_logic;

begin

  I1 <= A and B;
  I2 <= C and D;
  I3 <= I1 or I2;
  F <= not I3;

end v2; </syntaxhighlight>

Problema 2.1: Multiplexer

Faça um multiplexador que selecione a entrada A para sel ='01', B para sel ='10', coloque '0...0' na saída para sel ='00'e mantenha a saída em alta impedância "Z...Z" quando sel='11'.



LIBRARY ieee; USE _________________________ ;


ENTITY mux IS PORT ( __ , __ : ___ STD_LOGIC_VECTOR (7 DOWNTO 0); sel : IN ____________________________ ; ___ : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END _____ ;


ARCHITECTURE example OF _____ IS BEGIN PROCESS (a, b, ____ ) BEGIN IF (sel = "00") THEN c <= "00000000"; ELSIF (__________) THEN c <= a; _____ (sel = "10") THEN c <= __; ELSE c <= (OTHERS => '__'); END ___ ; END _________ ; END _________ ;


</syntaxhighlight>


Problema 4.1: Decodificador Genérico - ativo baixo

Faça um circuito que tenha duas entradas, sel (m bits) e ena (um bit), e uma saída x (n bits). Considere que n é potência binaria de dois, e m = log2 n. Se ena = '0', então todos os bits de x devem assumir o valor alto; caso contrário (ena = '1'), o bit correspondente ao valor indicado por sel deve ser '0' enquanto que os demais bits permanecem em '1'. Use o código abaixo como base para a generalização.


LIBRARY ieee; USE ieee.std_logic_1164.all;


ENTITY decoder IS PORT ( ena : IN STD_LOGIC; sel : IN STD_LOGIC_VECTOR (2 DOWNTO 0); x : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END decoder;


ARCHITECTURE generic_decoder OF decoder IS BEGIN PROCESS (ena, sel) VARIABLE temp1 : STD_LOGIC_VECTOR (x'HIGH DOWNTO 0); VARIABLE temp2 : INTEGER RANGE 0 TO x'HIGH; BEGIN temp1 := (OTHERS => '1'); temp2 := 0; IF (ena='1') THEN FOR i IN sel'RANGE LOOP -- sel range is 2 downto 0 IF (sel(i)='1') THEN -- Bin-to-Integer conversion temp2:=2*temp2+1; ELSE temp2 := 2*temp2; END IF; END LOOP; temp1(temp2):='0'; END IF; x <= temp1; END PROCESS; END generic_decoder;


</syntaxhighlight>