Проектирование учебного процессора для реализации в базисе ПЛИС

Тип работы:
Реферат
Предмет:
ТЕХНИЧЕСКИЕ НАУКИ


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Андрей СТРОГОНОВ, д. т. н.
andreis@hotmail. ru
Проектирование учебного процессора
для реализации в базисе ПЛИС
Микропроцессорные ядра представляют важный класс вычислительных заготовок, так как главным образом от их качеств зависят основные технические и потребительские свойства систем на кристалле. Эти заготовки разделяются по степени гибкости настройки под условия потребителя на программные («мягкие», описанные на языке HDL), жесткие (логическая схема) и аппаратные («твердые» маски под определенную технологию) [1].
Программные заготовки можно легко подстраивать к условиям нового проекта, они обладают высоким быстродействием и независимы от технологии. Их реализация в ПЛИС (например, 8-разрядное микропроцессорное ядро PicoBlaze для реализации в базисе ПЛИС семейств Spartan и Virtex [2]) позволяет ускорить процесс разработки микропроцессорных систем. Наиболее важными потребительскими свойствами вычислительных заготовок процессоров являются повторяемость, быстродействие, аппаратурные затраты.
Путем несложной перенастройки «мягкой» заготовки можно получить ряд модификаций микроконтроллера с различным сочетанием объема памяти, периферийных устройств, источников прерывания и т. п. Такой процессор можно реализовать в ПЛИС различных фирм. Описание процессора на языке УИБЬ позволяет не только сделать ее перенастраиваемой и независимой от технологии, но и выполнять ее моделирование и синтез на симуляторах и средствах синтеза различных фирм.
В работах [3−6] рассматривается проектирование процессоров для реализации в базе
ПЛИС с использованием языков аппаратурных средств VHDL [3, 4] и AHDL [6]. Интересный вариант построения RISC-процессора на языке VHDL описан в работе [1]. Проект процессора ориентирован на реализацию в ПЛИС Virtex-E фирмы Xilinx. Процессор имеет структуру с распределенным управлением, развитую систему команд и может быть использован в качестве основы ультра-быстрого процессора 80С51.
Воспользуемся системой команд гипотетического синхронного процессора, реализованного с помощью конечного автомата, с циклом работы в два такта [3]. При разработке системы команд процессора автор работы [3] использовал слабое кодирование. В таблице 1 представлена система команд процессора с синхронной архитектурой [3]. Процессор основан на использовании раздельных шин данных и команд.
Предлагаемый в работе [3] процессор способен работать с синхронным ОЗУ. Это обеспечивается употреблением оператора case, который используется в ветви оператора if при детектировании атрибута переднего фронта синхроимпульса clk и позволяет организовать цикл работы в два такта.
В качестве примера воспользуемся процессором, представленным в работе [3], и реализуем его в ПЛИС фирмы Altera APEX20KE с асинхронным ПЗУ. Реализация синхронного процессора с циклом работы в два такта возможна при использовании более современных семейств ПЛИС фирмы Altera — Stratix и Сус1опе.
На рис. 1 показана тестовая схема управляющего автомата процессора в графическом редакторе САПР ПЛИС Quartus II, а на рис. 2 — содержимое конфигурационного файла ПЗУ. В описание процессора на языке VHDL добавлен асинхронный сброс регистров А, В и счетчика команд на регистре ip. Как и в работе [3], декодирование перемен-
Таблица 1. Система команд процессора с синхронной архитектурой [3]
Код операции Мнемоника Описание
0 NOP Нет операции
01xxH JMP Безусловный переход по адресу, заданному младшим байтом команды
02xxH JMPZ Переход по адресу, заданному младшим байтом команды, если содержимое регистра A равно нулю
03xxH CALL Вызов подпрограммы по адресу, заданному младшим байтом команды
04xxH MOV A, xx Непосредственная загрузка в регистр A значения, заданного младшим байтом команды
05xxH MOV B, xx Непосредственная загрузка в регистр B значения, заданного младшим байтом команды
0600H RET Возврат из подпрограммы
0601H MOV A, B Загрузка в регистр A значения, содержащегося в регистре B
0602H MOV B, A Загрузка в регистр B значения, содержащегося в регистре A
0603H XCHG A, B Обмен местами значений в регистрах A и B
0604H ADD A, B Сложение значений в регистрах A и B, результат помещается в A
0605H SUB A, B Вычитание значений в регистрах A и B, результат помещается в A
0606H AND A, B Побитное логическое И значений в регистрах A и B, результат помещается в A
0607H OR A, B Побитное логическое ИЛИ значений в регистрах A и B, результат помещается в A
0608H XOR A, B Побитное логическое ИСКЛЮЧАЮЩЕЕ ИЛИ значений в регистрах A и B, результат помещается в A
0609H DEC A Декремент регистра, А (вычитание 1)
Рис. 1. Тестовая схема процессора в графическом редакторе САПР ПЛИС Quartus II с использованием управляющего автомата и асинхронного ПЗУ
Рис. 2. Файл конфигурации ПЗУ для тестирования команды обращения к подпрограммам CALL и возврата RET
ной-селектора cmd осуществляется с помощью оператора case.
Оператор case, подобно оператору if, задает ветвление алгоритма. В этом операторе вычисляется заданное выражение expression, по его значению выбирается одна из альтернатив choices (constant_value) и исполняются соответствующие последовательные операторы statement. В каждом из наборов альтернатив constant_value можно записать один или большее число последовательных операторов.
Значения в списках разделяются символом «I». Когда значение выражения встречается в одном из списков значений, выполняется соответствующая последовательность операторов. Если значение выражения не присутствует ни в одном из списков, то выполняется список операторов, соответствующий ветви when others.
Синтаксис оператора case:
Функция conv_integer (cmd) переводит вектор в десятичное число отдельных кодов. При каждом допустимом значении кода команды происходят различные действия, которые состоят в присвоении регистрам новых значений в соответствии с описанием команд. Счетчик команд (регистр) не обновляется автоматически, поэтому в каждом варианте кода команды присваивание счетчику нового значения указывается явно [3]. Процессор ограничивается двумя регистрами общего назначения (А и В), а также имеет указатель инструкций 1р и регистр г для хранения адреса, с которого происходит вызов подпрограммы, поддерживает минимальный набор ко-
манд: команда пересылки «регистр — регистр" — команды непосредственной загрузки- команда безусловного перехода к новому адресу- команды перехода по условию- набор арифметико-логических операций [3]. Приведем пример реализации на языке VHDL управляющего автомата:
library ieee-
use ieee. std_logic_1164. all- use ieee. std_logic_arith. all- use ieee. std_logic_unsigned. aH- entity proc is
port (ip: inout std_logic_vector (7 downto 0) — cmd: inout std_logic_vector (15 downto 0) — clk, res: in std_logic- a: inout std_logic_vector (7 downto 0) — b, r: inout std_logic_vector (7 downto 0)) — end proc-
architecture a of proc is signal stage: std_logic- begin
process (clk)
begin
if (res = '-1'-) then
a & lt-="0" — b & lt-="0" — ip & lt-="0" — elsif clk'-event and clk-1'- then case stage is when '-0'--& gt- stage& lt--'-1'-- when others=& gt- stage& lt-='-0'-- case conv_integer (cmd) is when 0-& gt- ip & lt-- ip+1- when 256 to 511 -& gt-ip<--cmd (7 downto 0) — when 512 to 767 -& gt-if conv_integer (a)-0
then ip& lt-=cmd (7 downto 0) — else ip& lt--ip+1- end if-
when 768 to 1023 =& gt-r<-=ip- ip& lt-=cmd (7 downto 0) —
when 1024 to 1279 -& gt- a& lt--cmd (7 downto 0) — ip& lt--ip+1-
when 1280 to 1535 -& gt- b& lt--cmd (7 downto 0) — ip& lt--ip+1-
when 1536 =& gt-ip<-=r+1-
when 1537-& gt-a<--b- ip& lt--ip+1-
when 1538-& gt-b<--a- ip& lt--ip+1-
when 1539-& gt-a<--b-b<--a- ip& lt--ip+1-
when 1540-& gt-a<--a+b- ip& lt--ip+1-
when 1541-& gt-a<--a-b- ip& lt--ip+1-
when 1542-& gt-a<--a and b- ip& lt--ip+1-
when 1543=& gt-a<-=a or b- ip& lt-=ip+1-
when 1544-& gt-a<--a xor b- ip& lt--ip+1-
when 1545-& gt-a<--a-1- ip& lt--ip+1-
when others=& gt-ip<-=ip+1-
end case-
end case-
end if-
end process-
end a-
Наиболее сложными являются команды передачи управления JMP и JMPZ, а также команда обращения к подпрограммам CALL и команда возврата из подпрограмм RET. Временные диаграммы на рис. 3 демонстрируют принцип работы управляющего автомата с асинхронным ПЗУ при отработке команд CALL (0305H) и RET (0600H). При нормальной последовательности работы процессора отрабатываются регистровые команды. Последовательно загружаются регистры, А и В. В регистр, А загружается число 1D (1H), а в ре-
гистр В — число 17D (11H). По команде 0305H происходит запись содержимого счетчика команд ip в регистр r (2D) и загрузка в счетчик команд числа 5D. Таким образом, процессор начнет выполнять подпрограмму, хранящуюся в ПЗУ, с адреса 5H. По указанному адресу извлекается регистровая команда 0403H. Происходит загрузка в регистр A числа 3H, командой 0404H — загрузка числа 4H. Посредством следующей команды с кодом 0604Н произойдет сложение содержимых регистров с сохранением результата в регистре, А (число 21D). Далее будут отработаны команды 0406Н и 0407Н. По команде возврата из подпрограммы 600Н произойдет изменение содержимого счетчика с 10D на 2D+1D, то есть на 3D.
Для использования устаревших серий ПЛИС в учебных проектах предлагается отказаться от цикла работы в два такта. С этой целью регистровые команды 04xxH, 05xxH, 0601H-0609H предлагается реализовать на тактируемом дешифраторе, выполняющем функцию арифметически-логического устройства (АЛУ):
LIBRARY ieee- use ieee. std_logic_1164. aH- 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
egA & lt-="0" — regB & lt-="0" — elsif (clk'-event and clk-T) then case conv_integer (cmd) is when 1024 to 1279 =& gt- regA& lt-=cmd (7 downto 0) — when 1280 to 1535 =& gt- regB& lt-=cmd (7 downto 0) — when 1537=& gt-regA<-=regB- when 1538=& gt-regB<-=regA- when 1539=& gt-regA<-=regB- regB& lt-=regA- when 1540=& gt-regA<-=regA+regB- when 1541=& gt-regA<-=regA-regB- when 1542=& gt-regA<-=regA and regB- when 1543=& gt-regA<-=regA or regB- when 1544=& gt-regA<-=regA xor regB- when 1545=& gt-regA<-=regA-1- when others=& gt- a& lt-=regA- b& lt-=regB- end case-
end if-
a& lt-=regA-
b& lt-=regB-
END PROCESS-
END a-
А команды передачи управления JMP, JMPZ и обращения к подпрограммам с кодами 01xxH-03xxH, 0600H на 8-разрядном суммирующем счетчике адресов памяти команд, тактируемом фронтом синхросигнала (рис. 4), выглядят так:
Г VUua Л ь, 20 pn. & lt-0pn» «pn, 80 On. 100,0 m 1200 n* 1*0 Or, 1 iso On, 110,0*4 200,0 rw 220On* 2*0,0 nj
L Ор.
ш И1 П ¦
? & lt-* '- во LLr- 1 _ -L_ LjTn ! J~T~I і 1 -1 f-1 гн_і 1 1 1 і 1 і 1 11 1
а LU о i SO I Р-. x: _ n =3= cc _ x X & gt-- в •: •
?а О and м 0*01 f. X. til JHfflgi jmgglZfr-- tw. IDt. ttet X. -C 8W71. 1X1 Щ
і • SO l 0 с i 1 — X 3, *. Л. X _2L. A і t:
. л В ь SO 1У -. 17., 1 ft! -: і: 1|| і
3 а г so r • ¦ -L & gt-
Рис. 3. Временная диаграмма работы процессора с использованием управляющего автомата и асинхронного ПЗУ (отрабатываются регистровые команды и команда вызова подпрограммы с кодом 0305H (CALL) и команда возврата из подпрограммы 0600H (RET))
CASE_____expression IS
WHEN_______constant_value =& gt-
__statement-
__statement-
WHEN_______constant_value =& gt-
__statement-
__statement-
WHEN OTHERS =& gt-
__statement-
__statement-
END CASE-
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-
Рис. 4. Тестовая схема процессора без использования управляющего автомата с асинхронным ПЗУ в графическом редакторе САПР ПЛИС Quartus II
Рис. 5. Временные диаграммы работы процессора без использования управляющего автомата с асинхронным ПЗУ
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, data, regA: STD_LOGIC_VECTOR (7 downto 0) — SIGNAL cop: STD_LOGIC_VECTOR (2 downto 0) —
BEGIN
regA& lt-=a-
cop& lt-=cmd (10 downto 8) — data& lt-=cmd (7 downto 0) —
-- cmd 11 bit wide -- 11 bit encoding -- JMP: 001 & lt-data>-
-- JMPZ: 010 & lt-data>-
-- CALL: 011 & lt-data>-
-- RET: 110 0
process (clk, reset)
begin
if (reset = '-1'-) then
pci & lt-=(others=>-'-0'-) — r & lt-=(others=>-'-0'-) — elsif (clk'-event and clk=T) then if
cop="001″ then pci& lt-=data- elsif
(cop="010″ and conv_integer (regA)=0) then pci& lt-=data- elsif
cop="011″ then r& lt-=pci- pci& lt-=data- elsif
cmd="11 000 000 000″ then pci& lt-=r+1- else pci& lt-=pci+1-
end if- end if- end process-
Qa & lt-= pci-
Qb & lt-=data- a& lt-=regA-
END a-
Счетчик содержит асинхронный сброс Reset. Активным является сигнал высокого уровня. Во вложенных ветвях оператора if происходит проверка условий и синхронная загрузка счетчика команд.
Оператор if используется для ветвления алгоритма по различным условиям. Наиболее простой синтаксис имеет вид:
IF___expression THEN___statement-
END IF-
Вначале проверяется булево выражение boolean-expression, и если оно имеет значение
true, то исполняется последовательный оператор sequential-statement. Возможно использовать предложение else c другим последовательным оператором sequential-statement, который исполняется, если булево выражение имеет значение false. В САПР Quartus II рекомендуется использовать следующий синтаксис оператора if (шаблон):
IF__expression THEN
___statement-
___statement-
ELSIF___expression THEN
___statement-
__statement-
ELSE
__statement-
__statement-
END IF-
Счетчик команд ip и регистр r при инициализации системы по сигналу Reset устанав-
Номер проекта ПЛИС
ливаются в состояние 0, после чего производится счет адресов памяти программ, хранимых в ПЗУ. Регистр г выполняет функцию стека, в который заносится прежнее состояние счетчика команд. Из шины cmd[10. 0] для счетчика команд выделяется поле cop[10. 8] и поле data[7. 0]. Поле cop означает код операции, который используется для идентификации команд JMP, JMPZ и CALL. Для команды RET поле cop не формируется, а задается полный адрес на шине cmd „11 000 000 000″, это связано с тем, что 8 младших бит для команд JMP, JMPZ и CALL могут принимать любые значения, а для команды RET — только указанное. Поле data содержит 8-разрядный операнд, который загружается в регистр команд.
ПЗУ реализовано с использованием мегафункции LPM_ROM. В таблице 2 представлены сведения по общему числу задействованных ресурсов ПЛИС. В обоих случаях проект отображается в ПЛИС APEX20KE. На рис. 5 показано тестирование процессора.
Рассмотрим вариант реализации проектируемого процессора с использованием асинхронного ОЗУ (рис. 6). Для этого воспользуемся мегафункцией LPM_RAM_IO. Для того чтобы ОЗУ выполняло функцию ПЗУ, необходимо сигнал разрешения записи we „посадить“ на „землю“, так как активным является сигнал высокого уровня, а сигнал разрешения вывода outenab подключить к питанию. На рис. 7 показан файл конфигурации ОЗУ для тестирования команды JMPZ c кодом 0205H. По команде 0205H осуществляется переход по адресу, заданному младшим байтом команды (на адрес в ОЗУ под номером 5, где

Add“ 1 „0 00 р405 И 1 1 *3 1 +4 1 *5 1 ** 1 *7 1
0505 0605 0205 0402 0403 0000 0000
Рис. 7. Файл конфигурации ОЗУ для тестирования команды JMPZ
Общее число Общее число
логических элементов используемых ESB-бит
С использованием управляющего автомата EP20K30ETC144−1 198/1200 (16%) 2816/24 576 (11%) 32
Вариант с асинхронным ПЗУ EP20K30ETC144−1 164/1200 (13%) 2816/24 576 (11%) 32
стало (Я
¦ И -… ,_____'-. рщ. & lt-** 01
X ¦ • •_____!- -r. X '- ' '- '-¦ '-_____!-----
Рис. 6. Тестовая схема процессора без использования управляющего автомата с асинхронным ОЗУ в графическом редакторе САПР ПЛИС Quartus II
Таблица 2. Общие сведения по числу задействованных ресурсов ПЛИС APEX20KE
г ~ Г ре“ П О Щш Щп- ЗДп, Щп Щт Щп, |
N»?*
г. md 61
с dk во ('- f-I '-«i 1 i
в 53 end и «Сб -& lt- эд- ЙВ :» ад
!- оа с и оо п ! | 111 «У 1 в ft т ! } «.
14 В лы» ИЮ В 1
14 (9 • нею 00 1! х [Ж '- '- fP ! '- '- Ж !
к Ы Ь ноо 00, у.. 08 '-
'- ¦ m. н m
Рис. 8. Временные диаграммы работы процессора с асинхронным ОЗУ (тестирование команды JMPZ)
хранится команда 0403H), если содержимое регистра A равно нулю. Чтобы содержимое регистра, А оказалось равным нулю, необходимо воспользоваться регистровыми командами 0405H и 0505H для загрузки в регистры, А и В числа 5, а затем с помощью команды 0605H (SUB A, B) осуществить операцию A-B (рис. 8).
Данный вариант процессора, реализованный в базисе ПЛИС, можно отнести к классу RISC-процессоров, у которых все команды выполняются за один такт синхрочастоты. Процессор может быть модифицирован путем наращивания блока регистров, добавления блока управления прерываний, добавления блока управления ввода/вывода и других функциональных блоков. Вариант с асинхронным ПЗУ, реализованный в ПЛИС APEX20KE EP20K30ETC144−1, занимает всего лишь 13% от общего числа логических элементов и способен работать на частоте 60 МГц. Модифицированный вариант оказался на 3% компактнее по числу задействованных ресурсов ПЛИС и способен работать с морально устаревшими сериями ПЛИС. Однако процессор без исполь-
зования управляющего автомата может быть пригоден для учебных целей. Недостатком является невозможность поддержки современной концепции синхронного кодирования при разработке микропроцессорных ядер. ¦
Литература
1. Сергиенко А. М. УИБЬ для проектирования вычислительных устройств. Киев: ООО «ТИД «ДС»», 2003.
2. Зотов В. Ю. Проектирование встраиваемых микропроцессорных систем на основе ПЛИС фирмы Х1ЬШХ. М.: Горячая линия — Телеком, 2006.
3. Тарасов И. Проектирование конфигурируемых процессоров на базе ПЛИС. Часть I // Компоненты и технологии. 2006. № 2.
4. Тарасов И. Проектирование конфигурируемых процессоров на базе ПЛИС. Часть II // Компоненты и технологии. 2006. № 3.
5. Каршенбойм И. Микропроцессор своими руками // Компоненты и технологии. 2002. № 6−7.
6. Каршенбойм И. Микропроцессор своими руками-2. Битовый процессор // Компоненты и технологии. 2003. № 7−8.

ПоказатьСвернуть
Заполнить форму текущей работой