Sergei_Ilchenko 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба Приветствую! Написал файл ПЗУ. Как сумел. А как сделать чтоб грамотно) и корректно отрабатывалось синтезаторами Altera и Xilinx и задействовало блочную память и там и тут? rom.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба Приветствую! Написал файл ПЗУ. Как сумел. А как сделать чтоб грамотно) и корректно отрабатывалось синтезаторами Altera и Xilinx и задействовало блочную память и там и тут? я беру библиотечный элемент памяти и устанавливаю его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergei_Ilchenko 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба Можно и на Verilog. Не могу вспомнить как. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleksei_Rostov 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 (изменено) · Жалоба Приветствую! Написал файл ПЗУ. Как сумел. А как сделать чтоб грамотно) и корректно отрабатывалось синтезаторами Altera и Xilinx и задействовало блочную память и там и тут? у xilinx attribute RAM_STYLE : string; attribute RAM_STYLE of <entity_name>: entity is "BLOCK"; attribute RAM_STYLE : string; attribute RAM_STYLE of <signal_name>: signal is "BLOCK"; вместо "BLOCK" дописывается блочная память для опред кристалла или можно Primitive instantion типа RAMB8BWER_inst : RAMB8BWER Изменено 21 сентября, 2014 пользователем farbius Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба 2 Sergei_Ilchenko Если именно атрибуты интересуют: XILINX //synthesis attribute ram_style of sv_mem is block ALTERA /* synthesis ramstyle = "M9K" */ Ну а если по коду: пример кода из Q2 или из ISE, там где ROM, одинаковый. И оба ложат по умолчанию в блоковую. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergei_Ilchenko 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба О! Ушел смотреть темплейты ISE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergei_Ilchenko 0 21 сентября, 2014 Опубликовано 21 сентября, 2014 · Жалоба Сделал через case. 121790 байт файлик. В квартусе в блочную лег. Супер! rom.v Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dima_spb 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба Выдрал из кода кусок с памятью wire [15:0] adress = sel_sin_cos ? addres_cos : addres_sin; // Формируем адрес (* rom_style = "block" *) reg [15:0] mem [0:7499]; // Объявляем память + указываем чтобы компилятор использовал блочную память. initial begin $readmemh("memory_cos.list", mem); // memory_cos - это файл с содержимым ROM (кладем этот файл в корень проекта) end; assign cos_sin = mem[adress]; // чтение содержимого файла я беру библиотечный элемент памяти и устанавливаю его. Не удобно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба У альтеры есть такая бумажка Recommended HDL Coding Styles. Если следовать ее рекомендациям, синтезатор автоматом будет использовать нужные мегафункции, ram/rom в том числе. Например, rom module Rom #(parameter B=28,LM=11) ( input wire [LM-1:0] addr1, input wire [LM-1:0] addr2, input wire rclk, output reg signed [B-1:0] bout1, output reg signed [B-1:0] bout2 ); reg [B-1:0] sr [(2**LM)-1:0]; initial begin $readmemb("coeff.dat",sr); end always @(posedge rclk) begin bout1<=sr[addr1]; bout2<=sr[addr2]; end endmodule однозначно подменится синтезатором мегафункцией с memory blocks, о чем он радостно сообщит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 22 сентября, 2014 Опубликовано 22 сентября, 2014 · Жалоба У альтеры есть такая бумажка Recommended HDL Coding Styles. В приведенном Вами коде, схема отработает за один такт. У блочной памяти есть регистры на входе и на выходе. Какие из них решит использовать Quartus - неизвестно, а иногда это желательно знать. Еще веселее, если описать память с латентностью 2. Вы ожидаете, что будут задействованы входные и выходные триггеры блочной памяти, а Quartus защелкивает вашу шину адреса в обычных триггерах, затем во входных триггерах блочной памяти и в итоге получается понижение быстродействия схемы и потеря нескольких триггеров. Так что лично мой выбор - библиотечный элемент памяти. Но ТС хочет чтобы его код понимал и Quartus и ISE, так что этот способ ему не подходит. Вот если бы в VHDL были директивы ассемблеру, как в С... P.S. Конечно же имел в виду директивы компилятору, а не ассемблеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 23 сентября, 2014 Опубликовано 23 сентября, 2014 · Жалоба ..У блочной памяти есть регистры на входе и на выходе. Какие из них решит использовать Quartus - неизвестно, а иногда это желательно знать... Если самому устанавливать набор QSF настроек, использовать Recommended HDL Coding Styles + директивы в коментах (здесь можно и с некоторыми QSF настройками пободаться B) ) - всё будет находиться именно там, где и планировалось. Всё это можно сделать и для хилых. Делали куски переносимого дизайна несколько раз - всё на своих местах и работает в железяках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться