Professional Documents
Culture Documents
1. Cổng logic
-------------------------------------main circuit------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity bai11 is
Port ( InA : in STD_LOGIC;
InB : in STD_LOGIC;
InC : in STD_LOGIC;
InD : in STD_LOGIC;
OutF : out STD_LOGIC);
end bai11;
end Behavioral;
----------------------------------------------------------------------------------------
--------------------------------------Testbench-----------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE behavior OF tb IS
COMPONENT bai11
PORT(
InA : IN std_logic;
InB : IN std_logic;
InC : IN std_logic;
InD : IN std_logic;
OutF : OUT std_logic
);
END COMPONENT;
--Inputs
signal InA : std_logic := '0';
signal InB : std_logic := '0';
signal InC : std_logic := '0';
signal InD : std_logic := '0';
--Outputs
signal OutF : std_logic;
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
BEGIN
begin
InA <= '0';
InB <= '0';
InC <= '0';
InD <= '0';
wait for 20 ns;
InA<= '0';
InB <= '1';
InC <= '1';
InD <= '0';
wait for 20 ns;
InA <= '1';
InB <= '0';
InC <= '1';
InD <= '1';
wait for 10 ns;
InA <= '1';
InB <= '1';
InC <= '0';
InD <= '1';
wait for 20 ns;
InA <= '1';
InB <= '1';
InC <= '1';
InD <= '1';
wait for 20 ns;
end process;
END;
2.Mạch cộng
a. Mạch bán tổng
-----------------------------main circuit--------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity H_Adder is
Port(
a,b: in std_logic;
sum, carry: out std_logic
);
end H_Adder;
-----------------------------TestBench-------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity tb is
-- Port ( );
end tb;
architecture Behavioral_tb of tb is
component H_Adder port(
a,b: in std_logic;
sum, carry: out std_logic
);
end component;
signal a, b, sum, carry: std_logic;
begin
uut: H_Adder
port map( a => a, b => b, sum => sum, carry => carry );
process
begin
a <= '0';
b <= '0';
wait for 20 ns;
a <= '0';
b <= '1';
wait for 30 ns;
a <= '1';
b <= '0';
wait for 10 ns;
a <= '1';
b <= '1';
wait for 15 ns;
end process;
end Behavioral_tb;
Mạch toàn tổng
Xây dựng trực tiếp
-----------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity F_Adder is
Port(
a,b,cin: in std_logic;
sum, cout: out std_logic
);
end F_Adder;
-----------------------------TestBench-------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT F_Adder
PORT(
a : IN std_logic;
b : IN std_logic;
cin : IN std_logic;
sum : OUT std_logic;
cout : OUT std_logic
);
END COMPONENT;
process
begin
a <= '0';
b <= '0';
cin <= '0';
wait for 20 ns;
a <= '0';
b <= '1';
cin<= '1';
wait for 30 ns;
a <= '1';
b <= '0';
cin <= '0';
wait for 10 ns;
a <= '1';
b <= '1';
cin <= '1';
wait for 15 ns;
end process;
end Behavioral_tb;
Xây dựng dựa trên các bộ bán tổng sử dụng 2 Process
------------------------------2 process----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity F_Adder is
port (
A, B, Cin : in std_logic;
Sum, Cout : out std_logic
);
end F_Adder;
---------------------------------------------TestBench---------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT F_Adder
PORT(
A : IN std_logic;
B : IN std_logic;
Cin : IN std_logic;
Sum : OUT std_logic;
Cout : OUT std_logic
);
END COMPONENT;
BEGIN
uut: F_Adder PORT MAP (
A => A,
B => B,
Cin => Cin,
Sum => Sum,
Cout => Cout
);
process
begin
a <= '0';
b <= '0';
cin <= '0';
wait for 20 ns;
a <= '0';
b <= '1';
cin <= '1';
wait for 30 ns;
a <= '1';
b <= '0';
cin <= '0';
wait for 10 ns;
a <= '1';
b<= '1';
cin <= '1';
wait for 15 ns;
end process;
end Behavioral_tb;
---------------------------------------------------------------------------------------
Xây dựng sử dụng Component
---------------------------Component----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity half_adder is
port(x,y: in std_logic;
sum, carry: out std_logic
);
end half_adder;
-----------------------------------main circuit----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity full_adder is
Port (a,b,cin: in std_logic;
sum, cout: out std_logic
);
end full_adder;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT full_adder
PORT(
a : IN std_logic;
b : IN std_logic;
cin : IN std_logic;
sum : OUT std_logic;
cout : OUT std_logic
);
END COMPONENT;
signal a, b, cin, sum, cout: std_logic;
BEGIN
process
begin
a <= '0';
b <= '0';
cin <= '0';
wait for 20 ns;
a <= '0';
b <= '1';
cin <= '1';
wait for 20 ns;
a <= '1';
b <= '0';
cin <= '1';
wait for 10 ns;
a <= '1';
b <= '1';
cin <= '0';
wait for 20 ns;
a <= '1';
b <= '1';
cin <= '1';
wait for 20 ns;
end process;
end Behavioral_tb;
3. Mạch giải mã địa chỉ, phân kênh, ghép kênh.
c.Mạch giải mã địa chỉ
Cấu trúc when/else
--------------------------------------------when/else----------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity giaima3to8 is
Port(
input: in std_logic_vector(2 downto 0);
output: out std_logic_vector(7 downto 0)
);
end giaima3to8;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT giaima3to8
PORT(
input : IN std_logic_vector(2 downto 0);
output : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
signal input : std_logic_vector (2 downto 0);
signal output : std_logic_vector(7 downto 0) ;
BEGIN
process
begin
input <= "000";
wait for 5 ns;
input<= "001";
wait for 20 ns;
input <= "010";
wait for 10 ns;
input <= "011";
wait for 15 ns;
input <= "100";
wait for 20 ns;
input <= "101";
wait for 20 ns;
input <= "110";
wait for 20 ns;
input <= "111";
wait for 20 ns;
end process;
end Behavioral_tb;
-----------------------------------------------------------------------------------------
Cấu trúc with/select/when
--------------------------------------with/select/when-----------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity giaima3to8 is
Port(
input: in std_logic_vector(2 downto 0);
output: out std_logic_vector(7 downto 0)
);
end giaima3to8;
-----------------------------------------------------------------------------------------
Sử dụng Process
----------------------------------------Process--------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity giaima3to8 is
Port(
input: in std_logic_vector(2 downto 0);
output: out std_logic_vector(7 downto 0)
);
end giaima3to8;
entity bai3x4 is
Port(
input: in std_logic;
sel: in std_logic_vector(2 downto 0);
output: out std_logic_vector(7 downto 0)
);
end bai3x4;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT bai3x4
PORT(
input : IN std_logic;
sel : IN std_logic_vector(2 downto 0);
output : OUT std_logic_vector(7 downto 0)
);
END COMPONENT;
BEGIN
entity bai3x5 is
Port(
output: out std_logic_vector(7 downto 0);
a,b,c: in std_logic;
input: in std_logic
);
end bai3x5;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT bai3x5
PORT(
output : OUT std_logic_vector(7 downto 0);
a : IN std_logic;
b : IN std_logic;
c : IN std_logic;
input : IN std_logic
);
END COMPONENT;
process
begin
input <= '1';
a <= '0';
b <= '0';
c <= '0';
wait for 5 ns;
input <= '1';
a <= '1';
b <= '0';
c <= '0';
wait for 20 ns;
input<= '1';
a <= '1';
b <= '1';
c <= '0';
wait for 10 ns;
input <= '1';
a <= '1';
b <= '1';
c <= '1';
wait for 15 ns;
end process;
end Behavioral_tb;
Ghép kênh 8 đầu vào 1 đầu ra
Dựa trên mạch giải mã 8:3
-------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity 8to1 is
Port(
output: out std_logic;
sel: in std_logic_vector(2 downto 0);
input: in std_logic_vector(7 downto 0)
);
end 8to1;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT bai3x6
PORT(
output : OUT std_logic;
sel : IN std_logic_vector(2 downto 0);
input : IN std_logic_vector(7 downto 0)
);
END COMPONENT;
process
begin
input <= "11111111";
sel <= "000";
wait for 5 ns;
input <= "11111111";
sel <= "001";
wait for 20 ns;
input <= "11111111";
sel <= "010";
wait for 10 ns;
input <= "11111111";
sel <= "011";
wait for 15 ns;
input <= "11111111";
sel <= "100";
wait for 15 ns;
input <= "11111111";
sel <= "101";
wait for 15 ns;
input <= "11111111";
sel <= "110";
wait for 15 ns;
input <= "11111111";
sel <= "111";
wait for 15 ns;
end process;
end Behavioral_tb;
entity 8to1 is
Port(
output: out std_logic;
a,b,c: in std_logic;
input: in std_logic_vector(7 downto 0)
);
end 8to1;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT bai3x7
PORT(
output : OUT std_logic;
a : IN std_logic;
b : IN std_logic;
c : IN std_logic;
input : IN std_logic_vector(7 downto 0)
);
END COMPONENT;
--Inputs
signal a : std_logic ;
signal b : std_logic ;
signal c : std_logic ;
signal input : std_logic_vector(7 downto 0) ;
--Outputs
signal output : std_logic;
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
BEGIN
process
begin
a <= '0';
b <= '0';
c <= '0';
input <= "11111111";
wait for 20 ns;
a <= '0';
b <= '0';
c <= '1';
input <= "11111111";
wait for 20 ns;
a <= '0';
b <= '1';
c <= '0';
input <= "11111111";
wait for 20 ns;
a <= '0';
b <= '1';
c <= '1';
input <= "11111111";
wait for 20 ns;
a <= '1';
b <= '0';
c <= '0';
input <= "11111111";
wait for 20 ns;
a <= '1';
b <= '0';
c <= '1';
input <= "11111111";
wait for 20 ns;
a <= '1';
b <= '1';
c <= '0';
input <= "11111111";
wait for 20 ns;
a <= '1';
b <= '1';
c <= '1';
input <= "11111111";
wait for 20 ns;
end process;
END;
entity btoled is
Port(
output: out std_logic_vector(7 downto 0);
input: in std_logic_vector(3 downto 0)
);
end btoled;
----------------------------------------testbench------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT btoled
PORT(
output : OUT std_logic_vector(7 downto 0);
input : IN std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal input : std_logic_vector(3 downto 0) := (others => '0');
--Outputs
signal output : std_logic_vector(7 downto 0);
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
BEGIN
entity BtoG is
Port(
output: out std_logic_vector(3 downto 0);
input: in std_logic_vector(3 downto 0)
);
end BtoG;
----------------------------------------testbench------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY tb IS
END tb;
ARCHITECTURE Behavioral_tb OF tb IS
COMPONENT BtoG
PORT(
output : OUT std_logic_vector(3 downto 0);
input : IN std_logic_vector(3 downto 0)
);
END COMPONENT;
--Inputs
signal input : std_logic_vector(3 downto 0) := (others => '0');
--Outputs
signal output : std_logic_vector(3 downto 0);
-- No clocks detected in port list. Replace <clock> below with
-- appropriate port name
BEGIN
process
begin
input <= "0000";
wait for 5 ns;
input <= "0001";
wait for 5 ns;
input <= "0010";
wait for 5 ns;
input <= "0011";
wait for 5 ns;
input <= "0100";
wait for 5 ns;
input <= "0101";
wait for 5 ns;
input <= "0110";
wait for 5 ns;
input <= "0111";
wait for 5 ns;
input <= "1000";
wait for 5 ns;
input <= "1001";
wait for 5 ns;
end process;
end Behavioral_tb;