Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки,молоді та спорту України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
/
Звіт
по Курсовій роботі
з дисципліни: “Комп’ютерна схемотехніка:
“ Спеціалізований обчислювач”
З А В Д А Н Н Я
Розробити спеціалізований обчислювач, що має відповідати наступним вимогам :
структурна схема обчислювача : мікропрограмний автомат Мілі;
робоча формула : Yi = ( Xi * N) mod 216, де 9 ≤ i ≤ 15 ( значення N та i задаються керівником курсового проекта );
формат даних : 16 бітний беззнаковий двійковий код з фіксованою комою( тобто коди від (0).0000 0000 0000 0000 до (0).1111 1111 1111 1111 );
інформаційний обмін здійснюється через паралельну 16-ти розрядну двонаправлену шину даних за допомогою додаткових сигналів синхронізації ( рівні сигналів сумісні з ТТЛ );
керуючий автомат реалізувати на основі ПЗП та регістра;
напруга живлення та тактові імпульси надходять від зовнішнього джерела, а сигнал початкового скидання формується локально.
Задана константа : 9B2B16=1001 1011 0010 10112
Розробка та моделювання спеціалізованого обчислювача
/
Результати моделювання:
VHDL – коди елементів:
Buf.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity Buf is
port(
Dir : in STD_LOGIC;
OE : in STD_LOGIC;
A : inout STD_LOGIC_VECTOR(7 downto 0);
B : inout STD_LOGIC_VECTOR(7 downto 0)
);
end Buf;
--}} End of automatically maintained section
architecture Buf of Buf is
begin
A<=B when (OE = '0' and Dir = '0') else (others =>'Z');
B<=A when (OE = '0' and Dir = '1') else(others =>'Z');
end Buf;
RAM.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity ram is
port(
CE : in STD_LOGIC;
WE : in STD_LOGIC;
OE : in STD_LOGIC;
AD : in STD_LOGIC_VECTOR(10 downto 0);
D : inout STD_LOGIC_VECTOR(7 downto 0)
);
end ram;
architecture ram of ram is
type MEM is array(0 to 2047) of
std_logic_vector (7 downto 0);
begin
PROCESS(AD, CE, OE, WE, D)
TYPE ram_array IS ARRAY (0 TO 2047) OF BIT_VECTOR(7 DOWNTO 0);
VARIABLE index : INTEGER := 0;
VARIABLE ram_store : ram_array;
BEGIN
IF CE = '0' THEN
index := 0;
FOR i IN AD'RANGE LOOP
IF AD(i) = '1' THEN
index := index + 2**i;
END IF;
END LOOP;
IF rising_edge(WE) THEN
ram_store(index) := To_bitvector(D);
ELSIF OE = '0' THEN
D <= To_StdlogicVector(ram_store(index));
ELSE
D <= "ZZZZZZZZ";
END IF;
ELSE
D <= "ZZZZZZZZ";
END IF;
END PROCESS;
end ram;
Reg.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity RG is
port(
CLK : in STD_LOGIC;
CLR : in STD_LOGIC;
DSR : in STD_LOGIC;
DSL : in STD_LOGIC;
S0 : in STD_LOGIC;
S1 : in STD_LOGIC;
D : in STD_LOGIC_VECTOR(7 downto 0);
Q : out STD_LOGIC_VECTOR(7 downto 0)
);
end RG;
--}} End of automatically maintained section
architecture RG of RG is
SIGNAL INT_DAT : std_logic_vector (7 downto 0);
SIGNAL S1_S0 : std_logic_vector (1 downto 0);
begin
Q<=INT_DAT;
S1_S0 <= S1&S0;
process (CLK, CLR)
begin
if CLR ='0' then INT_DAT<=(others =>'0') ;
elsif rising_edge(CLK) then
case S1_S0 is
when "01" => INT_DAT <= INT_DAT (6 downto 0) & DSR;
when "10" => INT_DAT <= DSL & INT_DAT(7 downto 1);
when "11" => INT_DAT <= D;
when others =>
end case;
end if;
end process ;
end RG;
Sum.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity Sum is
port(
C0 : in STD_LOGIC;
A : in STD_LOGIC_VECTOR(3 downto 0);
B : in STD_LOGIC_VECTOR(3 downto 0);
C4 : out STD_LOGIC;
P : out STD_LOGIC_VECTOR(3 downto 0)
);
end Sum;
--}} End of automatically maintained section
architecture Sum_arc of Sum is
signal tmp: std_logic_vector(4 downto 0);
begin
tmp <= conv_std_logic_vector((conv_integer(A) + conv_integer(B) + conv_integer(C0)), 5);
P <= tmp(3 downto 0);
C4 <= tmp(4);
end Sum_arc;
Counter.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity counter is
port(
L : in STD_LOGIC; -- вхід попереднього запису
R : in STD_LOGIC; -- скид тригерів в "0"
pr : in STD_LOGIC; -- вхід "прямий рахунок"
zr : in STD_LOGIC; -- вхід "зворотній рахунок"
D : in STD_LOGIC_VECTOR(0 to 3); -- інформаційні входи
Q : out STD_LOGIC_VECTOR(0 to 3); -- інформаційні виходи
pp : out STD_LOGIC; -- вихід "прямий перенос"
zp : out STD_LOGIC-- вихід "зворотній перенос"
);
end counter;
architecture counter of counter is
signal CNT_VAL: std_logic_vector(3 downto 0);
begin
Q<=CNT_VAL;
process(L,R,pr,zr)
begin
pp<='0';
zp<='0';
if pr'event and pr='0' then
if R='1' then CNT_VAL<=(others=>'0');
else
if L='0' then CNT_VAL<=D;
else
if L='1' then CNT_VAL<=CNT_VAL+1;
if CNT_VAL="1111" then pp<='1';
end if;
end if;
end if;
end if;
end if;
if zr'event and zr='0' then
if R='1' then CNT_VAL<=(others=>'0');
else
if L='0' then CNT_VAL<=D;
else
if L='1' then CNT_VAL<=CNT_VAL-1;
if CNT_VAL="0000" then zp<='1';
end if;
end if;
end if;
end if;
end if;
end process;
end counter;
VHDL-код прошивки автомата
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity Avt is
port(
Clk : in STD_LOGIC;
Res : in STD_LOGIC;
load : in STD_LOGIC;
We_RE : in STD_LOGIC;
S : in STD_LOGIC_VECTOR(7 downto 0);
O : out STD_LOGIC_VECTOR(23 downto 0);
Mk : out STD_LOGIC_VECTOR(15 downto 0)
);
end Avt;
architecture Avt of Avt is
signal st:integer;--ñòàíè àâòîìàòà
signal bb :std_logic_vector(23 downto 0);
begin
process(CLK,Res)
begin
if Res = '1'
then bb <= X"00473D"; --;Mmk<="1001 1011 0010 1011";
elsif (CLK ='1' and CLK'event) then
st<= CONV_INTEGER(S);
case st is
when 0 => bb <= X"01C733";
when 1 => bb <= X"02E613";
when 2 => bb <= X"03E213";
when 3 => bb <= X"04E613";
when 4=> bb <= X"05E715";
when 5=> bb <= X"06E717";
when 6=> bb <= X"07E617";
when 7=> bb <= X"08E417";
when 8=> bb <= X"09F617";
when 9=> bb <= X"0AE717";
when 10=> bb <= X"0BE715";
when 11=> bb <= X"0C3716";
when 12=> bb <= X"0D3616";
when 13=> bb <= X"0E3416";
when 14=> bb <= X"0F3616";
when 15=> bb <= X"103715";
when 16=> bb <= X"113715";
when 17=> bb <= X"12E717";
when 18=> bb <= X"13E617";
when 19=> bb <= X"14E417";
when 20=> bb <= X"15F617";
when 21=> bb <= X"16E715";
when 22=> bb <= X"17A719";
when 23=> bb <= X"183715";
when 24=> bb <= X"193716";
when 25=> bb <= X"1A3616";
when 26=> bb <= X"1B3416";
when 27=> bb <= X"1C3616";
when 28=> bb <= X"1D3715";
when 29=> bb <= X"1E3715";
when 30=> bb <= X"1FE717";
when 31=> bb <= X"20E617";
when 32=> bb <= X"21E417";
when 33=> bb <= X"22F617";
when 34=> bb <= X"23E715";
when 35=> bb <= X"24A719";
when 36=> bb <= X"253715";
when 37=> bb <= X"263716";
when 38=> bb <= X"273616";
when 39=> bb <= X"283416";
when 40=> bb <= X"293616";
when 41=> bb <= X"2A3715";
when 42=> bb <= X"2B3715";
when 43=> bb <= X"2CE717";
when 44=> bb <= X"2DE617";
when 45=> bb <= X"2EE417";
when 46=> bb <= X"2FF617";
when 47=> bb <= X"30E715";
when 48=> bb <= X"31A719";
when 49=> bb <= X"323715";
when 50=> bb <= X"33A719";
when 51=> bb <= X"343715";
when 52=> bb <= X"353716";
when 53=> bb <= X"363616";
when 54=> bb <= X"373416";
when 55=> bb <= X"383616";
when 56=> bb <= X"393715";
when 57=> bb <= X"3A3715";
when 58=> bb <= X"3BE717";
when 59=> bb <= X"3CE617";
when 60=> bb <= X"3DE417";
when 61=> bb <= X"3EF617";
when 62=> bb <= X"3FE715";
when 63=> bb <= X"403716";
when 64=> bb <= X"413616";
when 65=> bb <= X"423416";
when 66=> bb <= X"433616";
when 67=> bb <= X"443715";
when 68=> bb <= X"453715";
when 69=> bb <= X"46E717";
when 70=> bb <= X"47E617";
when 71=> bb <= X"48E417";
when 72=> bb <= X"49F617";
when 73=> bb <= X"4AE715";
when 74=> bb <= X"4BA719";
when 75=> bb <= X"4C3715";
when 76=> bb <= X"4D3716";
when 77=> bb <= X"4E3616";
when 78=> bb <= X"4F3416";
when 79=> bb <= X"503616";
when 80=> bb <= X"513715";
when 81=> bb <= X"523715";
when 82=> bb <= X"53E717";
when 83=> bb <= X"54E617";
when 84=> bb <= X"55E417";
when 85=> bb <= X"56F617";
when 86=> bb <= X"57E715";
when 87=> bb <= X"583716";
when 88=> bb <= X"593616";
when 89=> bb <= X"5A3416";
when 90=> bb <= X"5B3616";
when 91=> bb <= X"5C3715";
when 92=> bb <= X"5D3715";
when 93=> bb <= X"5EE717";
when 94=> bb <= X"5FE617";
when 95=> bb <= X"60E417";
when 96=> bb <= X"61F617";
when 97=> bb <= X"62E715";
when 98=> bb <= X"63A719";
when 99=> bb <= X"643715";
when 100=> bb <= X"65A719";
when 101=> bb <= X"663715";
when 102=> bb <= X"673716";
when 103=> bb <= X"683616";
when 104=> bb <= X"693416";
when 105=> bb <= X"6A3616";
when 106=> bb <= X"6B3715";
when 107=> bb <= X"6C3715";
when 108=> bb <= X"6DE717";
when 109=> bb <= X"6EE617";
when 110=> bb <= X"6FE417";
when 111=> bb <= X"70F617";
when 112=> bb <= X"71E715";
when 113=> bb <= X"72E717";
when others => bb <= X"000000";
END CASE;
end if;
O<=bb;
END PROCESS;
end Avt;
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!