Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 Семестр / Отчеты / 18 варик / 8 лаба_данные_удалены

.pdf
Скачиваний:
20
Добавлен:
07.06.2022
Размер:
855.24 Кб
Скачать

Рисунок 4.4 – Выходной блок

5. МОДЕЛИРОВАНИЕ

На рисунке 5.1 представлено моделирование в режиме Functional.

Рисунок 5.1 – моделирование схемы в режиме Funtional

Один временной интервал равен 100 наносекунд. Если сравнить моделирование с таблицей истинности, то они совпадают.

На рисунке 5.2 представлено моделирование в режиме Timing.

Рисунок 5.2 – моделирование в режиме Timing

Так как моделирование в режиме Timing приближено к реальности и отображает задержки переключения, из-за чего результат немного искажается от идеального.

6. ОПИСАНИЕ ДЛЯ КАЖДОЙ СОЗДАННОЙ ПРОГРАММЫ

Ниже представлен код на VHDL:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all;

entity big_v is port(

x: in std_logic;

R, C_ext, C_int, nread: in std_logic; result: out std_logic_vector(4 downto 0); C_out: out std_logic;

S_OP: in std_logic_vector(1 downto 0)); end;

architecture synth of big_v is

signal A, B, op1, op2: std_logic_vector(2 downto 0); signal z: std_logic_vector(4 downto 0);

signal q: std_logic_vector(5 downto 0); signal A_OP: std_logic_vector(1 downto 0);

signal cnt_tmp: std_logic_vector(4 downto 0);

type statetype is (S0, S1, S2, S3, S4, S5, S6, S7, S8, S9, S10); signal state: statetype;

signal results: std_logic_vector (4 downto 0); signal Q1: std_logic_vector (4 downto 0); signal Cout: std_logic;

begin

process (C_ext, R) begin

if R = '1' then q <= "000000"; elsif rising_edge (C_ext) then q(5) <= x;

q(4) <= q(5);

q(3) <= q(4);

q(2) <= q(3);

q(1) <= q(2);

q(0) <= q(1); end if;

end process;

process (C_ext, R) begin

if R = '1' then cnt_tmp <= (others => '0'); elsif rising_edge(C_ext) then

cnt_tmp <= (cnt_tmp + '1'); end if;

end process; process (all) begin

case q(4 downto 0) is

when "11000" => z <= "01000"; when "10001" => z <= "10000";

when "01101" => z <= "00010"; when "00111" => z <= "00100"; when "11111" => z <= "00001"; when "01100" => z <= "00001"; when "00000" => z <= "00001"; when "00001" => z <= "00001"; when "00010" => z <= "00001"; when "00011" => z <= "00001"; when "00100" => z <= "00001"; when "00101" => z <= "00001"; when "00110" => z <= "00001"; when "01000" => z <= "00001"; when "10000" => z <= "00001"; when "11001" => z <= "00001"; when others => z <= "XXXXX"; end case;

end process; A <= q(5 downto 3); B <= q(2 downto 0); op1 <= not(A) or B; op2 <= A - B + '1';

process (C_ext, R) begin

if R = '1' then A_OP <= (others => '0'); elsif rising_edge(C_ext) then

A_OP <= S_OP; end if;

end process; process (all) begin

if S_OP = "00" then results <= cnt_tmp; elsif S_OP = "01" then results <= z;

elsif S_OP = "10" then results <= "00" & op1; else results <= "00" & op2;

end if;

end process;

process (C_int, nread) begin if R = '1' then state <= S0; Cout <= '1';

Q1 <= "00000";

elsif rising_edge(C_int) then case (state) is

when S0 =>

Q1 <= results; Cout <= '0';

if nread = '0' then Cout <= '1';

state <= S1; end if;

when S1 =>

Cout <= '0'; state <= S2;

when S2 =>

Q1 <= results; Cout <= '1'; state <= S3;

when S3 =>

Cout <= '0'; state <= S4;

when S4 =>

Q1 <= results; Cout <= '1'; state <= S5;

when S5 =>

Cout <= '0'; state <= S6; when S6 => Q1 <= results;

if A_OP(1) = '1' then state <= S0; else

Cout <= '1'; state <= S7;

end if; when S7 =>

Cout <= '0'; state <= S8; when S8 => Q1 <= results; Cout <= '1'; state <= S9;

when S9 =>

Cout <= '0'; state <= S0;

when others => state <= S0;

end case; end if;

end process; C_out <= Cout;

process (Cout) begin

if rising_edge (Cout) then

if R='1' then result <= "00000";

else result <= Q1; end if;

end if;

end process; end;

В entity port описаны входы и выходы схемы. После были описаны все требуемые для реализации сигналы.

Первый процесс – преобразование входного последовательного кода в параллельный.

Второй процесс – Работа счетчика

Третий – описание задачи при помощи case.

После идёт описание операций. На следующем этапе происходит хранение кода операций. В конце описан конечный автомат для вывода результата.

7. СХЕМА ИЗ RTL VIEWER ДЛЯ КОДА HDL

На рисунке 7.1 приведена схема из RTL Viewer для кода HDL.

Рисунок 7.1 – схема из RTL Viewer

8. МОДЕЛИРОВАНИЕ УСТРОЙСТВА, ОПИСАННОГО КОДОМ

HDL

На рисунке 8.1 представлено моделирование в режиме Timing для кода

HDL.

Рисунок 8.1 – моделирование устройства, описанного кодом HDL

Сравнивая результат моделирования и таблицу истинности, можно сделать выводы о том, что они совпадают.

Заключение

В результате выполнения лабораторной работы были освоены навыки

совместного использования устройств средней степени интеграции, также

выполнены следующие задачи:

-Составлены таблицы истинности

-Собраны схемы на холстах и промоделированы эти схемы

-написан код для схемы и так же промоделирован