Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт по лабораторній роботі №2
з предмету “Теорія і проектування комп'ютерних систем та мереж”
Львів – 2004
Тема робота: генерування VHDL-коду простого пристрою, його компіляція та функціональна симуляція.
Мета роботи: оволодіння засобами, які надає середовище Active-HDL по компіляції VHDL-опису пристрою та його функціональній симуляції.
Структурна схема суматора/віднімач без вхідних та віхідних регістрів.
Структурна схема суматора/віднімач з вхідними та віхідними регістрами.
VHDL – код згенерованого суматора/віднімач з регістрами:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity addsub is
port (
ADDSUB : in std_logic;
OV : out std_logic;
CO : out std_logic;
A, B : in std_logic_vector (11 downto 0);
Q : out std_logic_vector (11 downto 0);
CLK : in std_logic;
RST : in std_logic
);
end entity;
architecture addsub_arch of addsub is
signal rg_a: std_logic_vector(11 downto 0);
signal rg_b: std_logic_vector(11 downto 0);
signal rg_q: std_logic_vector(11 downto 0);
signal rg_co: std_logic;
signal rg_ov: std_logic;
signal rg_ADDSUB: std_logic;
begin
process (rg_a, rg_b, ADDSUB)
variable TEMP_B : std_logic_vector (11 downto 0);
variable TEMP_RESULT : std_logic_vector (11 downto 0);
variable TEMP_RESULT2 : std_logic_vector (1 downto 0);
begin
if (rg_ADDSUB='1') then
TEMP_B:=rg_b;
else
TEMP_B:=not rg_b;
end if;
TEMP_RESULT:=('0' & rg_a(10 downto 0)) + ('0' & TEMP_B(10 downto 0)) + (not rg_ADDSUB);
TEMP_RESULT2:=('0' & rg_a(11)) + ('0' & TEMP_B(11)) + TEMP_RESULT(11);
rg_q <= TEMP_RESULT2(0) & TEMP_RESULT(10 downto 0);
rg_co <= TEMP_RESULT2(1) xor (not rg_ADDSUB);
rg_ov <= TEMP_RESULT2(1) xor TEMP_RESULT(11);
end process;
RG:process (CLK,RST)
begin
if RST='1' then
rg_a <= "000000000000";
rg_b <= "000000000000";
rg_ADDSUB <= '0';
CO <= '0';
OV <= '0';
Q <= "000000000000";
elsif CLK='1' and CLK'event then
rg_a <= A;
rg_b <= B;
rg_ADDSUB <= ADDSUB;
Q <= rg_q;
CO <= rg_co;
OV <= rg_ov;
end if;
end process;
end architecture addsub_arch;
Текст командного файлу:
restart
force CLK 1 0,0 50000 -r 100000
force RST 1 0,0 50000
force A 16#5
force B 16#4
force ADDSUB 16#1
run 100000
force A 16#8
force B 16#4
force ADDSUB 16#0
run 100000
force A 16#E
force B 16#5
force ADDSUB 16#0
run 100000
force A 16#1
force B 16#9
force ADDSUB 16#1
run 400000
Результати симуляції: