Upload
internet
View
141
Download
10
Embed Size (px)
Citation preview
VHDL
VHSIC Hardware Description Language
Very High Speed Integrated Circuits
VHDL-87 VHDL-93
reg4
d0
d1
d2
d3
en
clk
s0
s1
s2
s3
entity reg4 is port (d0, d1, d2, d3, en, clk : in bit; s0, s1, s2, s3 : out bit );end entity reg4;
entidade
portas de entrada
portas desaída
declaraçãoda entidade
A descrição da implementação interna duma entidade chama-se corpo arquitectural.
Uma entidade pode ter vários corpos arquitecturais que correspondem às implementação alternativas.
Corpo arquitectural
comportamental
descreve o funcionamento de um modo abstracto; só
inclui atribuições de sinais concorrentes e
processos que especificam acções
sequenciais a executar.
estrutural
descreve que subsistemas compõem a entidade e como estes são interligados.
misto
algumas partes da entidade são descritas como comportamentais enquanto outras são descritas de modo estrutural.
Descrição comportamental
architecture Behavioral of reg4 is
begin
process (d0, d1, d2, d3, en, clk) is begin
if en = '1' and clk = '1' then s0 <= d0; s1 <= d1; s2 <= d2; s3 <= d3;
end if;
end process;
end Behavioral;
Descrição estruturalbit0
s0slatch
d
clk
d0
bit1
s1slatch
d
clk
d1
bit2
s2slatch
d
clk
d2
bit3
s3slatch
d
clk
d3
gate
zand2_gate
x
y
en
clk
Descrição estrutural entity latch is port ( d, clk : in bit; s : out bit);end latch;
architecture beh of latch isbegin latch_beh: process (clk, d) is begin if clk = '1' then
s <= d; end if; end process latch_beh;end beh;
entity and2_gate is Port ( x, y : in bit; z : out bit);end and2_gate;
architecture beh of and2_gate isbegin z <= x and y;end beh;
bit0
s0slatch
d
clk
d0
bit1
s1slatch
d
clk
d1
bit2
s2slatch
d
clk
d2
bit3
s3slatch
d
clk
d3
zx
y
en
clk and2_gate
Descrição estrutural entity latch is port ( d, clk : in bit; s : out bit);end latch;
architecture beh of latch isbeginprocess (clk, d) is begin if clk = '1' then
s <= d; end if;end process;end beh;
entity and2_gate is Port ( x, y : in bit; z : out bit);end and2_gate;
architecture beh of and2_gate isbegin z <= x and y;end beh;
bit0
s0slatch
d
clk
d0
bit1
s1slatch
d
clk
d1
bit2
s2slatch
d
clk
d2
bit3
s3slatch
d
clk
d3
zx
y
en
clk and2_gate
entity reg4 is Port ( d0, d1, d2, d3, en, clk : in bit; s0, s1, s2, s3 : out bit);end reg4;
architecture estrutural of reg4 is signal int_clk : bit;
begin bit0: entity work.latch(beh) port map (d0, int_clk, s0); bit1: entity work.latch(beh) port map (d1, int_clk, s1); bit2: entity work.latch(beh) port map (d2, int_clk, s2); bit3: entity work.latch(beh) port map (d3, int_clk, s3);
gate: entity work.and2_gate(beh) port map (en, clk, int_clk);end estrutural;
instâncias de componentes
int_
clk
library IEEE;use IEEE.std_logic_1164.all;
entity design_module_ent is port ( input1,input2,input3,input4 : in STD_LOGIC; output1,output2,output3: out STD_LOGIC );end design_module_ent;
architecture design_module_ent_arch of design_module_ent is
component and_entport (
input1,input2 : in STD_LOGIC; output1: out STD_LOGIC
);end component;
beginlogic_AND_1 : and_ent PORT MAP (input1,input2,output1);logic_AND_2 : and_ent PORT MAP (input2,input3,output2);logic_AND_3 : and_ent PORT MAP (input3,input4,output3);
end design_module_ent_arch;
library IEEE;use IEEE.std_logic_1164.all;
entity design_module_ent is port ( input1,input2,input3,input4 : in STD_LOGIC; output1,output2,output3: out STD_LOGIC );end design_module_ent;
architecture design_module_ent_arch of design_module_ent is
component and_entport (
input1,input2 : in STD_LOGIC; output1: out STD_LOGIC
);end component;
beginlogic_AND_1 : and_ent PORT MAP (input1,input2,output1);logic_AND_2 : and_ent PORT MAP (input2,input3,output2);logic_AND_3 : and_ent PORT MAP (input3,input4,output3);
end design_module_ent_arch;
output1
output2
output3
input1input2
input3
input4
library IEEE;
use IEEE.std_logic_1164.all;
entity adder1 is
port (
A: in STD_LOGIC;
B: in STD_LOGIC;
SUM: out STD_LOGIC;
CARRY: out STD_LOGIC
);
end adder1;
architecture adder1_arch of adder1 is
begin
-- <<enter your statements here>>
SUM <= A xor B;
CARRY <= A and B;
end adder1_arch;
A
B
SUM
CARRY
library IEEE;use IEEE.std_logic_1164.all;
entity adder1 is port ( A: in STD_LOGIC; B: in STD_LOGIC; SUM: out STD_LOGIC; CARRY: out STD_LOGIC );end adder1;
architecture adder1_arch of adder1 isbegin -- <<enter your statements here>> SUM <= A xor B; CARRY <= A and B;end adder1_arch;
library IEEE;use IEEE.std_logic_1164.all;
entity ORGATE is port ( A: in STD_LOGIC; B: in STD_LOGIC; Z: out STD_LOGIC );end ORGATE;
architecture ORGATE_arch of ORGATE isbegin -- <<enter your statements here>> Z <= A or B;end ORGATE_arch;
entity FULLADD isport (A, B, CIN : in bit; SUM, CARRY : out bit);end FULLADD;
architecture STRUCT of FULLADD is signal I1, I2, I3 : bit; component adder1 port(A,B : in bit; SUM, CARRY : out bit); end component; component ORGATE port(A,B : in bit; Z : out bit); end component;begin u1:adder1 port map(A,B,I1,I2); u2:adder1 port map(I1,CIN,SUM,I3); u3:ORGATE port map(I2,I3,CARRY);end STRUCT;
ZOR
entity FULLADD isport (A, B, CIN : in bit; SUM, CARRY : out bit);end FULLADD;
architecture STRUCT of FULLADD is signal I1, I2, I3 : bit; component adder1 port(A,B : in bit; SUM, CARRY : out bit); end component; component ORGATE port(A,B : in bit; Z : out bit); end component;begin u1:adder1 port map(A,B,I1,I2); u2:adder1 port map(I1,CIN,SUM,I3); u3:ORGATE port map(I2,I3,CARRY);end STRUCT;
A (A)
B (B)
SUM (I1)
CARRY (I2)
A (I1)
B (CIN)
SUM
(SUM)
CARRY (I3)
ORI2
I3 CARRY(CARRY)
A
B
CIN
CARRY
SUM
LED1
LED2
LED3LED4
SW1
SW2
SW3
entity LCD_struc is
Port ( switchers : in std_logic_vector(2 downto 0);
LEDs : out std_logic_vector(3 downto 0);
clk48 : in std_logic;
rst : in std_logic);
end LCD_struc;
architecture Behavioral of LCD_struc is
component LED_SW
PORT (CLK,RESET,SW1,SW2,SW3: IN std_logic;
LED1,LED2,LED3,LED4 : OUT std_logic);
end component;
component Divider
Port ( clk48 : in std_logic;
rst : in std_logic;
loc_clk : out std_logic);
end component;
signal internal_clock : STD_LOGIC;
begin
FSM : Divider port map(clk48,rst,internal_clock);
led_control : LED_SW port map(internal_clock,rst,switchers(2),switchers(1),switchers(0),
LEDs(0),LEDs(1),LEDs(2),LEDs(3));
end Behavioral;
switchers(2)switchers(1)switchers(0)
Divider
LED_SW
clk48rst loc_clk
internal_clock
CLKRESETSW1SW2SW3
LED1 LED2 LED3 LED4
LEDs(0) LEDs(1) LEDs(2) LEDs(3)
LE
Ds
: ou
t st
d_l
ogic
_vec
tor(
3 do
wnt
o 0)
;
48 MHz
1 Hz
rst
S3
S2S1
L1 L2 L3 L4
LCD_struc
switchers : in std_logic_vector(2 downto 0);
entity LCD_struc is
Port ( switchers : in std_logic_vector(2 downto 0);
LEDs : out std_logic_vector(3 downto 0);
clk48 : in std_logic;
rst : in std_logic);
end LCD_struc;
architecture Behavioral of LCD_struc is
component LED_SW
PORT (CLK,RESET,SW1,SW2,SW3: IN std_logic;
LED1,LED2,LED3,LED4 : OUT std_logic);
end component;
component Divider
Port ( clk48 : in std_logic;
rst : in std_logic;
loc_clk : out std_logic);
end component;
signal internal_clock : STD_LOGIC;
begin
FSM : Divider port map(clk48,rst,internal_clock);
led_control : LED_SW port map(internal_clock,rst,switchers(2),switchers(1),switchers(0),
LEDs(0),LEDs(1),LEDs(2),LEDs(3));
end Behavioral;
connection
switchers(2)switchers(1)switchers(0)
Divider
LED_SW
clk48rst loc_clk
internal_clock
CLKRESETSW1SW2SW3
LED1 LED2 LED3 LED4
LEDs(0) LEDs(1) LEDs(2) LEDs(3)
LE
Ds
: ou
t st
d_l
ogic
_vec
tor(
3 do
wnt
o 0)
;
48 MHz
1 Hz
rst
S3
S2S1
L1 L2 L3 L4
LCD_struc
switchers : in std_logic_vector(2 downto 0);
entity
VHDL
architecture
entity my_gate is port ( x1: in STD_LOGIC; x2: in STD_LOGIC; x3: in STD_LOGIC; y: out STD_LOGIC );
architecture my_gate_arch of my_gate isbegin -- <<enter your statements here>> y <= not (x1 and x2 and x3);end my_gate_arch;
STD_LOGIC
1) '1' - logical 12) '0' - logical 03) 'H' – weak 14) 'L' – weak 05) 'X' – unknown6) 'U' – uninitialized7) 'Z' – high impedance8) '-' – don't care9) 'W' – weak unknown