|
ModelSim и отрицательные числа в .mif файлах |
|
|
|
Jun 3 2017, 04:24
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 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?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Jun 3 2017, 15:19
|
Знающий
   
Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111

|
Цитата(nice_vladi @ Jun 3 2017, 07:24)  Сейчас извращаюсь с переводом в бинарный вид в Matlab'e и потом пишу в mif. Это Modelsim кушает на ура.
Где я допускаю ошибку? Возможно с какой-то определенной версии Modelsim'a появилась поддержка отрицательных чисел в mif? А почему просто не открыть в квартусе миффайл и не сохранить в формате хекс? Или еще проще - на первой строке файла кликнуть правой кнопкой мыши и выбрать формат в Memory radix.
|
|
|
|
|
Jun 6 2017, 13:37
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 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. Спасибо, об этом как-то не подумал даже. Не догадался  Так гораздо проще. Но все равно вопрос открыт - почему Quartus умеет в отрицательные числа, а Modelsim - нет? Ведь это не что-то из-ряда вон выходящее и сложное.
|
|
|
|
|
Jun 7 2017, 05:29
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

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

Участник

Группа: Участник
Сообщений: 53
Регистрация: 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-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения. Цитата(andrew_b @ Jun 7 2017, 06:29)  Откуда ваш Моделсим знает про модели IP-ядер Квартуса? Вы сами компилировали эти библиотеки? Как я уже говорил, Моделсим был установлен совместно с Квартусом, из одного источника, т.е. предполагается, что они связаны друг с другом, общие библиотеки и т.д. В скрипте для запуска симуляции Моделсим подключены библиотеки альтеры: vsim +initreg+0 +initmem+0 -novopt -L altera_mf_ver tb Но, как было сказано, возможно, я не прав и если вы укажете на ошибку в моих рассуждениях я буду благодарен. Ваши ультимативные вопросы на правильный путь меня, к сожалению не подтолкнули И как компилировать библиотеки для Модельсима я представляю достаточно смутно
|
|
|
|
|
Jun 7 2017, 06:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(nice_vladi @ Jun 7 2017, 09:23)  Приведен в качестве примера файл mif. Memory Initialization File. Если не ошибаюсь, они используются только в модулях, связанных с памятью. Причем, чаще всего, именно для ROM памяти. Могу ошибаться. Конкретно этот файл используется для инициализации ROM памяти ip-ядра Quartus'a 13.1, 64-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения.  Мне это ни о чём не говорит. При возникновении ошибки МоделСим пишет, в каком модуле произошла ошибка. Типа такого: Код # 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. Предупреждать надо.
|
|
|
|
|
Jun 7 2017, 07:46
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 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 То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата.
|
|
|
|
|
Jun 7 2017, 08:06
|

Участник

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

|
Цитата(andrew_b @ Jun 7 2017, 08:46)  Насколько я вижу в task convert_mif2ver, отрицательные числа действительно не поддерживаются:
...
То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата. Ого, спасибо большое! Теперь все гораздо понятнее стало. Еще и появился вариант, что можно посмотреть, когда ломается то, что не должно. Кстати, скажите, пожалуйста, вашу версию Modelsim или Questa, для статистики, так сказать.
|
|
|
|
|
Jun 7 2017, 13:06
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 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
|
|
|
|
|
Jun 13 2017, 06:09
|

Участник

Группа: Участник
Сообщений: 53
Регистрация: 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) - можно посмотреть их новые библиотеки, мб там что-то новое придумали и добавили поддержку. Буду благодарен за информацию  А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития.
|
|
|
|
|
Jun 13 2017, 07:53
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 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) - можно посмотреть их новые библиотеки, мб там что-то новое придумали и добавили поддержку. Буду благодарен за информацию  А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития. Для "общего развития" могу рассказать по скайпу... Мой адрес - в личной карточке...
--------------------
www.iosifk.narod.ru
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|