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

 
 
> Как в одном клок-домейне сказать Квартусу, что де инструкция может выполняться несколько тактов?
iiv
сообщение Aug 2 2013, 19:23
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

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

Если оставить все инструкции и собрать проект, то клок можно выставить только в 50МГц (есть долгие инструкции, в качестве примера, я написал инструкцию деления). Если закомментировать несколько "долгих инструкций", то проект можно собрать с клоком в 200МГц.

Реально я понимаю, что, если я для самого себя условлюсь, что после некоторых инструкций я поставлю 1-2-3 такта пустые инструкции, а длительность выполнения этих инструкций будет не один клок, а 2-3-4, то все будет работать, но вот как это объяснить квартусу?

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

Может есть какой-то простой способ как сказать, что де

инструкция Номер 1 и 2 может работать два такта,
инструкция Номер 3 может работать 3 такта,
инструкия Номер 4 - может работать 4 такта

и пусть квартус не парится и не доводит тайминг этих долгих инструкций до высокой частоты?

Научите, пожалуйста, меня, кто знает, как это сделать!

Спасибо

ИИВ

Код
reg Clk; // клок
reg [31:0] In1Reg;
reg [31:0] In2Reg;
reg [31:0] OutReg;
reg [8:0] CmdAddr;
reg [17:0] CmdA[0:511]; // список команд-операций как-то где-то инициализируемый
reg [17:0] Cmd;

always @(posedge Clk)
begin
   Cmd<=CmdA[CmdAddr+1];
   if(Cmd[17]) CmdAddr<=Cmd[8:0];
   else
   begin
     CmdAddr<=CmdAddr+1;
     case(Cmd[16:14])
       3'b000: OutReg<=In1Reg+In2Reg; // было бы классно выполнять ее 2 такта
       3'b001: OutReg<=In1Reg-In2Reg; // было бы классно выполнять ее 2 такта
       3'b010: OutReg<=In1Reg*In2Reg; // было бы классно выполнять ее 3 такта
       3'b011: OutReg<=In1Reg/In2Reg; // было бы классно выполнять ее 4 такта
       3'b100: OutReg<=In1Reg&In2Reg; // должна выполниться за такт
       3'b101: OutReg<=In1Reg^In2Reg; // должна выполниться за такт
       3'b110: OutReg<=In1Reg|In2Reg; // должна выполниться за такт
       3'b111: // пустой оператор
     endcase
   end
end
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- iiv   Как в одном клок-домейне сказать Квартусу, что де инструкция может выполняться несколько тактов?   Aug 2 2013, 19:23
- - Tiro   Цитата(iiv @ Aug 2 2013, 22:23) Реально я...   Aug 2 2013, 22:49
- - Джеймс   Цитата(iiv @ Aug 2 2013, 23:23) Реально я...   Aug 3 2013, 06:13
|- - iosifk   Цитата(Джеймс @ Aug 3 2013, 10:13) В Ваш...   Aug 3 2013, 07:48
- - yes   ну все равно мультиплексор параллельный, то есть с...   Aug 5 2013, 13:37
|- - Fat Robot   1. Нужно немного переделать модуль: - сделать про...   Aug 5 2013, 15:11
|- - Fat Robot   ах, да.. Лучше всего о Synopsys Design Constrain...   Aug 5 2013, 18:16
|- - iiv   Огромное спасибо всем отвечавшим и сочувствовавшим...   Aug 6 2013, 19:46
|- - Fat Robot   По сути сообщение о том, что квартус не может найт...   Aug 7 2013, 09:59
||- - iiv   Уважаемые Fat Robot и Yes, очень Вам благодарен, ...   Aug 7 2013, 12:21
||- - Fat Robot   -from {port | pin | clock | instance} Selects all ...   Aug 7 2013, 12:36
||- - iiv   Цитата(Fat Robot @ Aug 7 2013, 17:36) -fr...   Aug 7 2013, 12:44
|- - Timmy   Цитата(iiv @ Aug 6 2013, 23:46) set_multi...   Aug 7 2013, 16:18
|- - iiv   Уважаемые друзья, огромное Вам спасибо за помощь...   Aug 13 2013, 08:52
|- - Fat Robot   Еще раз: -through {port |pin | instance | net} Se...   Aug 13 2013, 10:05
- - yes   советую констрейны (то есть то, что патерн со * чт...   Aug 7 2013, 11:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016