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

Учебное пособие 800578

.pdf
Скачиваний:
10
Добавлен:
01.05.2022
Размер:
6.2 Mб
Скачать

when 1536 =>ip<=r+1;

when 1537=>a<=b; ip<=ip+1; when 1538=>b<=a; ip<=ip+1; when 1539=>a<=b;b<=a; ip<=ip+1; when 1540=>a<=a+b; ip<=ip+1; when 1541=>a<=a-b; ip<=ip+1; when 1542=>a<=a and b; ip<=ip+1; when 1543=>a<=a or b; ip<=ip+1; when 1544=>a<=a xor b; ip<=ip+1; when 1545=>a<=a-1; ip<=ip+1; when others=>ip<=ip+1;

end case; end case; end if;

end process; end a;

Пример 1. Управляющий автомат на языке VHDL

Рис.4.3. Файл конфигурации ПЗУ для тестирования команды обращения к подпрограммам CALL и возврата RET

Рассмотрим вариант процессора без использования управляющего автомата. С этой целью регистровые команды 04xxH, 05xxH, 0601H-0609H предлагается реализовать на тактируемом дешифраторе (пример 2), выполняющим функцию арифметически-логического устройства (АЛУ), а команды передачи управления JMP, JMPZ и обращения к подпрограммам с кодами 01xxH-03xxH, 0600H на 8-ми разрядном суммирующем счетчике адресов памяти команд (пример 3), тактируемым фронтом синхросигнала (рис.4.5).

171

172

Рис.4.4. Временная диаграмма работы процессора, с использованием управляющего автомата с циклом работы в два такта и мегафункции асинхронного ПЗУ. Отрабатываются регистровые команды и команда вызова подпрограммы с кодом 0305H (CALL) и команда возврата из подпрограммы 0600H (RET)

Счетчик содержит асинхронный сброс Reset. Активным является сигнал высокого уровня. Во вложенных ветвях оператора if происходит проверка условий и синхронная загрузка счетчика команд. Счетчик команд ip и регистр r при инициализации системы по сигналу Reset устанавливаются в состояние 0, после чего производит счет адресов памяти программ хранимых в ПЗУ. Регистр r выполняет функцию стека, в который заносится прежнее состояние счетчика команд. Из шины cmd[10..0], для счетчика команд выделяется поле cop[10..8] и поле data[7..0]. Поле cop означает код операции, который используется для идентификации команд

JMP, JMPZ и CALL. Для команды RET поле cop не формируется, а задается полный адрес на шине cmd "11000000000", это связано с тем, что 8 младших бит для команд JMP, JMPZ и CALL могут принимать любые значения, а для команды RET только указанный. Поле data содержит 8- разрядный операнд, который загружается в регистр команд.

ПЗУ реализовано с использованием мегафункции LPM_ROM. В табл.4.2 представлены сведения по общему числу задействованный ресурсов ПЛИС. В обоих случаях проект отображается в ПЛИС APEX20KE (EP20K30ETC144).

На рис.4.6 показано тестирование процессора.

Таблица 4.2 Общие сведения по числу задействованных ресурсов ПЛИС

APEX20KE

Номер проекта

Общее число

Общее число

D-

 

логических

используемых

триггеров

 

элементов

ESB-бит памяти

 

С использованием

198/1200

2816/24576

32

управляющего

(16 %)

(11 %)

 

автомата

 

 

 

Вариант с

164/1200

2816/24576

32

асинхронным ПЗУ

(13 %)

(11 %)

 

 

173

 

 

174

Рис.4.5. Тестовая схема микропроцессорного ядра без использования управляющего автомата с асинхронным ПЗУ (мегафункция LPM_ROM) в графическом редакторе САПР ПЛИС Quartus II версии 2.0

175

Рис.4.6. Временные диаграммы работы микропроцессорного ядра без использования управляющего автомата с мегафункцией асинхронного ПЗУ

175

LIBRARY ieee;

use ieee.std_logic_1164.all; use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all; ENTITY alu IS

PORT

 

(cmd

: IN STD_LOGIC_VECTOR (10 DOWNTO 0);

clk,res

: IN STD_LOGIC;

a,b

: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END alu;

ARCHITECTURE a OF alu IS

signal regA,regB: std_logic_vector(7 downto 0); BEGIN

PROCESS (clk,res) BEGIN

if (RES = '1') then

regA <="00000000"; regB <="00000000";

elsif (clk'event and clk='1') then case conv_integer(cmd) is

when 1024 to 1279 => regA<=cmd(7 downto 0); when 1280 to 1535 => regB<=cmd(7 downto 0); when 1537=>regA<=regB;

when 1538=>regB<=regA;

when 1539=>regA<=regB; regB<=regA; when 1540=>regA<=regA+regB;

when 1541=>regA<=regA-regB; when 1542=>regA<=regA and regB; when 1543=>regA<=regA or regB; when 1544=>regA<=regA xor regB; when 1545=>regA<=regA-1;

when others=> a<=regA; b<=regB; end case;

end if; a<=regA; b<=regB;

176

END PROCESS; END a;

Пример 2. Арифметически-логическое устройство процессора

LIBRARY ieee;

USE ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;

ENTITY counter IS

PORT(

 

 

clk

: IN STD_LOGIC;

reset

: IN

STD_LOGIC;

cmd

: IN STD_LOGIC_VECTOR(10 downto 0);

a

: INOUT STD_LOGIC_VECTOR(7 downto 0);

r

: INOUT STD_LOGIC_VECTOR(7 downto 0);

Qa,Qb

: OUT STD_LOGIC_VECTOR(7 downto 0));

END counter;

ARCHITECTURE a OF counter IS

SIGNAL pci,pc,pcplus,data,regA: STD_LOGIC_VECTOR(7 downto 0); SIGNAL cop: STD_LOGIC_VECTOR(2 downto 0);

BEGIN regA<=a;

cop<=cmd(10 downto 8); data<=cmd(7 downto 0); process(clk,reset,cop,data,a) begin

if (reset = '1') then

pci <=(others=>'0'); r <=(others=>'0');

elsif (clk'event and clk='1') then if

cmd="001" then pci<=data; --JMP H1 else if

(cop="010" and conv_integer(regA)=0) then pci<=data; --JMPZ H2 else if

cop="011" then r<=pci; pci<=data;--CALL H3

177

else if

cmd="11000000000" then pci<=r+1; --RET H6 else pci<=pci+1;

end if; end if; end if; end if; end if; END PROCESS;

Qa <= pci; Qb <=data; a<=regA; END a;

Пример 3. Счетчик адресов памяти команд процессора с асинхронным сбросом

Рассмотрим вариант реализации проектируемого процессора с использованием асинхронного ОЗУ (рис.4.7). Для этого воспользуемся мегафункцией LPM_RAM_IO. Для того, что бы ОЗУ выполняло функцию ПЗУ, необходимо сигнал разрешения записи we ―посадить‖ на землю, т.к. активным является сигнал высокого уровня, а сигнал разрешения вывода outenab подключить к питанию. На рис.4.8 показан файл конфигурации ОЗУ для тестирования команды JMPZ c кодом 0205H. По команде 0205H осуществляется переход по адресу, заданному младшим байтом команды (на адрес в ОЗУ под номером 5, где хранится команда 0403H), если содержимое регистра A равно нулю. Чтобы содержимое регистра А оказалось равным нулю, необходимо воспользоваться регистровыми командами 0405H и 0505H, для загрузки в регистры А и В числа 5, а затем с помощью команды 0605H (SUB A,B) осуществить операцию A-B (рис.4.9).

Данный вариант процессора, реализованный в базисе ПЛИС, можно отнести к классу RISC-процессоров, у которых все команды выполняются за один такт синхрочастоты.

178

179

Рис.4.7. Тестовая схема процессора без использования управляющего автомата с асинхронным ОЗУ (мегафункция LPM_RAM_IO) в графическом редакторе САПР ПЛИС

Quartus II версии 2.0

Рис.4.8. Файл конфигурации ОЗУ для тестирования команды JMPZ

180

Рис.4.9. Временные диаграммы работы микропроцессорного ядра с мегафункцией асинхронного ОЗУ. Тестирование команды условного перехода JMPZ

180