МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ЕОМ
/
Звіт з лабораторної роботи №3
з дисципліни «Тестування та діагностика кіберфізичних систем»
на тему” Тестування цифрового автомата”
Львів – 2019
1 МЕТА РОБОТИ
Метою роботи є ознайомлення з загальною схемою тестування цифрової техніки. Засвоєння методів та засобів тестування цифрових схем з пам’яттю на прикладі цифрового автомата (ЦА).
2 Очікуваний результат роботи
Необхідно розробити програму тестування ЦА, описати поведінку еталонного ЦА (створити еталон), за результатами тестування ЦА знайти прояви помилки, визначити тип несправності (неправильне формування вихідних сигналів, неправильний перехід до наступного стану), визначити причину несправності (обрив або закоротка вхідного чи вихідного сигналу).
3 ТЕОРЕТИЧНА ЧАСТИНА
Особливості тестування цифрових автоматів.
Цифровий автомат є прикладом пристрою із пам’яттю.
Цифровий автомат характеризується:
набором вхідних сигналів {X};
набором вихідних сигналів {Y};
набором внутрішніх станів {A};
початковим станом a0;
правилом формування вихідних сигналів;
правилом формування наступного внутрішнього стану.
Існують такі способи завдання автоматів, які описують залежність, відповідно, наступного стану автомата і його виходу від теперешнього стану автомата і його входів:
табличний - задаються дві таблиці: станів (переходів) і виходів;
за допомогою часових діаграм;
аналітичний, в тому числі на мовах опису апаратної частини цифрових вузлів – Hardware Discription Language (HDL);
за допомогою графа алгоритму роботи автомата;
за допомогою графа автомата (рис. 3.6);
опис на звичайній мові.
Цифрові автомати поділяються на автомати:
Мура, в яких вихідні сигнали залежать тільки від стану автомата;
Мілі, в яких вихідні сигнали залежать як від стану автомата, так і від вхідних сигналів.
Здебільшого цифрові автомати бувають синхронними, тобто зміна стану автомата здійснюється по фронту синхроімпульсів.
На рис. 3.1 представлений граф синхронного автомата Мура, який має:
вісім внутрішніх станів (S0, …, S7), які кодуються трьома розрядами (s0, …, s2);
три вхідних сигнала (pusk, x0, x1);
два вихідних сигнала (y0, y1);
Даний автомат переводиться до початкового стану за допомогою асинхронного сигналу скиду (Reset). Синхроімпульси на графі не показані.
Основний принцип тестування цифрових автоматів полягає в перевірці того, що автомат:
здійснює усі позначені стрілочками на графі переходи і не здійснює не позначених;
формує усі позначені на графі вихідні сигнали в потрібних станах і не формує не позначених.
Для перевірки усіх цих вимог потрібно декілька разів повертати автомат до початкового стану і повторно проводити його перевірку з іншою послідовністю вхідних сигналів.
/
4 Характеристика робочого місця
У даній роботі використовується еталон у вигляді табличної моделі, тобто у файлі SIMUL.CMD у вигляді таблиці зберігаються результати роботи об’єкта при подачі йому на вхід деякого обмеженого набору тестових даних.
Робоче місце моделюється за допомогою пакета Foundation Series v2.1i [2] ф.Xilinx, призначеного для проектування програмованих логічних інтегральних схем (ПЛІС) і описується набором файлів відповідного формату (таблиця 4.1).
Таблиця 4.1
Розширення файлів
РОЗШИРЕННЯ
ПРИЗНАЧЕННЯ ФАЙЛА
.SCH
схема електрична принципова
.ABL
опис роботи бібліотечного елемента (моделі, на мові ABEL)
.CMD
програма моделювання досліджуваного пристрою
Структурно модель робочого місця (рис. 4.1 – State_st1.SCH) складається з:
досліджуваного пристрою (мікросхема D3);
стенда;
Досліджуваний пристрій може бути або еталонним (state_s), алгоритм його роботи (рис. 3.6) знаходиться у файлі state_s.asf.
/
Стенд складається з:
зовнішнього генератора тестових послідовностей та еталонних результатів (файл SIMUL.CMD);
схеми порівняння еталонних результатів та реальних (елемент D16 COMP5);
вхідних (IBUF) та вихідних (OBUF) буферів, а також контактів (IPAD, OPAD).
може виконуватися практично без обмежень.
Рис. Схема досліджуваного пристрою.
Рис. Результат роботи досліджуваного пристрою.
Висновки: під час цієї лабораторної роботи, я вивчив принципи тестування пристроїв, моделюючи ці пристрої за допомогою мови VHDL.
Код програми
standart.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_signed.all;
entity standart is
port (
clk: in STD_LOGIC;
enable: in STD_LOGIC;
pusk: in STD_LOGIC;
reset: in STD_LOGIC;
x0: in STD_LOGIC;
x1: in STD_LOGIC;
k0: out STD_LOGIC;
k1: out STD_LOGIC;
k2: out STD_LOGIC;
y0: out STD_LOGIC;
y1: out STD_LOGIC);
end standart;
architecture standart_arch of standart is
-- SYMBOLIC ENCODED state machine: Sreg0
type Sreg0_type is (
S1, S2, S3, S4, S5, S6, S7, S8
);
-- attribute ENUM_ENCODING of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding
signal Sreg0, NextState_Sreg0: Sreg0_type;
-- Declarations of pre-registered internal signals
begin
-- FSM coverage pragmas
-- Aldec enum Machine_Sreg0 CURRENT=Sreg0
-- Aldec enum Machine_Sreg0 NEXT=NextState_Sreg0
-- Aldec enum Machine_Sreg0 INITIAL_STATE=S1
-- Aldec enum Machine_Sreg0 STATES=S2,S3,S4,S5,S6,S7,S8
-- Aldec enum Machine_Sreg0 TRANS=S1->S1,S1->S2,S2->S3,S2->S6,S3->S3,S3->S4,S4->S5,S4->S8,S5->S6,S6->S7,S7->S3,S7->S8,S8->S1,S8->S8
-- concurrent signals assignments
-- Diagram ACTION
----------------------------------------------------------------------
-- Machine: Sreg0
----------------------------------------------------------------------
------------------------------------
-- Next State Logic (combinatorial)
------------------------------------
Sreg0_NextState: process (pusk, x0, x1, Sreg0)
begin
NextState_Sreg0 <= Sreg0;
-- Set default values for outputs and signals
y0 <= '0';
y1 <= '1';
k0 <= '0';
k1 <= '0';
k2 <= '0';
case Sreg0 is
when S1 =>
y0<='0';
y1<='1';
k0<='0';
k1<='0';
k2<='0';
if pusk='1' then
NextState_Sreg0 <= S2;
elsif pusk='0' then
NextState_Sreg0 <= S1;
end if;
when S2 =>
y0<='1';
y1<='0';
k0<='1';
k1<='0';
k2<='0';
if x0='1' then
NextState_Sreg0 <= S3;
elsif x0='0' then
NextState_Sreg0 <= S6;
end if;
when S3 =>
y0<='1';
y1<='0';
k0<='0';
k1<='1';
k2<='0';
if x0='0' then
NextState_Sreg0 <= S4;
elsif x0='1' then
NextState_Sreg0 <= S3;
end if;
when S4 =>
y0<='1';
y1<='0';
k0<='1';
k1<='1';
k2<='0';
if x1='0' then
NextState_Sreg0 <= S5;
elsif x1='1' then
NextState_Sreg0 <= S8;
end if;
when S5 =>
y0<='0';
y1<='0';
k0<='0';
k1<='0';
k2<='1';
NextState_Sreg0 <= S6;
when S6 =>
y0<='0';
y1<='1';
k0<='1';
k1<='0';
k2<='1';
NextState_Sreg0 <= S7;
when S7 =>
y0<='0';
y1<='0';
k0<='0';
k1<='1';
k2<='1';
if x1='1' then
NextState_Sreg0 <= S8;
elsif x1='0' then
NextState_Sreg0 <= S3;
end if;
when S8 =>
y0<='0';
y1<='0';
k0<='0';
k1<='0';
k2<='0';
if pusk='0' then
NextState_Sreg0 <= S1;
elsif pusk='1' then
NextState_Sreg0 <= S8;
end if;
--vhdl_cover_off
when others =>
null;
--vhdl_cover_on
end case;
end process;
------------------------------------
-- Current State Logic (sequential)
------------------------------------
Sreg0_CurrentState: process (clk)
begin
if clk'event and clk = '1' then
if reset='1' then
Sreg0 <= S1;
else
if enable = '1' then
Sreg0 <= NextState_Sreg0;
end if;
end if;
end if;
end process;
end standart_arch;
diagram.vhd
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use IEEE.std_logic_signed.all;
entity diagram is
port (
clk: in STD_LOGIC;
enable: in STD_LOGIC;
pusk: in STD_LOGIC;
reset: in STD_LOGIC;
x0: in STD_LOGIC;
x1: in STD_LOGIC;
k0: out STD_LOGIC;
k1: out STD_LOGIC;
k2: out STD_LOGIC;
y0: out STD_LOGIC;
y1: out STD_LOGIC);
end diagram;
architecture diagram_arch of diagram is
-- SYMBOLIC ENCODED state machine: Master
type Master_type is (
S1, S2, S3, S4, S5, S6, S7, S8
);
-- attribute ENUM_ENCODING of Master_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding
signal Master, NextState_Master: Master_type;
-- Declarations of pre-registered internal signals
begin
-- FSM coverage pragmas
-- Aldec enum Machine_Master CURRENT=Master
-- Aldec enum Machine_Master NEXT=NextState_Master
-- Aldec enum Machine_Master INITIAL_STATE=S1
-- Aldec enum Machine_Master STATES=S2,S3,S4,S5,S6,S7,S8
-- Aldec enum Machine_Master TRANS=S1->S1,S1->S2,S2->S3,S2->S6,S3->S3,S3->S4,S4->S5,S4->S8,S5->S6,S6->S7,S7->S3,S7->S8,S8->S1,S8->S8
-- concurrent signals assignments
-- Diagram ACTION
----------------------------------------------------------------------
-- Machine: Master
----------------------------------------------------------------------
------------------------------------
-- Next State Logic (combinatorial)
------------------------------------
Master_NextState: process (pusk, x0, x1, Master)
begin
NextState_Master <= Master;
-- Set default values for outputs and signals
y0 <= '0';
y1 <= '0';
k0 <= '0';
k1 <= '0';
k2 <= '0';
case Master is
when S1 =>
y0<='0';
y1<='0';
k0<='0';
k1<='0';
k2<='0';
if pusk='1' then
NextState_Master <= S2;
elsif pusk='0' then
NextState_Master <= S1;
end if;
when S2 =>
y0<='1';
y1<='0';
k0<='1';
k1<='0';
k2<='0';
if x0='1' then
NextState_Master <= S3;
elsif x0='0' then
NextState_Master <= S6;
end if;
when S3 =>
y0<='1';
y1<='0';
k0<='0';
k1<='1';
k2<='0';
if x0='1' then
NextState_Master <= S3;
elsif x0='0' then
NextState_Master <= S4;
end if;
when S4 =>
y0<='1';
y1<='0';
k0<='1';
k1<='1';
k2<='0';
if x1='1' then
NextState_Master <= S8;
elsif x1='0' then
NextState_Master <= S5;
end if;
when S5 =>
y0<='0';
y1<='0';
k0<='0';
k1<='0';
k2<='1';
NextState_Master <= S6;
when S6 =>
y0<='0';
y1<='1';
k0<='1';
k1<='0';
k2<='1';
NextState_Master <= S7;
when S7 =>
y0<='0';
y1<='0';
k0<='0';
k1<='1';
k2<='1';
if x1='0' then
NextState_Master <= S3;
elsif x1='1' then
NextState_Master <= S8;
end if;
when S8 =>
y0<='1';
y1<='0';
k0<='1';
k1<='1';
k2<='1';
if pusk='0' then
NextState_Master <= S1;
elsif pusk='1' then
NextState_Master <= S8;
end if;
--vhdl_cover_off
when others =>
null;
--vhdl_cover_on
end case;
end process;
------------------------------------
-- Current State Logic (sequential)
------------------------------------
Master_CurrentState: process (clk)
begin
if clk'event and clk = '1' then
if reset='1' then
Master <= S1;
else
if enable = '1' then
Master <= NextState_Master;
end if;
end if;
end if;
end process;
end diagram_arch;
comparator.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity Comparator is
port ( k0 : in std_logic;
k1 : in std_logic;
k2 : in std_logic;
y0 : in std_logic;
y1 : in std_logic;
k0s : in std_logic;
k1s : in std_logic;
k2s : in std_logic;
y0s : in std_logic;
y1s : in std_logic;
Output : out std_logic
);
end Comparator;
architecture Arch_Comparator of Comparator is
begin
Output <= '0' when (k0=k0s and k1=k1s and k2=k2s and y0=y0s and y1=y1s) else '1';
end Arch_Comparator;