|
|
  |
Почему не хватает родных САПР для ПЛИС?, Зачем нужны Active-HDL, Riviera, ModelSym, Synplify, Identify... |
|
|
|
May 31 2006, 09:14
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(vetal @ May 31 2006, 15:31)  Проверил(ram) возможные комбинации с регистровым и нерегистровым и пр. выходами/входами - хрумкает так , что за ушами трещит. Проблеммы могут возникнуть тогда, когда целевая архитектура не поддерживает чудо.(На пример в циклоне ram без регистра адреса/данных не получится). А какой синтезатор? Какая ПЛИС? Например, в том же Циклоне аппаратные блоки памяти, насколько знаю, имеют внутри себя входной регистр, его нельзя отключить. Поэтому нерегистровые входы при описании памяти тут не пройдут. Но это не вопрос, тут все понятно. Как уже сказал, оно (Синплифай каких-то 7.х версий) не хотел инферить блоковую память если она была описана без регистров на выходе. И это было четко документировано.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 31 2006, 09:55
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(vetal @ May 31 2006, 16:18)  Цитата(dxp @ May 31 2006, 13:14)  А какой синтезатор?
Synplify 8.5.1. (Проверял на actel apa и altera cyclone) Ок, отличная новость, в следующий раз обязательно попробую поюзать языковое описание - генерация модулей в мегавизарде, особенно, когда надо что-то подправить, честно говоря, достает. Спасибо.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 31 2006, 12:14
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(dxp @ May 31 2006, 04:55)  Цитата(vetal @ May 31 2006, 16:18)  Цитата(dxp @ May 31 2006, 13:14)  А какой синтезатор?
Synplify 8.5.1. (Проверял на actel apa и altera cyclone) Ок, отличная новость, в следующий раз обязательно попробую поюзать языковое описание - генерация модулей в мегавизарде, особенно, когда надо что-то подправить, честно говоря, достает. Спасибо.  я не был бы столь воодушевлен, для хилых к сожалению симплифай не может: корректно отображать DWC память, пайплайнить на внутреннем тригере блоки ROM памяти (8.4 по крайней мере), вставлять аппаратные фифо блоки (виртекс 4) + даже если описать память так: Код process (clk) is begin if (rising_edge(clk)) then if (we) then mem(to_integer(wr_addr)) <= wr_data; end if; if (re) then rd_data <= mem(to_integer(rd_addr)); end if; end if; end process; все равно сибирается реально вот что Код process (clk) is begin if (rising_edge(clk)) then if (we) then mem(to_integer(wr_addr)) <= wr_data; end if; rd_addr_int <= rd_addr; end if; end process; rd_data <= mem(to_integer(rd_addr_int)) when (re); Что по сути и соответсвует модели блочной памяти хилых. при отключеном pipeline регистре, поэтому те кто не знаком с этой фичей, потом откроет много удивительного
--------------------
|
|
|
|
|
May 31 2006, 13:21
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(des00 @ May 31 2006, 19:14)  [...]я не был бы столь воодушевлен, для хилых к сожалению симплифай не может: корректно отображать DWC память, пайплайнить на внутреннем тригере блоки ROM памяти (8.4 по крайней мере), вставлять аппаратные фифо блоки (виртекс 4) + даже если описать память так: Код process (clk) is begin [...] end process; все равно сибирается реально вот что Код process (clk) is begin if (rising_edge(clk)) then [...] end if; end process; rd_data <= mem(to_integer(rd_addr)) when (re); Что по сути и соответсвует модели блочной памяти хилых. при отключеном pipeline регистре, поэтому те кто не знаком с этой фичей, потом откроет много удивительного  Ну, я выше и имел в виду подобные моменты, когда говорил, что использование готовых блоков дает более предсказуемое и устойчивое поведение, нежели инферинг синтезатором. В общем, буду при случае экспериментировать, проверять.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 31 2006, 18:46
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
des00: Цитата ... Это из разряда думаю одно, пишу другое  . Данная конструкция должна выглядить примерно так: Код internal_async_result:ram_result<=mem(to_integer(rd_addr)); process(clk) begin if (rising_edge(clk)) then ... if (re) then rd_data<=ram_result; end if; end if; end process; Чем правильнее обьяснишь синтезатору, что хоцца получить, тем точнее он это сделает. А lpm-ы почти тоже самое, только в них подробнейшим обрасом обьясняется генератору "что делать", а при написании rtl об этом часто забывают и пытаются все запихать в одну строчку. ЗЫ: Повторяюсь, что считаю наезды на синтезаторы необоснованными, они всего навсего выдают результат, который его просили сделать на основании данных, который у него имеются. А просить надо "учиться, учиться и еще раз учиться" С  , не останавливаясь на достигнутом. Больше всего в rtl на vhdl мне нравится возможность создания самоадаптирующихся модулей. Пример:
Код entity myram is port( ... data : std_logic_vector; ... ); ... type mem_type is array(...) of std_logic_vector(data'range); ... Если подключить в прожект 3 таких модуля и на вход data подключять шины разной ширины, то подключится 3 разных блока памяти. Самое главное - ничего не надо делать для конфигурирования, оно само сконфигурируется. Слабо такое с lpm повторить без использования generate?
|
|
|
|
|
Jun 1 2006, 06:48
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата Данная конструкция должна выглядить примерно так: Код internal_async_result:ram_result<=mem(to_integer(rd_addr)); process(clk) begin if (rising_edge(clk)) then ... if (re) then rd_data<=ram_result; end if; end if; end process; ИМХО в корне не верно, вы описываете выходной регистр, с разрешением, работающий по клоку, тогда как в даташите на блоки памяти явно видно, что такого регистра там нет, а есть всего лишь выходная защелка (pipeline регистр не рассматриваем), а вот как раз адресс чтения там проходит через регистр пр. ug070.pdf стр. 115 Figure 4-5: Block RAM Logic Diagram (One Port Shown) более того если посмотреть на ds302.pdf стр. 33 Table 39: Block RAM Switching Characteristics то можно прекрасно увидеть что Clock CLK to DOUT output (without output register) в 2.2 раза медленнее чем с пайплайн регистром, именно потому, что после защелкивания адреса в тригере, требуеться выборка данных в защелку, а в реальной схеме если на выходе памяти стоит например сумматор, то тактовая вообще проседает, кстати если не ошибаюсь у стратикса/стратикса2 те же самые проблемы, а именно отстутвие асинхронного чтения на блочной памяти. Цитата [/code] Если подключить в прожект 3 таких модуля и на вход data подключять шины разной ширины, то подключится 3 разных блока памяти. Самое главное - ничего не надо делать для конфигурирования, оно само сконфигурируется. Слабо такое с lpm повторить без использования generate?[/size][/color] Да все правильно, скажу даже более у меня получалось через генерики подключать pipeline регистры (работало только для RAM, для ROM игнорировалось) и инвертировать клоки, и даже синтезировать память описаную через переменные (чего нет в датшите на симплифай), но не получилось никак описать DWC память, несколько стробов записи собранных на 1 BRAM, также есть определенные проблемы повторяемости при реализации памяти в 9, 18, 36 бит (симлифай 7.х) и при мультипексировании потоков данных на памяти. Я не утверждаю что этим нельзя пользоваться, но в ВХДЛ я решаю эти проблемы с помошью конфигураций (behavior/structure), так можно упростить симуляцию и не беспокоиться за синтез.
--------------------
|
|
|
|
|
Jun 1 2006, 07:04
|

Гуру
     
Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553

|
Стормозил. я имел в виду, что если нам нужен регистр на выходе или выходе, то его надо и описывать явно. Цитата ... rd_data <= mem(to_integer(rd_addr_int)) when (re);.. Может все же: Код ..clk.. if (re) then rd_addr_int <= rd_addr; endif; ... rd_data <= mem(to_integer(rd_addr_int)); Иначе зыщелка получается.
|
|
|
|
|
Jun 1 2006, 11:32
|
Местный
  
Группа: Свой
Сообщений: 244
Регистрация: 2-10-04
Из: Мухосранска
Пользователь №: 763

|
чтобы синплифай нормально делал блочную память,нужно слазить на сайт синплифая и в глупых вопросах умным разработчикам узреть ответ на этот вопрос.Для хилых это выглядит где-то так: Код entity block_ram is generic( AddrBits : integer := 8; DataBits : integer := 8 ); port( din : in std_logic_vector(DataBits-1 downto 0); addr : in std_logic_vector(AddrBits-1 downto 0); clk : in std_logic; we : in std_logic; dout : out std_logic_vector(DataBits-1 downto 0) ); end block_ram;
architecture rtl of block_ram is type mem_array is array (2**AddrBits-1 downto 0) of std_logic_vector(DataBits-1 downto 0); signal mem : mem_array; signal addr_reg : std_logic_vector(AddrBits-1 downto 0); begin
process(clk) begin if (clk'event and clk = '1') then addr_reg <= addr; if (we = '1') then mem(conv_integer(addr)) <= din; end if; end if; end process;
dout <= mem(conv_integer(addr_reg)); end rtl;
|
|
|
|
|
Jun 2 2006, 04:08
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Mad Makc @ Jun 1 2006, 06:32)  чтобы синплифай нормально делал блочную память,нужно слазить на сайт синплифая и в глупых вопросах умным разработчикам узреть ответ на этот вопрос.Для хилых это выглядит где-то так: Подозреваю что ваш сарказм вызван не внимательным прочтением постов, да и термин "нормально делать блочную память" у каждого свой, на досуге попробуйте заставить симплифай написать вот такую блочную память, БЕЗ использования CLB 2 порта: 1ый порт чения/записи 512х32 бита, 4 строба записи, по каждому на 8мь бит, выход через pipeline регистр, режим работы любой. 2ой порт чтения/записи 2048х8, выход через pipeline регистр, режим работы write_first. 2 vetal Цитата Иначе зыщелка получается. ug070.pdf стр. 112 Read Operation The read operation uses one clock edge. The read address is registered on the read port, and the stored data is loaded into the output latches after the RAM access time. тот же pdf стр. 115 Figure 4-5: Block RAM Logic Diagram (One Port Shown) Из этого рисунка следует что адрес чтения/записи "хлопает" в регистре всегда, а операции чтения/записи определяеться сигналами we/ena что в моем коде заменено на we/re. И при чтении данные по стробу храняться в выходной защелке. В своем примере я привел код, более близкий к реальному устройству bram памяти от хилых и указал, что в симплифае реально при сборке идет по-сути подмена первого кода, на второй. Но при этом нет никаких диагностических сообщений об этом (о расхождении желаемого и действительного) , кроме сообщения об обнаружении bram памяти.
--------------------
|
|
|
|
|
Aug 5 2011, 15:44
|
Местный
  
Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642

|
Цитата(papasha @ May 17 2006, 16:41)   Ну это было сразу понятно. Меня больше интересует какие преимущества другого программного продукта перед Foundation позволили ускорить процесс разработки? Я до сих пор пользуюсь Foundation, но только для поддержки старых проектов. Если делаешь с нуля, то даже и не думай, почему это лучше другие проги использовать. Сразу переходи на HDL и на проверенные связки продуктов, например, ActiveHDL + Sinplify Pro + ISE. Опосля поймешь. Уж поверь опыту, если не моему, то остальных соконфетников. Не пожалеешь. Интересно зачем нужны одновременно Sinplify Pro + ISE ? Разве одного продукта недостаточно. Если вы используете оба, то как разделяете функции между ними. В ActiveHDL понятно будет ввод и симуляция дизайна. А вот связка Sinplify Pro + ISE зачем нужна неясно.
--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти. (с) Уилл Роджерс
|
|
|
|
|
Aug 5 2011, 16:54
|
Местный
  
Группа: Свой
Сообщений: 254
Регистрация: 23-10-10
Из: астрал
Пользователь №: 60 371

|
Цитата(D-Luxe @ Aug 5 2011, 17:44)  Интересно зачем нужны одновременно Sinplify Pro + ISE ? Разве одного продукта недостаточно. Если вы используете оба, то как разделяете функции между ними.
В ActiveHDL понятно будет ввод и симуляция дизайна. А вот связка Sinplify Pro + ISE зачем нужна неясно. не довелось пока работать с ISE , у меня Quartus ... но тоже раньше задумывался об этом же - однако быстро понял, вот последний пример http://electronix.ru/forum/index.php?showtopic=93048где синтезис от Quartus работал , но одновременно делал проблемы... Synplify Pro - четко дал понять где именно проблема и решилася она за 5 мин. ( а это только недобольшой хобби проект ) в итоге - многое от недостатков HDL/Verilog, вернее многих неоднозначностей которые могут получиться если их использовать а других и лучших языков нет  вопросы еще более правильного и компактного синтеза - это я думаю еще бОлее широкая тема... в Quartusе - переход на Synplify очень прозрачен - один чек бокс и выбор EDIF/VQM
|
|
|
|
|
Aug 5 2011, 20:11
|

Lazy
     
Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76

|
Цитата(Timmy @ Aug 5 2011, 20:14)  XST ..., и более корявый и глючный. Скрестим шпаги, мистер? В чем корявость и глючночть? Или Вы достигли такого уровня, что Вам не хватает синтезатора в ISE и без некоторых преимуществ Synopsys как синтезатора Вам жизнь серая? По пунктам, пожалуйста с исходниками... Иначе Ваши мысли считаю трепом.
--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|