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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ModelSim и отрицательные числа в .mif файлах
nice_vladi
сообщение Jun 3 2017, 04:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-09-16
Пользователь №: 93 239



Всем привет. Столкнулся с тем, что Modelsim отказывается читать отрицательные числа в .mif файлах. Квартус нормально читает. Заполнение файла верное, версия Modelsim 10.1d.

Пример mif файла:

CODE


-- Matlab generated Memory Initialization File (.mif)
-- Created on: 03-Jun-2017

WIDTH = 18;
DEPTH = 512;

ADDRESS_RADIX = UNS;
DATA_RADIX = DEC;

CONTENT BEGIN
0 : 0;
1 : 0;
2 : 0;
3 : 0;
4 : 0;
5 : 0;
6 : 0;
7 : 0;
8 : 0;
9 : 0;
10 : 0;
11 : 0;
12 : 0;
13 : 0;
14 : 0;
15 : 0;
16 : 0;
17 : 13749;
18 : 0;
19 : 8849;
20 : 0;
21 : 3949;
22 : 0;
23 : -950;
24 : 0;
25 : 33349;
......

END;


На этот файл Modelsim выдает такую ошибку:
# ERROR: D:/matlab/new.mif, line 34, Invalid Altera-mif record.

34 строка - первое встретившееся в списке отрицательное число.

Сейчас извращаюсь с переводом в бинарный вид в Matlab'e и потом пишу в mif. Это Modelsim кушает на ура.

Где я допускаю ошибку? Возможно с какой-то определенной версии Modelsim'a появилась поддержка отрицательных чисел в mif?
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 3 2017, 09:26
Сообщение #2


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



А при чём тут лично ModelSim? Он понятия не имеет ни о каких mif-файлах. Mif-файлы читаются в IP-ядрах. Как ядро написано, так ModelSim и работает.
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jun 3 2017, 15:19
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 563
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(nice_vladi @ Jun 3 2017, 07:24) *
Сейчас извращаюсь с переводом в бинарный вид в Matlab'e и потом пишу в mif. Это Modelsim кушает на ура.

Где я допускаю ошибку? Возможно с какой-то определенной версии Modelsim'a появилась поддержка отрицательных чисел в mif?

А почему просто не открыть в квартусе миффайл и не сохранить в формате хекс?
Или еще проще - на первой строке файла кликнуть правой кнопкой мыши и выбрать формат в Memory radix.
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Jun 6 2017, 13:37
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-09-16
Пользователь №: 93 239



Цитата(andrew_b @ Jun 3 2017, 10:26) *
А при чём тут лично ModelSim? Он понятия не имеет ни о каких mif-файлах. Mif-файлы читаются в IP-ядрах. Как ядро написано, так ModelSim и работает.


ящитаю, что это ModelSim, т.к. Quartus вполне спокойно поедает mif-файлы c десятичными отрицательными числами. Однако ModelSim упорно выдает ошибку (пример в первом посте). Имеется ли различие в ip-ядрах ModelSim и Quartus? Устанавливались они вместе, так что подразумевается, что используются одинаковые ip-ядра, библиотеки и т.д. Если не прав - подскажите, пожалуйста.

Цитата(Александр77 @ Jun 3 2017, 16:19) *
А почему просто не открыть в квартусе миффайл и не сохранить в формате хекс?
Или еще проще - на первой строке файла кликнуть правой кнопкой мыши и выбрать формат в Memory radix.


Спасибо, об этом как-то не подумал даже. Не догадался biggrin.gif Так гораздо проще. Но все равно вопрос открыт - почему Quartus умеет в отрицательные числа, а Modelsim - нет? Ведь это не что-то из-ряда вон выходящее и сложное.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 7 2017, 05:29
Сообщение #5


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(nice_vladi @ Jun 6 2017, 16:37) *
ящитаю, что это ModelSim
Вы можете щетать что угодно.
Цитата
пример в первом посте
Там не написано, в каком модуле происходит ошибка.
Цитата
Устанавливались они вместе, так что подразумевается, что используются одинаковые ip-ядра, библиотеки и т.д.
Откуда ваш Моделсим знает про модели IP-ядер Квартуса? Вы сами компилировали эти библиотеки?
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Jun 7 2017, 06:23
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-09-16
Пользователь №: 93 239



Цитата(andrew_b @ Jun 7 2017, 06:29) *
Вы можете щетать что угодно.


Хорошо)

Цитата(andrew_b @ Jun 7 2017, 06:29) *
Там не написано, в каком модуле происходит ошибка.


Приведен в качестве примера файл mif. Memory Initialization File. Если не ошибаюсь, они используются только в модулях, связанных с памятью. Причем, чаще всего, именно для ROM памяти. Могу ошибаться.
Конкретно этот файл используется для инициализации ROM памяти ip-ядра Quartus'a 13.1, 64-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения. laughing.gif

Цитата(andrew_b @ Jun 7 2017, 06:29) *
Откуда ваш Моделсим знает про модели IP-ядер Квартуса? Вы сами компилировали эти библиотеки?


Как я уже говорил, Моделсим был установлен совместно с Квартусом, из одного источника, т.е. предполагается, что они связаны друг с другом, общие библиотеки и т.д. В скрипте для запуска симуляции Моделсим подключены библиотеки альтеры:
vsim +initreg+0 +initmem+0 -novopt -L altera_mf_ver tb

Но, как было сказано, возможно, я не прав и если вы укажете на ошибку в моих рассуждениях я буду благодарен. Ваши ультимативные вопросы на правильный путь меня, к сожалению не подтолкнули biggrin.gif
И как компилировать библиотеки для Модельсима я представляю достаточно смутно biggrin.gif


Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 7 2017, 06:40
Сообщение #7


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(nice_vladi @ Jun 7 2017, 09:23) *
Приведен в качестве примера файл mif. Memory Initialization File. Если не ошибаюсь, они используются только в модулях, связанных с памятью. Причем, чаще всего, именно для ROM памяти. Могу ошибаться.
Конкретно этот файл используется для инициализации ROM памяти ip-ядра Quartus'a 13.1, 64-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения. laughing.gif

Мне это ни о чём не говорит. При возникновении ошибки МоделСим пишет, в каком модуле произошла ошибка. Типа такого:
Код
#    Time: 1155 ns  Iteration: 1  Process: /xxx_tb/line__201 File: /home/zzz/work/project/tb/xxx_tb.vhd

Пока не приведено сообщение об ошибке полностью, говорить не о чем. Настало лето, телепаты массово ушли в отпуска.
Цитата
vsim +initreg+0 +initmem+0 -novopt -L altera_mf_ver tb

А, тут Verilog. Предупреждать надо.
Go to the top of the page
 
+Quote Post
spectr
сообщение Jun 7 2017, 07:17
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 260
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437



MIF-файл подсовывается альтеровскому IP-ядру. Моделсим же, при симуляции (или компиляции - не помню уже) генерит из вашего MIF-а файла файл с расширением .ver, и уже его потом использует при симуляции.
Ничего прописывать не надо - все делается и подсасывается само.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 7 2017, 07:46
Сообщение #9


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Насколько я вижу в task convert_mif2ver, отрицательные числа действительно не поддерживаются:
Код
                else if (r == `MINUS)
                begin
                    r = $fgetc(ifp);
                    if (r == `MINUS)
                    begin
                        // Ignore all the characters which which is part of comment.
                        r = $fgetc(ifp);

                        while ((r != `NEWLINE) && (r != `CARRIAGE_RETURN))
                        begin
                            r = $fgetc(ifp);

                        end

                        if ((r == `NEWLINE) || (r == `CARRIAGE_RETURN))
                        begin
                            line_no = line_no +1;

                            if ((buffer == "contentbegin") && (get_address_data_pairs == `FALSE))
                            begin
                                get_address_data_pairs = `TRUE;
                                get_address = `TRUE;
                                buffer = "";
                            end
                        end
                    end
                    else
                    begin
                        error_status = `TRUE;
                        $display("ERROR: %0s, line %0d, Invalid Altera-mif record.", in_file, line_no);
                        done = `TRUE;
                        disable READER;
                    end
                end

То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата.
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Jun 7 2017, 08:06
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-09-16
Пользователь №: 93 239



Цитата(andrew_b @ Jun 7 2017, 08:46) *
Насколько я вижу в task convert_mif2ver, отрицательные числа действительно не поддерживаются:

...

То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата.


Ого, спасибо большое! Теперь все гораздо понятнее стало. Еще и появился вариант, что можно посмотреть, когда ломается то, что не должно. Кстати, скажите, пожалуйста, вашу версию Modelsim или Questa, для статистики, так сказать.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 7 2017, 08:20
Сообщение #11


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(nice_vladi @ Jun 7 2017, 11:06) *
Кстати, скажите, пожалуйста, вашу версию Modelsim или Questa, для статистики, так сказать.
Версия тут ни при чём. Я просто открыл 220model.v, идущий с Квартусом, и посмотрел код. Этот код будет работать одинаково во всех симуляторах.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 7 2017, 13:06
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 3 641
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(nice_vladi @ Jun 3 2017, 07:24) *
Всем привет. Столкнулся с тем, что Modelsim отказывается читать отрицательные числа в .mif файлах. Квартус нормально читает. Заполнение файла верное, версия Modelsim 10.1d.

Где я допускаю ошибку? Возможно с какой-то определенной версии Modelsim'a появилась поддержка отрицательных чисел в mif?

Можно пойти и другим путем...
Забейте параметрами чтение mif для симулятора

если параметр simulate == "Yes"

то следующее только для симулятора
// synthesis translate_off
reg [7:0] mem[0:255];
$readmemh("my_init_file.dat", mem, 0, 255); // что-то вроде этого
// synthesis translate_on

в противном случае
(* ram_init_file = "my_init_file.mif" *) reg [7:0] mem[0:255];




--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
nice_vladi
сообщение Jun 13 2017, 06:09
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 7-09-16
Пользователь №: 93 239



Цитата(iosifk @ Jun 7 2017, 14:06) *
Можно пойти и другим путем...
Забейте параметрами чтение mif для симулятора

если параметр simulate == "Yes"

то следующее только для симулятора
// synthesis translate_off
reg [7:0] mem[0:255];
$readmemh("my_init_file.dat", mem, 0, 255); // что-то вроде этого
// synthesis translate_on

в противном случае
(* ram_init_file = "my_init_file.mif" *) reg [7:0] mem[0:255];


Спасибо за идею, скорее всего, так и поступлю.

В продолжение темы - на досуге поковырял библиотеки sim_lib/220model.v Quartus'ов. Поддержки отрицательных чисел в mif-файлах нет вплоть до Quartus'a 16.0. Версии старше не смотрел - пока нет времени. Если кто-то их пользует(16.1 - 17.0) - можно посмотреть их новые библиотеки, мб там что-то новое придумали и добавили поддержку. Буду благодарен за информацию smile3046.gif
А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 13 2017, 07:35
Сообщение #14


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

Группа: Свой
Сообщений: 1 822
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(nice_vladi @ Jun 13 2017, 09:09) *
А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития.
У Xilinx mif-файл представляет из себя исключительно список чисел в двоичном формате. Никаких ADDRESS_RADIX и подобного там нет. Но этот файл пользователю не виден. Он генерируется из coe-файла, который является входным для CoreGen. Формат coe-файла имени Xilinx похож на формат mif-файла имени Altera. https://www.xilinx.com/itp/xilinx10/isehelp...file_syntax.htm
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 13 2017, 07:53
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 3 641
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(nice_vladi @ Jun 13 2017, 09:09) *
Спасибо за идею, скорее всего, так и поступлю.

В продолжение темы - на досуге поковырял библиотеки sim_lib/220model.v Quartus'ов. Поддержки отрицательных чисел в mif-файлах нет вплоть до Quartus'a 16.0. Версии старше не смотрел - пока нет времени. Если кто-то их пользует(16.1 - 17.0) - можно посмотреть их новые библиотеки, мб там что-то новое придумали и добавили поддержку. Буду благодарен за информацию smile3046.gif
А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития.

Для "общего развития" могу рассказать по скайпу... Мой адрес - в личной карточке...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd October 2017 - 11:49
Рейтинг@Mail.ru


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