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

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

.pdf
Скачиваний:
29
Добавлен:
07.06.2022
Размер:
3.15 Mб
Скачать

Рисунок 4.8 – Моделирование в режиме Functional. Часть 4

Моделирование в обоих режимах соответствует плану моделирования.

Выходные значения получились идентичны предполагаемому результату.

21

5 ОПИСАНИЕ ПРОГРАММЫ

5.1Конечное устройство

Ниже представлен листинг описания устройства, взаимодействующего с основными тремя блоками:

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity god_pleasevhdl is port (

input, C_ext, CLR, nreadd, C_int: in std_logic; C_out: out std_logic;

outt: out std_logic_vector(4 downto 0)); end;

architecture synth of god_pleasevhdl is component BlockIn

port (

input, C_ext, CLR: in std_logic;

Q_reg: out std_logic_vector(5 downto 0); OPERATION: out std_logic_vector(1 downto 0); cnt: out std_logic_vector(4 downto 0));

end component; component BlockOP port (

Q_reg: in std_logic_vector(5 downto 0); OPERATION: in std_logic_vector(1 downto 0); cnt: in std_logic_vector(4 downto 0);

result: out std_logic_vector(4 downto 0)); end component;

component BlockOut

port (

22

C_int, CLR, nreadd: in std_logic; result: in std_logic_vector(4 downto 0); outt: out std_logic_vector(4 downto 0); C_out: out std_logic);

end component;

signal Q_reg: std_logic_vector(5 downto 0);

signal OPERATION: std_logic_vector(1 downto 0); signal cnt: std_logic_vector(4 downto 0);

signal result: std_logic_vector(4 downto 0); begin

B_IN: BlockIn

port map(input, C_ext, CLR, Q_reg, OPERATION, cnt); B_OP: BlockOP

port map(Q_reg, OPERATION, cnt, result); B_OUT: BlockOut

port map(C_int, CLR, nreadd, result, outt, C_out); end;

В программе описываются входы и выходы, а также сигналы, которые будут подаваться и передаваться между блоками. Также производится запуск каждого блока. Входной блок отвечает за распознавание кода операции и входных данных, а также в нем ведется счет выполненных операций. В

операционном блоке происходит формирование выходных значений в зависимости от кода операции и входных данных. В выходном блоке происходит вывод результатов работы, а также формирование выходного тактирующего сигнала C_out в зависимости от сигнала nreadd.

На рисунке 5.1 представлена схема из RTL viewer.

23

Рисунок 5.1 – Схема из RTL viewer

На рисунке 5.2 представлено моделирование операции преобразования из двоичного кода в код МТК-2.

Рисунок 5.2 – Моделирование преобразования кода

Активный уровень тактового сигнала C_out приходится на интервал 957-

1007 нс (для первой операции).

Активный уровень тактового сигнала C_out приходится на интервал 2258-

2308 нс (для второй операции).

На рисунке 5.3 представлено моделирование логической операции.

Рисунок 5.3 – Моделирование логической операции

Активный уровень тактового сигнала C_out приходится на интервал 36573707 нс (для третьей операции).

24

Активный уровень тактового сигнала C_out приходится на интервал 48074857 нс (для четвертой операции).

На рисунке 5.4 представлено моделирование арифметической операции.

Рисунок 5.4 – Моделирование арифметической операции

Активный уровень тактового сигнала C_out приходится на интервал 6007-

6057 нс (для пятой операции).

Активный уровень тактового сигнала C_out приходится на интервал 7207-

7257 нс (для шестой операции).

На рисунке 5.5 представлено моделирование вывода количества выполненных операций и сброса.

Рисунок 5.5 – Моделирование вывода количества выполненных операций и сброса

Активный уровень тактового сигнала C_out приходится на интервал 8507-

8557 нс (для вывода количества операций в первый раз).

Активный уровень тактового сигнала C_out приходится на интервал 99079957 нс (для вывода количества операций во второй раз).

Подаваемые сигналы идентичны тем, что были на входах функциональной схемы. Моделирование соответствует плану моделирования, а выходные сигналы идентичны предполагаемым.

25

5.2 Входной блок

Ниже представлен листинг входного блока устройства: library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity BlockIn is

port (

input, C_ext, CLR: in std_logic;

Q_reg: out std_logic_vector(5 downto 0); OPERATION: out std_logic_vector(1 downto 0); cnt: out std_logic_vector(4 downto 0));

end;

architecture synth of BlockIn is

signal reg: std_logic_vector(7 downto 0); signal counter0: std_logic_vector(2 downto 0); signal counter1: std_logic_vector(4 downto 0); begin

Q_reg <= reg(7 downto 2); OPERATION <= reg (1 downto 0); cnt <= counter1;

process(C_ext, CLR) begin

if CLR = '1' then

reg <= (others => '0'); counter0 <= (others => '0'); elsif rising_edge(C_ext) then

reg <= input & reg(7 downto 1); counter0 <= counter0 + '1';

end if;

end process;

26

process(C_ext, CLR) begin

if CLR = '1' then

counter1 <= (others => '0'); elsif counter0 = "000" then if rising_edge(C_ext) then

counter1 <= counter1 + '1'; end if; end if;

end process;

end;

Во входном блоке входящие сигналы делятся на две категории: первые два сигнала будут записаны в OPERATION как код операции, а последующие шесть

– в Q_reg. Также с помощью сигнала CLR реализован асинхронный сброс.

Счетчик выполненных операций срабатывает, когда счетчик сигналов C_ext на выходе имеет ноль и приходит активный уровень сигнала C_ext. Счетчик оснащен асинхронным сбросом CLR.

На рисунке 5.6 представлена схема из RTL viewer.

Рисунок 5.6 – Схема из RTL viewer

27

5.3Операционный блок

Ниже представлен листинг операционного блока устройства: library ieee; use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all; entity BlockOP is

port (

Q_reg: in std_logic_vector(5 downto 0); OPERATION: in std_logic_vector(1 downto 0); cnt: in std_logic_vector(4 downto 0);

result: out std_logic_vector(4 downto 0)); end;

architecture synth of BlockOP is begin

process(OPERATION) begin

case (OPERATION) is when "00" =>

result <= cnt; when "01" =>

case (Q_reg (3 downto 0)) is

when "0000" => result <="01101"; when "0001" =>result <= "11101"; when "0010" =>result <= "11001"; when "0011" =>result <= "10000"; when "0100" =>result <= "01010"; when "0101" =>result <= "00001"; when "0110" =>result <= "10101"; when "0111" =>result <= "11100"; when "1000" =>result <= "01100";

28

when "1001" =>result <= "00011"; when "1010" =>result <= "00010"; when "1011" =>result <= "01000"; when "1100" =>result <= "11111"; when "1101" =>result <= "11011"; when "1110" =>result <= "00100"; when "1111" =>result <= "00000"; end case;

when "10" =>

result <= "00" & ( (not Q_reg(5 downto 3)) and Q_reg(2 downto 0)); when "11" =>

result <= "00" & (Q_reg(5 downto 3) - Q_reg(2 downto 0)); when others =>

result <= cnt; end case; end process; end;

В операционном блоке при помощи модуля case считывается значение

OPERATION, и на основе этого значения производится конкретная операция с данными, так при подаче 00 в качестве результата будет выдано значение счетчика команд, при подаче 01 в зависимости от двоичного числа на входе в качестве результата будет выдан аналог в коде МТК-2 и т.д.

На рисунке 5.7 представлена схема из RTL viewer.

29

Рисунок 5.7 – Схема из RTL viewer

5.4Выходной блок

Ниже представлен листинг выходного блока устройства: library ieee; use ieee.std_logic_1164.all;

entity BlockOut is port (

C_int, CLR, nreadd: in std_logic; result: in std_logic_vector(4 downto 0); outt: out std_logic_vector(4 downto 0); C_out: out std_logic);

end;

architecture synth of BlockOut is signal read_s: std_logic;

30