Рисунок 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
Сравнивая результат моделирования и таблицу истинности, можно сделать выводы о том, что они совпадают.
Заключение
В результате выполнения лабораторной работы были освоены навыки
совместного использования устройств средней степени интеграции, также
выполнены следующие задачи:
-Составлены таблицы истинности
-Собраны схемы на холстах и промоделированы эти схемы
-написан код для схемы и так же промоделирован