Перейти к содержанию
    

взможно ли на vhdl за один такт сделать всё ? :)

взможно ли на vhdl за один такт сделать всё:

1.выборка команды из памяти

2.декодирование команды

3.исполнение команды

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это возможно сделать при любом способе описания схемы. Все зависит от размера такта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

взможно ли на vhdl за один такт сделать всё:

1.выборка команды из памяти

2.декодирование команды

3.исполнение команды

как 2 пальца ......

вопрос весь в тактухе, ведь не даром конвеерные схемы придумали ....

:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно по подробнее ?

я только учусь, решил учиться - с попытки написать что то на подобии простого risc процесора: выборка команды и данных из памяти - запись данных в акамулятор, выборка команды и адреса из памяти - запись данных из акамулятора в пямять.

и вот очень хочеться научиться делать это за один такт, только вот не знаю с какой стороны подойти :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а можно по подробнее ?

я только учусь, решил учиться - с попытки написать что то на подобии простого risc процесора: выборка команды и данных из памяти - запись данных в акамулятор, выборка команды и адреса из памяти - запись данных из акамулятора в пямять.

и вот очень хочеться научиться делать это за один такт, только вот не знаю с какой стороны подойти :(

сходите для начала к иосифу

http://iosifk.narod.ru/articles.html

у него есть описание простого МК,

потом на опенкорес или

http://tams-www.informatik.uni-hamburg.de/vhdl/

раздел микропроцессоры

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да возможно советую начать с изучения простых микроконтроеров

Nicrochip, Atmel TI (MSP 430) почитайте их описания, должно помочь,

еще учтите, что то что работает в моделсим не всегда работает в железе

 

удачи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

взможно ли на vhdl за один такт сделать всё:

1.выборка команды из памяти

2.декодирование команды

3.исполнение команды

 

Если не делать задержки на логических элементах, то скорее всего нет. Проблема будет в том, что 1. и 3. подразумевают доступ к внешней памяти, т.е. в одном такте надо будет генерить минимум 2 строба доступа к памяти, разнесенных во времени. Кроме того, любой строб доступа в память, выходящий из дешифратора команд, будет иметь иголки за счет внутренних задержек в этом дешифраторе, следовательно надо либо щелкать строб триггером, либо использовать синхронную память - в любом случае за 1 такт не справиться.

Т.е. я объясняю так подробно, чтобы было понятно - дизайн д.б. синхронным.

Если операнды будут находится во внутренних регистрах, то можно - но писать в рег надо по фронту след. клока - т.е. опять синхронный дизайн.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема будет в том, что 1. и 3. подразумевают доступ к внешней памяти, т.е. в одном такте надо будет генерить минимум 2 строба доступа к памяти, разнесенных во времени.

кто сказал ? тут зависеть будет от архитектуры и от ширины слова команды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема будет в том, что 1. и 3. подразумевают доступ к внешней памяти, т.е. в одном такте надо будет генерить минимум 2 строба доступа к памяти, разнесенных во времени.

кто сказал ? тут зависеть будет от архитектуры и от ширины слова команды.

Гм-м-м... для выборки команды надо поиметь цыкл шыны, это раз. Результат надо тоже сохранять, хош-нехош тоже строб нужен, особенно, если результат пишем в память-же. Да ещё к началу следующего такта должен быть известен адрес следуюсчей команды. Тут уже архитектура и длина слова не помощники. Вернее, архитектура и рулит. Особенно в части конвейеризаццыи. 2-stage pipeline а ля АВР будет само то, хотя есть монстеры ваяющие без синхронизаццыи. Но на то оне и монстры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гм-м-м... для выборки команды надо поиметь цыкл шыны, это раз. Результат надо тоже сохранять, хош-нехош тоже строб нужен, особенно, если результат пишем в память-же. Да ещё к началу следующего такта должен быть известен адрес следуюсчей команды. Тут уже архитектура и длина слова не помощники. Вернее, архитектура и рулит. Особенно в части конвейеризаццыи. 2-stage pipeline а ля АВР будет само то, хотя есть монстеры ваяющие без синхронизаццыи. Но на то оне и монстры.

хмммм что то тут не совсем понятно.

считаем память асинхронной, результаты храним только в регистрах.

выставили адресс памяти программ 1 такт.

считали програмное слово - декодировали команду - выставили сигналы управления икременировали адресс.

хлопнули все это дело в регистры - 1 такт

и т.д.

в этом случае джампы обрабатываються за 1 такт.

Да упадет часотка., за сим делаем 1 уровень конвеера и получаем джампы за 2 такта. (1 такт уходит на перегрузку конвеера).

 

А насчет авр , окуда там 2 - stage piepline ? ИМХО 1 уровень конвееризации там.

если бы было больше, тогда следующая команда после джампа обрабатывалась бы 2 такта а не 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а насчет длинны програмного слова - дык что бы избежать многобайтных команд ее и делают больше (что бы грести константы можно было одновременно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Larionov

Ищём и читаем "Структурная организация и архитектура компьютерных систем" от Ульяма Столлинга. Затем статьи из "КиТ" по NIOS и MicroBlaze, затем анализируем ветку на opencores.org по CPU и просматривает реализации AVR, Sparc и т.п. решения.

А вот присать свой процессор, imho, не стоит. Вон у Сергиенко классный учебный процессор есть - разберитесь.

З.Ы. Вопрос ОЧЕНЬ размытый - ответить тяжело...:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Larionov

Ищём и читаем "Структурная организация и архитектура компьютерных систем" от Ульяма Столлинга. Затем статьи из "КиТ" по NIOS и MicroBlaze, затем анализируем ветку на opencores.org по CPU и просматривает реализации AVR, Sparc и т.п. решения.

А вот присать свой процессор, imho, не стоит. Вон у Сергиенко классный учебный процессор есть - разберитесь.

З.Ы. Вопрос ОЧЕНЬ размытый - ответить тяжело...:)

 

начну с конца - про размытость вопроса:

допустим есть некий процесор и память,

 

в памяти по адресу 0 хранится команда 0001-00000001

где 0001 - код команды - загрузить 00000001 в акамулятор

как сделать что бы:

 

при clk=1

на адресе 00

на дате должно быть 0001-00000001

декодирование

выставить управляющие сигналы. ( чтение, запись, etc )

конец.

 

при clk=0

акамулятор <= дата (7 downto 0)

( то есть в акамулятор должно быть записано 00000001 )

выставить управляющие сигналы. ( чтение, запись, etc )

адрес <= адрес + 1

конец.

 

и второй случай:

в памяти по адресу 1 хранится команда 0010-00000010

где 0010 - код команды - записать данные из акамулятора

в память по адресу 00000010.

 

как сделать что бы:

при clk=1

на адресе 01

на дате должно быть 0010-00000010

декодирование

выставить управляющие сигналы. ( чтение, запись, etc )

конец.

 

при clk=0

на адресе 10

дата <= акамулятор ( запись из акамулятора в память по адресу 10 )

выставить управляющие сигналы. ( чтение, запись, etc )

адрес <= адрес + 1

конец.

 

 

Вроде всё как бы просто, но сколько не пробовал - чёт не получаеться :(

Знаний пока что не хватает :(

 

По поводу Сергиенко - вчера купил его книжку - изучаю, но скажем так не фонтан как написана :) Проц его бегло просматривал - для меня щас пока что нужно что нить попроще - чтоб легче было разобраться.

 

Где можно слить:

"Структурная организация и архитектура компьютерных систем" от Ульяма Столлинга. ?

 

Реализации AVR - поизучаю.

 

Написать свой проц - мечта лет так уже 8, но как то всё руки и мозги не доходили :)

Это для души, знаю что если не сделаю - будет мучить мозг :)

Так уже было когда сам аон писал для AVR, хоть и достал тогда всех на телесистема :) ( огромное всем им спасибо за терпение и советы ) но зато через два месяца был уже вполне рабочий вариант и душа успокоилась :)

 

Вобщем всем спасибо за советы, если кто ещё чем может - помогите начинающему :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не с того конца начали товарищи.

Первое, что нобходимо сделать - сформулировать требования описать систему более полно. Процессор, как правило является составной частью системы, ориентируясь на которую необходимо выставлять требования.

 

1.выборка команды из памяти

2.декодирование команды

3.исполнение команды

 

Исходя из этого т.з. можно сделать следующие выводы:

1. Система команд должна быть построена таким образом, что любая команды будет выполняться 1 такт. Это требование вносит значительные ограничения.

2. Наиболее сложными командами - бедут команды переходов и команды обращения к памяти.

3. Процессор должен иметь как минимум 2 типа памяти - память программ и память данных, возможно, что сюда можно добавить и пространство для работы с периферией.

4. исходя из вышесказанного:

Команды переходов должны быть разделены на 2 составляющие(команды) - первичная загрузка адреса(или иного недостающего звена) и загрузка недостающей части.

С командами для работы с памятью данных необходимо поступить аналогичным образом.

5. В результате получаем процессор, с системой команд построенной таким образом, что любая инструкция будет выполняться за 1 такт.

 

Частичное решение данного вопроса можно переложить на длину командного слова, в данном случае можно будет оптимизировать систему команд в части переходов.

 

Для устранения "неоднородностей" возможна компенсация аппаратных задержек командами типа nop в программе.

(к примеру )

imm #label; загрузка младшей части адреса перехода во временный регистр
jmp #label; переход по адресу, младшая часть которого была загружена в предыдущей команде, а старшая в текущей, и хранится в регистре инструкций
nop; команда компенсации конвейерных задержек, в случае оптимизации на это место может быть поставлена любая другая команда, которая должна быть выполнена во время/сразу после перехода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хмммм что то тут не совсем понятно.

считаем память асинхронной, результаты храним только в регистрах.

выставили адресс памяти программ 1 такт.

считали програмное слово - декодировали команду - выставили сигналы управления икременировали адресс.

хлопнули все это дело в регистры - 1 такт

и т.д.

в этом случае джампы обрабатываються за 1 такт.

Да упадет часотка., за сим делаем 1 уровень конвеера и получаем джампы за 2 такта. (1 такт уходит на перегрузку конвеера).

 

А насчет авр , окуда там 2 - stage piepline ? ИМХО 1 уровень конвееризации там.

если бы было больше, тогда следующая команда после джампа обрабатывалась бы 2 такта а не 1.

 

Ну не так. Всё не так. Берём тот-же АВР. Атмел его позиционирует как 2-stage pipeline. Даже рисунок приводит. На самом деле у него в 2stage упиханы классические 4. В первую "стадию"(полный CLK) упихан fetch. А decode,execute и write back умещены во второй CLK. И синхронизируются его rise, falling и rise edges так, что, в результате совмещается на одном rise edge, decode N-ной инструкции и write back N-1-ой.

А то, что следующая после Jmp инструкция выполняется за такт, объясняется тем, что сам Jmp двухтактный. То-же самое, тока вид сбоку. Бо next address генерится во время fetch, у нормальных пацанов, ессно. ;О)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...