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

 
 
 
Reply to this topicStart new topic
> LatticeMico8, bug & features
PSP
сообщение Nov 5 2007, 21:00
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988



Тут, в ветке обсуждения 8-ми битных ядер, я упомянул о баге в LatticeMico8 и получил предложение рассказать о нем (баге) подробнее. Дальше речь только о Verilog реализации, как там в VHDL - не знаю.
Сразу скажу, что если не использовать прерывания, то ядро работает прекрасно. Система команд полноценная, два такта на команду, в плотно забитом (90%) FPGA работает на 50 МГц.
Теперь о грустном, в чем проявляется проблема. Если сигнал прерывания приходит во время выполнения "простой" команды, т.е. без передачи управления (не меняется PC), то все нормально: сохранение адрес возврата в стеке, переход по вектору и возврат.
Но если мы попадаем на команду перехода, то происходит следующее. В первом такте сохраняется адреса возврата в стеке, а во втором внутренний автомат принимает решение - раз сейчас переход, то прерывание не выполняем.
Похоже, по начальной мысли автора, должна была быть только задержка прерывания на время команды перехода, но из-за ошибки в реализации происходит наращивание стека без его освобождения.
В свое время я попытался поправить это, но с наскоку не получилось, в одном месте поправил, в другом сломал. Там в коде не злоупотребляют комментариями, хорошо хоть обфускатор не использовали, а потом и времени не было.
Вот исходный текст примера программы, которая была использована при описании бага для техподдержки Lattice:

# interrupt vector
........b..........int_handler
# start
........movi.....r0,5
........seti
main_loop:
........subi.....r0,1
........bnz......main_loop
........clri
stop:
........b..........stop
# end
int_handler:
........iret

На входе прерываний постоянный запрос. Успевает пройти нормальное прерывание между командами "seti" (разрешение прерываний) и "subi" (декремент). Затем, пока крутится цикл, прерывания не проходят вообще, но наращивается стек, а в конце "clri" запрещает прерывания.
К багрепорту прилагался проект в Modelsim, и даже скриншот происходящего. Ошибка была признана, но не исправлена до сих пор.
Go to the top of the page
 
+Quote Post
Doka
сообщение Nov 5 2007, 21:17
Сообщение #2


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



спасибо за быструю реакцию. beer.gif

PS: для сохранения в исходном коде табуляций и отступов используйте таг [соdе] (иконка меню - #). Это намного проще. smile.gif


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
vetal
сообщение Nov 6 2007, 08:03
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



У них там большая проблема с прерываниями smile.gif
Я еще в феврале 2006 года посылал баг репорт CASE_ID_NUM: C72764-022706 на этот счет и мне тоже сказали что они исправят smile.gif)
Go to the top of the page
 
+Quote Post
PSP
сообщение Nov 6 2007, 12:22
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988



Значит Вы меня опередили, я с ними переписывался в сентябре 2006-го. Любопытно, что они сделали вид, что первый раз об этом слышат, если, правда, Вы писали им о том же баге.

Сообщение отредактировал PSP - Nov 6 2007, 12:29
Go to the top of the page
 
+Quote Post
vetal
сообщение Nov 6 2007, 13:06
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



баг из той же оперы...точно не помню...если прерывание попадало на инструкцию перехода - проц крутился в ней
Go to the top of the page
 
+Quote Post
vladz
сообщение Nov 8 2007, 09:24
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 17-06-04
Пользователь №: 39



Пара проблем на которые я наткнулся в версии 2.4:
1. Из-за того что в ассемблере от латтиса нельзя использовать константы пришлось попробовать AS Assembler by Alfred Arnold. Оказалось что в описании инструкций коды "RORC Rd, Rb" и "ROL Rd, Rb" перепутаны, и в результате AS Assembler генерит правильный по документации, но нерабочий код.

2. Команды clrc и setc вообще не работают. За флаг переноса отвечает код:

Код
// Carry flag
always @(posedge clk or negedge rst_n) begin
   if (!rst_n)
      carry_flag <= 1'b0;
   else
      case (1'b1) /* synthesis parallel_case */
         clrc :
            carry_flag <= 1'b0;
         setc :
            carry_flag <= 1'b1;
         update_c :
            carry_flag <= cout_alu;
         iret :
            carry_flag <= pushed_carry;
         default :
            carry_flag <= carry_flag;
      endcase
end

В Моделсиме видно, что сигнал update_c активен одновременно с clrc или setc в зависимости от команды. Synplify решает, что update_c все же имеет больший приоритет и в железе флаг переноса не меняется.
Похоже, что флаг Z обрабатывается аналогично.

Интересно, что гугль ничего не знает о багах в мико8, или просто этот контроллер никто не использует?
Go to the top of the page
 
+Quote Post
PSP
сообщение Nov 8 2007, 19:45
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988



AS Assembler by Alfred Arnold тоже пробовал, но прогнав тестовый пример из поставки Mico8, сразу наткнулся на ошибку и больше к нему не возвращался.
А по поводу команд clrc и setc ничего плохого сказать не могу. Специально посмотрел свои исходники - используются эти команды для возврата результата функции и все работает.
Go to the top of the page
 
+Quote Post
vladz
сообщение Nov 8 2007, 23:41
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 17-06-04
Пользователь №: 39



Цитата(PSP @ Nov 8 2007, 22:45) *
А по поводу команд clrc и setc ничего плохого сказать не могу. Специально посмотрел свои исходники - используются эти команды для возврата результата функции и все работает.

Предполагаю, что результат может зависеть от синтезатора и используемого семейства. Я изпользовал Synplify и ECP2. А у Вас на чем все это работает?
Go to the top of the page
 
+Quote Post
PSP
сообщение Nov 9 2007, 08:51
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988



Synplify Pro и XP.
Go to the top of the page
 
+Quote Post

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

 


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


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