Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки
Національний університет „Львівська політехніка”
Кафедра EОМ
/
Звіт
з лабораторної роботи № 1
з дисципліни: “ ТЕСТУВАННЯ І ДІАГНОСТИКА
КІБЕРФІЗИЧНИХ СИСТЕМ ”
На тему:” Тестування АЛП”
Львів
2019
Мета роботи: метою роботи є ознайомлення з загальною схемою тестування цифрової техніки. Засвоєння методів та засобів тестування комбінаційних схем на прикладі арифметико-логічного пристрою (АЛП).
Завдання: дана лабораторна робота виконується у середовищі Aldec Active HDL. У даній роботі при тестуванні створюються 3 вузли.
1) Еталонний вузол;
2) Еталонний вузол з наперед заданою помилкою;
3) Вузол порівняння.
Потрібно змоделювати Арифметико-логічний пристрій та протестувати його при різних помилках. Арифметико-логічний пристрій повинен виконувати такі операції:
1) операція віднімання;
2) операція І;
3) операція АБО;
4) операція виключне АБО;
5) інкремент A;
6) інкремент B;
7) інверсія A;
8) інверсія B;
9) логічний зсув ліворуч A;
10) логічний зсув ліворуч B;
11) зсув праворуч A;
12) логічний зсув праворуч B;
13) декремент A;
14) декремент B;
15) константа 0.
Виконання роботи:
Код Еталонного вузла:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.NUMERIC_STD.all;
entity ALU is
generic (
constant N: natural := 1
);
Port (
A, B : in STD_LOGIC_VECTOR(7 downto 0);
ALU_Sel : in STD_LOGIC_VECTOR(3 downto 0);
ALU_Out : out STD_LOGIC_VECTOR(7 downto 0)
);
end ALU;
architecture Behavioral of ALU is
signal ALU_Result : std_logic_vector (7 downto 0);
signal tmp: std_logic_vector (8 downto 0);
begin
process(A,B,ALU_Sel)
begin
case(ALU_Sel) is
when "0000" =>
ALU_Result <= A - B ;
when "0001" =>
ALU_Result <= A AND B ;
when "0010" =>
ALU_Result <= A OR B;
when "0011" =>
ALU_Result <= A XOR B;
when "0100" =>
ALU_Result <= std_logic_vector(unsigned(A) sll N);
when "0101" =>
ALU_Result <= std_logic_vector(unsigned(B) sll N);
when "0110" =>
ALU_Result <= std_logic_vector(unsigned(A) srl N);
when "0111" =>
ALU_Result <= std_logic_vector(unsigned(B) srl N);
when "1000" =>
ALU_Result <= A + N;
when "1001" =>
ALU_Result <= B + N;
when "1010" =>
ALU_Result <= (NOT A);
when "1011" =>
ALU_Result <= (NOT B);
when "1100" =>
ALU_Result <= A - N;
when "1101" =>
ALU_Result <= B - N;
when "1110" =>
ALU_Result <= "00000000" ;
when others => ALU_Result <= "ZZZZZZZZ" ;
end case;
end process;
ALU_Out <= ALU_Result;
end Behavioral;
Змінений код Еталонного вузла:
begin
case(ALU_Sel) is
when "0000" =>
ALU_Result <= A - B ;
when "0001" =>
ALU_Result <= A NAND B ;
when "0010" =>
ALU_Result <= A NOR B;
when "0011" =>
ALU_Result <= A XOR B;
when "0100" =>
ALU_Result <= std_logic_vector(unsigned(A) sll N);
when "0101" =>
ALU_Result <= std_logic_vector(unsigned(B) sll N);
when "0110" =>
ALU_Result <= std_logic_vector(unsigned(A) srl N);
when "0111" =>
ALU_Result <= std_logic_vector(unsigned(B) srl N);
when "1000" =>
ALU_Result <= A - N;
when "1001" =>
ALU_Result <= B + N;
when "1010" =>
ALU_Result <= (NOT A);
when "1011" =>
ALU_Result <= (NOT B);
when "1100" =>
ALU_Result <= A + N;
when "1101" =>
ALU_Result <= B - N;
when "1110" =>
ALU_Result <= "00000000"
when others => ALU_Result <= "ZZZZZZZZ" ;
end case;
Код Вузла порівняння:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Comparison is
port ( ALU_Out : in std_logic_vector (7 downto 0);
ALU_Out_B : in std_logic_vector (7 downto 0);
Output : out std_logic
);
end Comparison;
architecture Arch_Comparator of Comparison is
begin
Output <= '1' when (ALU_Out_B=ALU_Out) else '0';
end Arch_Comparator;
Часова діаграма роботи системи:
/
Висновок: в даній лабораторній роботі я розробив програму тестування АЛП, описав поведінку еталонного АЛП, за результатами тестування АЛП визначив несправні елементи досліджуваного пристрою, несправні контакти визначених елементів та тип несправності (обрив, закоротка).