diwil 0 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба Здравствуйте, уважаемве. Я в квартусе 18 создаю мегафункцию ROM - однопортовую, простую с инициализированой памятью. Квартус не хочет автоматически создавать ром в on-chip memory, за сим приходится использовать мегу. Потом я достаю данные из нее как: wire signed [32-1 : 0] coefsC; rom470 rom(caddr, clk,coefsC); always @(posedge clk) if (reset_n == 0) cc <= 0; else cc <= coefsC; и мне оч хочется это в модельсиме просимулировать. Я не знаю как квартуса мегу впихнуть в модельсим, за сим я пишу так: reg signed [32-1 : 0] coefsC [0:479]; initial $readmemh("coefs470.txt", coefsC); always @(posedge clk) if (reset_n == 0) cc <= 0; else cc <= coefsC[caddr]; Будет ли второй, "ручной" вариант, эквивалентен мегафункции в железе. Заранее благодарен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба 42 минуты назад, diwil сказал: Я в квартусе 18 создаю мегафункцию ROM - однопортовую, простую с инициализированой памятью. Квартус не хочет автоматически создавать ром в on-chip memory, за сим приходится использовать мегу. ...... Будет ли второй, "ручной" вариант, эквивалентен мегафункции в железе А как там с латентностью? И для чего нужен "Сброс" для памяти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба сброс для коэффициента. наверное и не нужен. про латентность я не нашел. кто по существу может ответить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба 21 минуту назад, diwil сказал: кто по существу может ответить? Наводящий вопрос про сброс по существу и был. Если у памяти физически нет сброса, то РОМ будет реализован на триггерах. Это же очевидно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба 8 минут назад, andrew_b сказал: Наводящий вопрос про сброс по существу и был. Если у памяти физически нет сброса, то РОМ будет реализован на триггерах. Это же очевидно. Ну да, а дальше будет это: Verilog HDL Synthesis Attributes and Directives http://quartushelp.altera.com/14.1/mergedProjects/hdl/vlog/vlog_file_dir.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 21 декабря, 2018 Опубликовано 21 декабря, 2018 · Жалоба и, кстати да, почему с (* ramstyle = "M9K, no_rw_check" *) (и множеством других комбинаций) память на регистрах квартус оставляет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hdl_student 0 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба 1. В Quartus II Handbook Volume 1: Design and Synthesis есть раздел Inferring Memory Functions from HDL Code, где подробно описывается, как нужно описать память желаемого типа, чтобы Quartus ее обнаружил, в т.ч. случаи, когда он не может расположить ее на BRAM. 2. У "почему не получается" факторов много. Приведите код или проект, чтобы кто-то мог посмотреть и подсказать. Может, у Вас Stratix V, где нет M9K. ( : 3. Добавить библиотеки мегафункций и моделей аппаратных блоков в Modelsim очень просто: В Quartus заходим Tools > Launch Simulation Library Compiler Выбираем Modelsim и папку с vsim.exe (...\modeltech64_10.2c\win64) Выбираем семейства (они нужны, если соберетесь симулировать gate-level или работать с трансиверами и др. аппаратными блоками; для ALTPLL они не нужны) Выбираем Verilog Выбираем Output directory Жмем Start Compilation После окончания компиляции в выбранной Output directory будет лежать modelsim.ini. Нужно скопировать строчки с библиотеками (altera_ver и другие) в секцию [Library] файлов ...\modeltech64_10.2c\modeltech.ini и в файл проекта (.mpf). В последующем, библиотеки Альтеры будут присутствовать в каждом новом проекте, т.к. каждый раз при создании проекта они копируются из ...\modeltech64_10.2c\modeltech.ini. 4. Синтез Quartus поддерживает инициализацию памяти с помощью $readmemb и $readmemh. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба спсибо за ответ! Но квартус 18 не дает скомпилировать либы и говорит, что все они уже есть в модельсиме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба другой вопрос - если я пишу так (это двухпортовая рам): (* ramstyle = "M9K, no_rw_check" *) reg signed [DATA_IN_SIZE-1:0] delay [511:0]; ... always @(posedge clk) ... dd <= delay[rdaddr]; ... и квартус это запихивает действительно в память, то будет ли соответствие чтению из памяти в симутяторе и в железе (такт порядка 8мгц, но это наверное, не важно)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба 29 минут назад, diwil сказал: будет ли соответствие чтению из памяти в симутяторе и в железе Да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hdl_student 0 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба 2 hours ago, diwil said: Но квартус 18 не дает скомпилировать либы и говорит, что все они уже есть в модельсиме. Тогда м.б. у Вас ModelSim-Intel FPGA Edition, которая поставилась вместе с Quartus? Тогда все библиотеки уже в него добавлены (см. вкладку Libraries в главном окне Modelsim). Чтобы запустить симуляцию проекта с LPM-функциями, подключите библиотеку altera_mf_ver: Simulate > Start Simulation > Вкладка Libraries > Add. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
diwil 0 22 декабря, 2018 Опубликовано 22 декабря, 2018 · Жалоба о! примного благодарен! получилось! (не могу, правда сказать, что с первого раза, но получилось) И получилось так (это еще один ворос): Я объявляю мега-ром с данными CONTENT BEGIN 0000 : 0000012f; 0001 : 00000045; 0002 : 00000028; 0003 : ffffffec; ит.д. , но самые последние коэффициенты - нули. а так же ром2 с данными: FFFFFC 000001 000002 и т.д. и такой код: always @(posedge clock) address <= address + 1; filter_rom rom (address,clock,q); always @(posedge clock) zz <= q; reg [23:0] rom2[215:0]; initial $readmemh("coefs1024-24bits.txt", rom2); always @(posedge clock) y1 <= rom2[address]; на выходе получается: Правильно ли я понимаю, что для того, чтобы выровнять "фазы" мега-рома и ром2 (регистр zz в коде выше) я должен написать-добавить конвеер в симуляторе (мне так проще) типа такого: always @(posedge clock) y1 <= rom2[address]; always @(posedge clock) y2 <= y1; always @(posedge clock) yy <= y2; и тогда (опять же в модельсиме) получится т.е. zz и yy синхронны. Но тогда возникает еще вопрос - если я объявляю RAM и квартус делает ее, по сути дела, асинхронной, (при этом данные в ончип памяти), то можно ли как-либо сконфигурить мега ром, чтобы она вела себя как reg [23:0] rom2[215:0]; (при этом если я пишу как строчкой выше, при этом нет никакого асинхронного доступа и даже записи, то он упорно не хочет размещать коэффициенты в памяти) ? Заранее благодарю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 23 декабря, 2018 Опубликовано 23 декабря, 2018 · Жалоба 13 часов назад, diwil сказал: если я объявляю RAM и квартус делает ее, по сути дела, асинхронной, (при этом данные в ончип памяти) Он-чип память синронная в принципе. Без клока вы ничего с ней сделать не сможете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться