реклама на сайте
подробности

 
 
7 страниц V  « < 3 4 5 6 7 >  
Reply to this topicStart new topic
> Почему не хватает родных САПР для ПЛИС?, Зачем нужны Active-HDL, Riviera, ModelSym, Synplify, Identify...
vetal
сообщение May 31 2006, 08:31
Сообщение #61


Гуру
******

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



Проверил(ram) возможные комбинации с регистровым и нерегистровым и пр. выходами/входами - хрумкает так , что за ушами трещит. Проблеммы могут возникнуть тогда, когда целевая архитектура не поддерживает чудо.(На пример в циклоне ram без регистра адреса/данных не получится).
Go to the top of the page
 
+Quote Post
dxp
сообщение May 31 2006, 09:14
Сообщение #62


Adept
******

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



Цитата(vetal @ May 31 2006, 15:31) *
Проверил(ram) возможные комбинации с регистровым и нерегистровым и пр. выходами/входами - хрумкает так , что за ушами трещит. Проблеммы могут возникнуть тогда, когда целевая архитектура не поддерживает чудо.(На пример в циклоне ram без регистра адреса/данных не получится).

А какой синтезатор? Какая ПЛИС?

Например, в том же Циклоне аппаратные блоки памяти, насколько знаю, имеют внутри себя входной регистр, его нельзя отключить. Поэтому нерегистровые входы при описании памяти тут не пройдут. Но это не вопрос, тут все понятно. Как уже сказал, оно (Синплифай каких-то 7.х версий) не хотел инферить блоковую память если она была описана без регистров на выходе. И это было четко документировано.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vetal
сообщение May 31 2006, 09:18
Сообщение #63


Гуру
******

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



Цитата(dxp @ May 31 2006, 13:14) *
Цитата(vetal @ May 31 2006, 15:31) *

Проверил(ram) возможные комбинации с регистровым и нерегистровым и пр. выходами/входами - хрумкает так , что за ушами трещит. Проблеммы могут возникнуть тогда, когда целевая архитектура не поддерживает чудо.(На пример в циклоне ram без регистра адреса/данных не получится).

А какой синтезатор?


Synplify 8.5.1.
(Проверял на actel apa и altera cyclone)
Go to the top of the page
 
+Quote Post
dxp
сообщение May 31 2006, 09:55
Сообщение #64


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)

Ок, отличная новость, в следующий раз обязательно попробую поюзать языковое описание - генерация модулей в мегавизарде, особенно, когда надо что-то подправить, честно говоря, достает. Спасибо. cheers.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
des00
сообщение May 31 2006, 12:14
Сообщение #65


Вечный ламер
******

Группа: Модераторы
Сообщений: 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)

Ок, отличная новость, в следующий раз обязательно попробую поюзать языковое описание - генерация модулей в мегавизарде, особенно, когда надо что-то подправить, честно говоря, достает. Спасибо. cheers.gif


я не был бы столь воодушевлен,
для хилых к сожалению симплифай не может:
корректно отображать 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 регистре,
поэтому те кто не знаком с этой фичей, потом откроет много удивительного smile.gif


--------------------
Go to the top of the page
 
+Quote Post
dxp
сообщение May 31 2006, 13:21
Сообщение #66


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 регистре,
поэтому те кто не знаком с этой фичей, потом откроет много удивительного smile.gif

Ну, я выше и имел в виду подобные моменты, когда говорил, что использование готовых блоков дает более предсказуемое и устойчивое поведение, нежели инферинг синтезатором. В общем, буду при случае экспериментировать, проверять.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
vetal
сообщение May 31 2006, 18:46
Сообщение #67


Гуру
******

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



des00:
Цитата
...

Это из разряда думаю одно, пишу другое smile.gif.
Данная конструкция должна выглядить примерно так:
Код
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 об этом часто забывают и пытаются все запихать в одну строчку.

ЗЫ: Повторяюсь, что считаю наезды на синтезаторы необоснованными, они всего навсего выдают результат, который его просили сделать на основании данных, который у него имеются. А просить надо "учиться, учиться и еще раз учиться" С smile.gif, не останавливаясь на достигнутом.

Больше всего в 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?
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 1 2006, 06:48
Сообщение #68


Вечный ламер
******

Группа: Модераторы
Сообщений: 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), так можно упростить симуляцию и не беспокоиться за синтез.


--------------------
Go to the top of the page
 
+Quote Post
vetal
сообщение Jun 1 2006, 07:04
Сообщение #69


Гуру
******

Группа: Модераторы
Сообщений: 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));

Иначе зыщелка получается.
Go to the top of the page
 
+Quote Post
Mad Makc
сообщение Jun 1 2006, 11:32
Сообщение #70


Местный
***

Группа: Свой
Сообщений: 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;
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 2 2006, 04:08
Сообщение #71


Вечный ламер
******

Группа: Модераторы
Сообщений: 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 памяти.


--------------------
Go to the top of the page
 
+Quote Post
D-Luxe
сообщение Aug 5 2011, 15:44
Сообщение #72


Местный
***

Группа: Свой
Сообщений: 347
Регистрация: 24-02-10
Из: Пенза
Пользователь №: 55 642



Цитата(papasha @ May 17 2006, 16:41) *
sm.gif Ну это было сразу понятно.
Меня больше интересует какие преимущества другого программного продукта перед Foundation позволили ускорить процесс разработки?

Я до сих пор пользуюсь Foundation, но только для поддержки старых проектов. Если делаешь с нуля, то даже и не думай, почему это лучше другие проги использовать. Сразу переходи на HDL и на проверенные связки продуктов, например, ActiveHDL + Sinplify Pro + ISE. Опосля поймешь. Уж поверь опыту, если не моему, то остальных соконфетников. Не пожалеешь.

Интересно зачем нужны одновременно Sinplify Pro + ISE ? Разве одного продукта недостаточно. Если вы используете оба, то как разделяете функции между ними.

В ActiveHDL понятно будет ввод и симуляция дизайна. А вот связка Sinplify Pro + ISE зачем нужна неясно.


--------------------
Нелегко оказаться на верном пути, но куда труднее его пройти.
(с) Уилл Роджерс
Go to the top of the page
 
+Quote Post
DevL
сообщение Aug 5 2011, 16:54
Сообщение #73


Местный
***

Группа: Свой
Сообщений: 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, вернее многих неоднозначностей которые могут получиться если их использовать
а других и лучших языков нет sm.gif

вопросы еще более правильного и компактного синтеза - это я думаю еще бОлее широкая тема...

в Quartusе - переход на Synplify очень прозрачен - один чек бокс и выбор EDIF/VQM
Go to the top of the page
 
+Quote Post
Timmy
сообщение Aug 5 2011, 17:14
Сообщение #74


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(D-Luxe @ Aug 5 2011, 19:44) *
Интересно зачем нужны одновременно Sinplify Pro + ISE ? Разве одного продукта недостаточно. Если вы используете оба, то как разделяете функции между ними.

XST не поддерживает SystemVerilog, и более корявый и глючный. Интеграция Sinplify в ISE стандартно предусмотрена, и делается элементарно.
Go to the top of the page
 
+Quote Post
Victor®
сообщение Aug 5 2011, 20:11
Сообщение #75


Lazy
******

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



Цитата(Timmy @ Aug 5 2011, 20:14) *
XST ..., и более корявый и глючный.

Скрестим шпаги, мистер?
В чем корявость и глючночть?
Или Вы достигли такого уровня, что Вам не хватает синтезатора в ISE
и без некоторых преимуществ Synopsys как синтезатора Вам жизнь серая? sm.gif
По пунктам, пожалуйста с исходниками...
Иначе Ваши мысли считаю трепом.


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post

7 страниц V  « < 3 4 5 6 7 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01557 секунд с 7
ELECTRONIX ©2004-2016