nice_vladi 2 3 июня, 2017 Опубликовано 3 июня, 2017 · Жалоба Всем привет. Столкнулся с тем, что Modelsim отказывается читать отрицательные числа в .mif файлах. Квартус нормально читает. Заполнение файла верное, версия Modelsim 10.1d. Пример mif файла: -- 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 3 июня, 2017 Опубликовано 3 июня, 2017 · Жалоба А при чём тут лично ModelSim? Он понятия не имеет ни о каких mif-файлах. Mif-файлы читаются в IP-ядрах. Как ядро написано, так ModelSim и работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 3 июня, 2017 Опубликовано 3 июня, 2017 · Жалоба Сейчас извращаюсь с переводом в бинарный вид в Matlab'e и потом пишу в mif. Это Modelsim кушает на ура. Где я допускаю ошибку? Возможно с какой-то определенной версии Modelsim'a появилась поддержка отрицательных чисел в mif? А почему просто не открыть в квартусе миффайл и не сохранить в формате хекс? Или еще проще - на первой строке файла кликнуть правой кнопкой мыши и выбрать формат в Memory radix. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 6 июня, 2017 Опубликовано 6 июня, 2017 · Жалоба А при чём тут лично ModelSim? Он понятия не имеет ни о каких mif-файлах. Mif-файлы читаются в IP-ядрах. Как ядро написано, так ModelSim и работает. ящитаю, что это ModelSim, т.к. Quartus вполне спокойно поедает mif-файлы c десятичными отрицательными числами. Однако ModelSim упорно выдает ошибку (пример в первом посте). Имеется ли различие в ip-ядрах ModelSim и Quartus? Устанавливались они вместе, так что подразумевается, что используются одинаковые ip-ядра, библиотеки и т.д. Если не прав - подскажите, пожалуйста. А почему просто не открыть в квартусе миффайл и не сохранить в формате хекс? Или еще проще - на первой строке файла кликнуть правой кнопкой мыши и выбрать формат в Memory radix. Спасибо, об этом как-то не подумал даже. Не догадался Так гораздо проще. Но все равно вопрос открыт - почему Quartus умеет в отрицательные числа, а Modelsim - нет? Ведь это не что-то из-ряда вон выходящее и сложное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба ящитаю, что это ModelSimВы можете щетать что угодно. пример в первом постеТам не написано, в каком модуле происходит ошибка. Устанавливались они вместе, так что подразумевается, что используются одинаковые ip-ядра, библиотеки и т.д.Откуда ваш Моделсим знает про модели IP-ядер Квартуса? Вы сами компилировали эти библиотеки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Вы можете щетать что угодно. Хорошо) Там не написано, в каком модуле происходит ошибка. Приведен в качестве примера файл mif. Memory Initialization File. Если не ошибаюсь, они используются только в модулях, связанных с памятью. Причем, чаще всего, именно для ROM памяти. Могу ошибаться. Конкретно этот файл используется для инициализации ROM памяти ip-ядра Quartus'a 13.1, 64-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения. :laughing: Откуда ваш Моделсим знает про модели IP-ядер Квартуса? Вы сами компилировали эти библиотеки? Как я уже говорил, Моделсим был установлен совместно с Квартусом, из одного источника, т.е. предполагается, что они связаны друг с другом, общие библиотеки и т.д. В скрипте для запуска симуляции Моделсим подключены библиотеки альтеры: vsim +initreg+0 +initmem+0 -novopt -L altera_mf_ver tb Но, как было сказано, возможно, я не прав и если вы укажете на ошибку в моих рассуждениях я буду благодарен. Ваши ультимативные вопросы на правильный путь меня, к сожалению не подтолкнули И как компилировать библиотеки для Модельсима я представляю достаточно смутно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Приведен в качестве примера файл mif. Memory Initialization File. Если не ошибаюсь, они используются только в модулях, связанных с памятью. Причем, чаще всего, именно для ROM памяти. Могу ошибаться. Конкретно этот файл используется для инициализации ROM памяти ip-ядра Quartus'a 13.1, 64-битная версия. Я посчитал, что такие подробности не понадобятся, прошу прощения. :laughing: Мне это ни о чём не говорит. При возникновении ошибки МоделСим пишет, в каком модуле произошла ошибка. Типа такого: # 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. Предупреждать надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба MIF-файл подсовывается альтеровскому IP-ядру. Моделсим же, при симуляции (или компиляции - не помню уже) генерит из вашего MIF-а файла файл с расширением .ver, и уже его потом использует при симуляции. Ничего прописывать не надо - все делается и подсасывается само. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Насколько я вижу в 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 То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Насколько я вижу в task convert_mif2ver, отрицательные числа действительно не поддерживаются: ... То есть парсер таков, что если после минуса идёт ещё один минус, то это начало комментария. Если после минуса идёт любой другой символ, то это ошибка формата. Ого, спасибо большое! Теперь все гораздо понятнее стало. Еще и появился вариант, что можно посмотреть, когда ломается то, что не должно. Кстати, скажите, пожалуйста, вашу версию Modelsim или Questa, для статистики, так сказать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Кстати, скажите, пожалуйста, вашу версию Modelsim или Questa, для статистики, так сказать.Версия тут ни при чём. Я просто открыл 220model.v, идущий с Квартусом, и посмотрел код. Этот код будет работать одинаково во всех симуляторах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 7 июня, 2017 Опубликовано 7 июня, 2017 · Жалоба Всем привет. Столкнулся с тем, что 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]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 13 июня, 2017 Опубликовано 13 июня, 2017 · Жалоба Можно пойти и другим путем... Забейте параметрами чтение 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: А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 13 июня, 2017 Опубликовано 13 июня, 2017 · Жалоба А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития.У Xilinx mif-файл представляет из себя исключительно список чисел в двоичном формате. Никаких ADDRESS_RADIX и подобного там нет. Но этот файл пользователю не виден. Он генерируется из coe-файла, который является входным для CoreGen. Формат coe-файла имени Xilinx похож на формат mif-файла имени Altera. https://www.xilinx.com/itp/xilinx10/isehelp...file_syntax.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 июня, 2017 Опубликовано 13 июня, 2017 · Жалоба Спасибо за идею, скорее всего, так и поступлю. В продолжение темы - на досуге поковырял библиотеки sim_lib/220model.v Quartus'ов. Поддержки отрицательных чисел в mif-файлах нет вплоть до Quartus'a 16.0. Версии старше не смотрел - пока нет времени. Если кто-то их пользует(16.1 - 17.0) - можно посмотреть их новые библиотеки, мб там что-то новое придумали и добавили поддержку. Буду благодарен за информацию :smile3046: А еще было бы круто узнать, можно ли так делать у Xilinx. Просто для общего развития. Для "общего развития" могу рассказать по скайпу... Мой адрес - в личной карточке... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться