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

 
 
> Верификация процессорного ядра
flipflop
сообщение Dec 7 2009, 21:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 33
Регистрация: 27-12-08
Из: Петербург
Пользователь №: 42 787



Последнюю неделю бьюсь над задачей верификации процессорного ядра (RISC архитектура (load/store), 6 ступенчатый конвейер команд, только целочисленная математика). Задача для меня совсем новая (раньше делал только математику и коммуникационные контроллеры), поэтому не знаю даже с какой стороны подойти.

Пока родилась следующая структура: Есть эталонная модель на SystemC (потактовая, тоже с конвейерными регистрами, но вместо логики обычные C++ методы).
На эталонной модели и верифицируемой RTL-модели прогоняется набор тестовых программ и на каждом такте сверяется содержимое конвейерных регистров. После прогона получаем список команд (а также номер такта и название конвейерного регистра), на которых обнаружены ошибки.

Может ли кто-нибудь поделиться опытом, как на практике верифицируют процессоры и покритиковать мой подход?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Leka
сообщение Dec 8 2009, 10:41
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Еще надо проверить прерывания/многопоточность и тп - м/б и логические ошибки (на верхнем уровне). У меня, кстати, прерывание реализовано, как аппаратное переключение задачи - проще/лучше делать прерывания через многопоточность, чем многопоточность через прерывания.

И сколько примерно на Спартане/Циклоне ЛУТ/МГц получается для ядра?
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 8 2009, 11:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(Leka @ Dec 8 2009, 12:41) *
Еще надо проверить прерывания/многопоточность и тп - м/б и логические ошибки (на верхнем уровне). У меня, кстати, прерывание реализовано, как аппаратное переключение задачи - проще/лучше делать прерывания через многопоточность, чем многопоточность через прерывания.

Это как? На каждое прерывание/поток по своему набору регистров, конвейеров и всего того что к нему прилагается?
Go to the top of the page
 
+Quote Post
Leka
сообщение Dec 8 2009, 12:39
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Methane @ Dec 8 2009, 15:02) *
Это как? На каждое прерывание/поток по своему набору регистров, конвейеров и всего того что к нему прилагается?

Что именно дублируется - зависит от архитектуры. Сам конвейер, например, дублировать не нужно. Указатели, программный счетчик, и тп - дублируются. У меня большой регистровый файл (1К слов) на памяти - можно и аппаратно, и софтово (без потери производительности) разграничить память потоков. Софтово даже лучше - железо проще, тактовая выше - для каждого прерывания/потока компилятор создает свои статические переменные (доступны и глобальные). В целом получается проще, чем для "классического" прерывания.

Цитата(flipflop @ Dec 8 2009, 16:04) *
При подключении памяти все падает до 38 МГц

Какой памяти, внешней, или внутренней?

Цитата
1) Весь дизайн покрывается спецификацией на темпоральной логике (обычно SystemVerilog Assertions).

А "правильность" самой спецификации кто гарантировать будет? Важно не пропустить ошибку, а как локализировать - вопрос религии/бизнеса, имхо.
Go to the top of the page
 
+Quote Post
des333
сообщение Dec 8 2009, 14:14
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(Leka @ Dec 8 2009, 15:39) *
А "правильность" самой спецификации кто гарантировать будет? Важно не пропустить ошибку, а как локализировать - вопрос религии/бизнеса, имхо.


Ну, более высокоуровневое описание того же алгоритма менее подвержено ошибкам.


К тому же в идеальном случае верификацией не следует заниматься разработчикам. А "две головы" все-таки лучше, чем одна.  smile.gif


--------------------
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 8 2009, 14:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(des333 @ Dec 8 2009, 16:14) *
Ну, более высокоуровневое описание того же алгоритма менее подвержено ошибкам.


К тому же в идеальном случае верификацией не следует заниматься разработчикам. А "две головы" все-таки лучше, чем одна.  smile.gif

Если компилятор (gcc) уже портирован, то у него полно тестов. Более чем нормальная вертификация.

Цитата(Leka @ Dec 8 2009, 14:39) *
Что именно дублируется - зависит от архитектуры. Сам конвейер, например, дублировать не нужно. Указатели, программный счетчик, и тп - дублируются. У меня большой регистровый файл (1К слов) на памяти - можно и аппаратно, и софтово (без потери производительности) разграничить память потоков. Софтово даже лучше - железо проще, тактовая выше - для каждого прерывания/потока компилятор создает свои статические переменные (доступны и глобальные). В целом получается проще, чем для "классического" прерывания.

Где-то про аппаратную многозадачность, я уже слышал. И далеко не раз.
Go to the top of the page
 
+Quote Post
Leka
сообщение Dec 8 2009, 15:09
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Methane @ Dec 8 2009, 18:29) *
Где-то про аппаратную многозадачность, я уже слышал. И далеко не раз.

Multithreading. Есть у всех быстрых современных процессоров.
Go to the top of the page
 
+Quote Post



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

 


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


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