Professional Documents
Culture Documents
Bai Tap VHDL - 2021 - New 4
Bai Tap VHDL - 2021 - New 4
1. Yêu cầu chạy và hiểu code chương trình trong Quartus II, xây dựng được biểu
đồ theo thời gian, xác định được code chương trình đó làm việc gì (tính năng
của module này là gì). Có nhiều module giống nhau về tính năng, nhưng khác
nhau về cách viết, các bạn có thể tham khảo nhau để biết và hiểu thêm cách viết
code. Có thể đặt tên lại cho các module đó theo đúng cách hiểu biết của mỗi học
viên. Khuyến khích các bạn làm được nhiều hơn so với yêu cầu, ví dụ có thể
thiết kế lại module này dưới dạng schematic blocks.
2. Làm báo cáo tương ứng với bài tập của mình, trong đó yêu cầu giải thích ý
nghĩa của chương trình, nói qua đặc tính của ít nhất 2 loại device mà khi chạy
thử có thể biết được qua các file báo cáo.
Bài 1.
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Conditional8to3Coder is
port ( POSITION_CODE: in std_logic_vector (7 downto 0);
BINARY_CODE : out std_logic_vector (2 downto 0)
);
end Conditional8to3Coder;
library IEEE;
use IEEE.Std_Logic_1164.all;
entity Selected8to3Coder is
port ( POSITION_CODE: in std_logic_vector (7 downto 0);
BINARY_CODE : out std_logic_vector (2 downto 0)
);
end Selected8to3Coder;
library IEEE;
use IEEE.Std_Logic_1164.all;
entity CASE8to3Coder is
port ( POSITION_CODE: in std_logic_vector (7 downto 0);
BINARY_CODE : out std_logic_vector (2 downto 0)
);
end CASE8to3Coder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Conditional8to3Decoder IS
PORT(
Binary_Code : IN STD_LOGIC_VECTOR ( 2 DOWNTO 0);
Position_Code : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0)
);
END Conditional8to3Decoder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Selected8to3Decoder IS
PORT(
Binary_Code : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Position_Code : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0)
);
END Selected8to3Decoder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY CASE8to3Decoder IS
PORT(
Binary_Code : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
Position_Code : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0)
);
END CASE8to3Decoder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Conditional8_2to1Mux IS
PORT(
A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SEL : IN STD_LOGIC;
EN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END Conditional8_2to1Mux;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Selected8_2to1MUX IS
PORT(
A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SEL : IN STD_LOGIC;
EN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END Selected8_2to1MUX;
BEGIN
TMP_SIG <= EN & SEL;
TRANSFER:
WITH TMP_SIG SELECT
DOUT <= A WHEN "10",
B WHEN "11",
"00000000" WHEN OTHERS;
END MUXArch;
Bài 9.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY CASE8_2to1MUX IS
PORT(
A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
SEL : IN STD_LOGIC;
EN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END CASE8_2to1MUX;
BEGIN
TMP_VEC := EN & SEL;
CASE TMP_VEC IS
WHEN "10" => DOUT <= A;
WHEN "11" => DOUT <= B;
WHEN OTHERS => DOUT <= "00000000";
END CASE;
END PROCESS TRANSFER;
END MUXArch;
Bài 10.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Conditional1to8DeMUX IS
PORT(
DIN : IN STD_LOGIC;
EN : IN STD_LOGIC;
SEL : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END Conditional1to8DeMUX;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY Selected1to8DeMUX IS
PORT (
DIN : IN STD_LOGIC;
EN : IN STD_LOGIC;
SEL : IN STD_LOGIC_VECTOR (2 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
END Selected1to8DeMUX;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY ConditionalBIN2BDC IS
PORT (
BIN_CODE : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
BDC_CODE : OUT STD_LOGIC_VECTOR (4 DOWNTO 0)
);
END ConditionalBIN2BDC;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY ConditionalComparator IS
GENERIC(WIDTH : NATURAL := 4);
PORT(
A : IN STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
G,GE,E,NE,LE,L : OUT STD_LOGIC
);
END ConditionalComparator;
Compare:
TMP_SIG <= "110100" WHEN (A > B ) ELSE
"011010" WHEN (A = B ) ELSE
"000111";
END ComparArch;
Bài 14.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY IFComparator IS
GENERIC(WIDTH : NATURAL := 4);
PORT(
A : IN STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (WIDTH-1 DOWNTO 0);
G,GE,E,NE,LE,L : OUT STD_LOGIC
);
END IFComparator;
BEGIN
(G,GE,E,NE,LE,L) <= TMP_SIG;
Compare: PROCESS (A,B)
BEGIN
IF (A > B) THEN TMP_SIG <= "110100";
ELSIF (A = B) THEN TMP_SIG <= "011010";
ELSE TMP_SIG <= "000111";
END IF;
END PROCESS Compare;
END CompareArch;
Bài 15.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY UnsOperAdder IS
GENERIC(WIDTH : NATURAL := 4 );
PORT(
CIN : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
SUM : OUT STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
COUT : OUT STD_LOGIC
);
END UnsOperAdder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY UnsProcOperAdder IS
GENERIC(WIDTH : NATURAL := 4 );
PORT(
CIN : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
SUM : OUT STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
COUT : OUT STD_LOGIC
);
END UnsProcOperAdder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY SigProcOperAdder IS
GENERIC(WIDTH : NATURAL := 4 );
PORT(
CIN : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
B : IN STD_LOGIC_VECTOR( WIDTH -1 DOWNTO 0);
ADDSUB : IN STD_LOGIC;
SUM : OUT STD_LOGIC_VECTOR( WIDTH DOWNTO 0);
COUT : OUT STD_LOGIC;
OVR : OUT STD_LOGIC
);
END SigProcOperAdder;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY MealyFSM IS
PORT( clk : IN STD_LOGIC;
reset : IN STD_LOGIC;
A : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
Y : OUT STD_LOGIC_VECTOR (1 DOWNTO 0)
);
END MealyFSM;
WHEN Q1 =>
IF (A = "00") THEN state <= Q0; Y <= "11";
ELSIF (A = "01") THEN state <= Q1; Y <= "00";
ELSIF (A = "10") THEN state <= Q2; Y <= "00";
END IF;
WHEN Q2 =>
IF (A = "00") THEN state <= Q3; Y <= "00";
ELSIF (A = "10") THEN state <= Q1; Y <= "11";
END IF;
WHEN Q3 =>
IF (A = "00") THEN state <= Q2; Y <= "01";
ELSIF (A = "10") THEN state <= Q0; Y <= "00";
END IF;
END CASE;
END IF;
END PROCESS;
END MealyArch;
Bài 19.
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY ParInputCounter IS
GENERIC(WIDTH : NATURAL := 8);
PORT(
Reset ,CLK, CNT_EN, CLK_EN,LOAD : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(WIDTH -1 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(WIDTH -1 DOWNTO 0)
);
END ParInputCounter;
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_unsigned.ALL;
ENTITY BDCCounter IS
PORT(
Reset ,CLK, LOAD, CNT_DIR : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END BDCCounter;