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

А в чем лучше отлаживать Fixed point арифметику?

Добрый день.

 

Подскажите, пожалуйста, а в какой сапр лучше всего отлаживать блоки вычислителя с фиксированной точкой? Видел связку матлаб + моделсим точно, в исиме представление числа с фиксированной точкой не нашел. Еще видел что можно копать в сторону VHDL, но все написано на верилоге. А какие есть еще варианты? Можно конечно попробовать написать что-то свое на систем верилоге, но пока ищу готовые решения

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


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

Отлаживать так

1. Делаете модель блока вычислений любыми подходящими средствами: matlab, simulink, c++.

2. Дошлифовываете модель до состояния "bit-accurate" (оно же "bit-exact"), т.е. в конце этого этапа вы знаете, что именно это поведение (последовательность выч. операций) с точностью до бита будет реализовано в rtl. В матлаб и симулинк есть встроенные библиотеки fxp. Для с++ хорошая фиксированная точка есть в библиотеке systemc. Ее можно использовать отдельно без SC-каркаса.

3. Реализуете модель на verilog rtl. Хорошо бы сначала сделать и отладить библиотеку параметризованных блоков базовых операций с fxp. Вероятно можно найти такую готовую.

4. Отладка происходит сравнением векторов в контрольных точках модели с векторами в соотв. точках rtl-реализации при одинаковых входных воздействиях. Здесь вам потребуется любой hdl симулятор. Эту процедуру удобно автоматизировать средствами управляющих скриптов или pli.

 

Эта методика является универсальной. Она хорошо документируется, будет работать практически при любой организационной и IT структуре, а также при минимально необходимом наборе инструментов и лицензий, переносима на любые платформы и применима для любых целевых технологий.

 

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

 

Подскажите, пожалуйста, а в какой сапр лучше всего отлаживать блоки вычислителя с фиксированной точкой?

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


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

Подскажите, пожалуйста, а в какой сапр лучше всего отлаживать блоки вычислителя с фиксированной точкой?

а что именно вы собрались отлаживать ? правила арифметики с фиксированной точкой просты как 3 рубля. Следуйте им и все будет работать.

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


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

Подскажите, пожалуйста, а в какой сапр лучше всего отлаживать блоки вычислителя с фиксированной точкой? Видел связку матлаб + моделсим точно, в исиме представление числа с фиксированной точкой не нашел. Еще видел что можно копать в сторону VHDL, но все написано на верилоге. А какие есть еще варианты? Можно конечно попробовать написать что-то свое на систем верилоге, но пока ищу готовые решения

 

Лучше всего нарисовать в симулинке (написать в m-скриптах) и сгенерить готовый hdl-код. Это если с нуля. А если уже готовое есть, то все зависит что/как конкретно хотите отлаживать - можно и калькулятором обойтись...

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


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

2. Дошлифовываете модель до состояния "bit-accurate" (оно же "bit-exact"), т.е. в конце этого этапа вы знаете, что именно это поведение (последовательность выч. операций) с точностью до бита будет реализовано в rtl.

Основное искусство в арифметике с фиксированной точкой - избежать переполнений (отчего иногда изобретают режим операций с насыщением - saturation) и, в то же время, сохранить как можно больше значащих бит. Если перестараться (с нормализующими сдвигами), то можно гордо получить еденицу в максимуме, а всё остальное - нули.

 

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

 

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


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

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

 

Основное искусство в арифметике с фиксированной точкой - избежать ..

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


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

Поясните, пожалуйста, как то, что вы написали, соотносится с методикой разработки и отладки вычислительного блока
А это расшифровка "дошлифовки" и "последовательности выч. операций" была. Но я не настаиваю. Beauty is in the eye of the beholder...

 

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


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

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

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


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

мне проще по идеальной симулинк модели (возможно с добавлением регистров) сделать RTL, его подцепить в co-simulation и сравнивая опорные точки (с учетом задержек и оверсемплинга RTL модели) сравнить корректность работы.

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


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

Основное искусство в арифметике с фиксированной точкой - избежать переполнений (отчего иногда изобретают режим операций с насыщением - saturation) и, в то же время, сохранить как можно больше значащих бит. Если перестараться (с нормализующими сдвигами), то можно гордо получить еденицу в максимуме, а всё остальное - нули.

 

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

Кстати вопрос актуальный. Тоже приходится отлаживать блоки с fp, и иногда хочется посмотреть значения на диаграмме. Проблема в том, что в моделсим есть -radix fpoint#n, но когда я задаю его для сигнала - вижу что-то типа 01011101.0100101. Приходится вооружаться калькулятором и переводить всю эту муть в десятичный вид.

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


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

Приходится вооружаться калькулятором и переводить всю эту муть в десятичный вид.

fp_t popa; 
real pipa; 

assign pipa = 1.0 * popa/2**scale;

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


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

fp_t popa; 
real pipa; 

assign pipa = 1.0 * popa/2**scale;

Красиво, благодарю :rolleyes:

А можно еще вопрос, Вы написали про co-simulation - это какой-то компонент в симулинке или это стандартное SV -> C socket -> Matlab?

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


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

А можно еще вопрос, Вы написали про co-simulation - это какой-то компонент в симулинке или это стандартное SV -> C socket -> Matlab?

http://embedders.org/content/sovmestnoe-mo...asim-i-simulink

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


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

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

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

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

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

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

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

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

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

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