Проектирование процессорного модуля — КиберПедия 

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

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Проектирование процессорного модуля

2017-10-09 300
Проектирование процессорного модуля 0.00 из 5.00 0 оценок
Заказать работу

4.1 Схема объединения операционного и управляющего автоматов

 

Рис. 4.1 Схема объединения операционного и управляющего автоматов

4.2 Результаты тестирования

Рис. 4.2.1 Результат ускоренного умножения двух беззнаковых чисел

Рис. 4.2.2 Результат деления целых двоичных беззнаковых чисел без восстановления остатка

 

ВЫВОД

 

Данный курсовой проект разработан для изучения современных средств проектирования цифровых вычислительных машин. В этом проекте был разработан двухуровневый процессорный модуль, который был спроектирован на основе управляющего автомата типа П с естественной адресацией и операционного автомата класса I. С помощью данного устройства можно выполнять такие микрооперации, как сложение, умножение и деление двоичных знаковых и беззнаковых чисел. П-автомат является автоматом с программируемой логикой. Для таких автоматов затраты оборудование больше (при несложных микрокомандах), чем в автоматах с жесткой логикой. Чем сложнее микропрограмма, тем меньше аппаратные затраты.

Управляющие автоматы и автоматы с жесткой логикой отличаются степенью гибкости. Для автоматов с жесткой логикой, при возникновении ошибки в микропрограмме, необходимо перестраивать структуру автомата. Программируемая логика позволяет решить задачу перестройки структуры относительно просто – путем прошивки в ПЗУ дополнительных микрокоманд, изменяемых при внесении изменений в микропрограмму. Таким образом, можно считать, что гибкостью обладают только автоматы с программируемой логикой.

 


СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

1. Майоров С.А., Новиков Г.И., Структура электронных вычислительных машин. - Л.: Машиностроение. Ленингр. Отделение, 1979. -
384 с., ил.

2. Баранов С.И., Скляров В. А., Цифровые устройства на программируемых БИС с матричной структурой. - М.: Радио и связь, 1986. - 272 с, ил.

 

3. Угрюмов Е.П., Проектирование элементов и узлов ЭВМ: Учеб.
Пособие для спец. ЭВМ вузов. - М.: Высш. шк., 1987. - 318 с, ил.

4. ДСТУ 3008-95. «Звіти у сфері науки і техніки. Структура та
правила оформлення».

 

 

ПРИЛОЖЕНИЕ А

Листинг программы

---------------

-- unit.vhd

---------------

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_unsigned.all;

 

entity OU is

generic (n:natural:=8);

port(-- n = 8

clk,rst:in std_logic;

d1:in std_logic_vector(2*n-1 downto 0);

d2:in std_logic_vector(n-1 downto 0);

f:in std_logic;

y:in std_logic_vector(22 downto 1);

x:out std_logic_vector(9 downto 1);

DBUS:out std_logic_vector(2*n-1 downto 0)

);

end OU;

 

--}} End of automatically maintained section

 

architecture OU of OU is

--use ieee.std_logic_unsigned.all;

signal A:std_logic_vector(2*n downto 0);

signal B:std_logic_vector(n downto 0);

signal C:std_logic_vector(n+1 downto 0); --Po GSA 7

signal CnT:std_logic_vector(3 downto 0);

--signal CnTu:std_logic_vector(2 downto 0);

signal TgA,IRQ1,IRQ2:std_logic;

--signal stop:std_logic:= '0';

begin

process (clk,rst) is

begin

if rst='0' then A <=(others=>'0');

B <=(others=>'0');

C <=(others=>'0');

Cnt <= "1000";

-- CnT <= "111";

elsif rising_edge(clk) then

if y(1)='1' then A <= ("00000000" & d1(2*n-1 downto 0));

elsif y(15)='1' then A <= ("00000000" & d1(n-1 downto 0));

elsif y(3)='1' then A(2*n downto n) <= IEEE.std_logic_signed."+"(A(2*n downto n), (not B));

A(2*n-1 downto n-1) <= IEEE.std_logic_signed."+"(A(2*n downto n),1);--****

elsif y(8)='1' then A(2*n downto n) <= IEEE.std_logic_signed."+"(A(2*n downto n), B);

elsif y(5)='1' then A <= '0'&A(2*n-1 downto 0) & '0';

elsif y(17)='1' then A <= '0'&A(n-1 downto 0) & '0';

end if;

 

if y(2)='1' then B <= ("00000000" & d2(n-1 downto 0));

elsif y(16)='1' then B <= d2(n-1 downto 0);

elsif y(20)='1' then B <= '0' & C(1 downto 0) & B(n-1 downto 2);

end if;

 

if y(6)='1' then C <=(others=>'0');

elsif y(9)='1' then C <= '0'&C(n-2 downto 0)&(not A(2*n));

elsif y(19)='1' then C(n+1 downto 0) <= IEEE.std_logic_signed."+"(C(n+1 downto 0), (not A));

C(n downto -1) <= IEEE.std_logic_signed."+"(C(n+1 downto 0),1);--****

elsif y(18)='1' then C(n+1 downto 0) <= IEEE.std_logic_signed."+"(C(n+1 downto 0), A);

elsif y(21)='1' then c <= '0' & C(n+1)& C(n+1)& C(n+1 downto 2);

end if;

 

if y(7)='1' then CnT<="1000";

elsif y(10)='1' then CnT <= CnT - 1;

end if;

 

if y(4)='1' then TgA <= A(2*n);

end if;

 

if y(13)='1' then IRQ1 <= '1'; assert (0>1) report "IRQ1 was thrown" severity failure;

elsif y(14)='1' then IRQ2 <= '1'; assert (0>1) report "IRQ2 was thrown" severity failure;

end if;

 

end if;

end process;

----------------------

-- IRQ1 <= '1' when y(13)='1';--assert (0>1) severity failure;

-- IRQ2 <= '1' when y(14)='1';--assert (0>1) severity failure;

 

DBUS <= C(n-1 downto 0) & B(n-1 downto 0) when y(22)='1'else

--DBUS <=

C(n-1 downto 0) when y(11)='1' else

A(2*n-1 downto n) when y(12)='1' else (others=>'Z');

x(1) <= f;

x(2) <= '1' when B = "000000000" else '0';

x(3) <= A(2*n);

x(4) <= TgA;

x(5) <= '1' when CnT = "000" else '0';

x(6) <= (not B(1)) and (C(n+1) xor B(0));

x(7) <= ((not C(n+1)) and B(1) and (not B(0))) or (C(n+1) and (not B(1))and B(0));

x(8) <= B(1) and (C(n+1) xor B(0));

x(9) <= C(n+1);

end OU;

 

 

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.std_logic_unsigned.all;

 

entity CU is

port(

clk,rst:in std_logic;

x:in std_logic_vector(9 downto 1);

y:out std_logic_vector(22 downto 1)

);

end CU;

 

architecture CU of CU is

subtype TCommand is std_logic_vector(10 downto 0);

type TROM is array (0 to 37) of TCommand;

constant ROM:TROM:= (

 

"10001010110",--0

"00001001000",--1

"10010001110",--2

"00010000000",--3

"10011010000",--4

"00011010011",--5

"10100010010",--6

"00010000000",--7

"00011011100",--8

"10101010100",--9

"10100001100",--10

"00100000000",--11

"00101100000",--12

"10000000000",--13

"00110000000",--14

"10000000000",--15

"00111000000",--16

"10000001111",--17

"00100000000",--18

"10000001000",--19

"00000010000",--20

"10000000110",--21

"01000101011",--22

"10110011111",--23

"01010000000",--24

"01100110100",--25

"10101100101",--26

"11001011101",--27

"01010000000",--28

"00000111000",--29

"10000000000",--30

"10111100010",--31

"01001000000",--32

"10000011000",--33

"11000100100",--34

"01011000000",--35

"10000011001",--36

"10000010111");--37

 

signal RegCom:TCommand;

signal PC:integer;

 

begin

process(rst,clk) is

variable PCv:integer range 0 to 37;

begin

if rst='0' then PCv:=0;

elsif rising_edge(clk) then

if RegCom(10)='1' and ((x and RegCom(9 downto 6))="0000") then

PCv:=conv_integer(RegCom(5 downto 0));

else

PCv:=PCv+1;

end if;

end if;

RegCom<=ROM(PCv);

PC<=PCv;

end process;

y <= RegCom(9 downto 0) when RegCom(10)='0' else (others=>'0');

 

end CU;

----------------

--cpu.vhd

----------------

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use work.all;

 

entity CPU is

port(

clk,rst:in std_logic;

d1:in std_logic_vector(15 downto 0);

d2:in std_logic_vector(7 downto 0);

F:in std_logic;

DBUS:out std_logic_vector(15 downto 0)

);

end CPU;

 

--}} End of automatically maintained section

 

architecture cpu of cpu is

component OU

port(

clk,rst:in std_logic;

d1:in std_logic_vector(15 downto 0);

d2:in std_logic_vector(7 downto 0);

f:in std_logic;

y:in std_logic_vector(22 downto 1);

x:out std_logic_vector(9 downto 1);

DBUS:out std_logic_vector(15 downto 0)

);

end component;

component CU

port (

clk,rst:in std_logic;

x:in std_logic_vector(9 downto 1);

y:out std_logic_vector(22 downto 1)

);

end component;

signal y: std_logic_vector (22 downto 1);

signal x: std_logic_vector (9 downto 1);

signal nclk: std_logic;

begin

nclk <= not clk;-- after 10 ns;

dd1:OU port map (nclk,rst,d1,d2,f,y,x,DBUS);

dd2:CU port map (clk,rst,x,y);

end cpu;

 

 


Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.044 с.