Nick Kovalyov 0 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Сам до недавнего времни работал в Quartus. Пишу на VHDL. Тем не менее, часто использовал VHDL-описания блоков, сгенерированные Megawizard-ом. При этом я дорабатывал такие описания так, чтобы я мого их использовать в своем проекте с произвольной разрядностью. Например, для аккумулятора фрагмент его исходного описания от Megawizard-а было такми: ............................................. LIBRARY altera_mf; USE altera_mf.all; ENTITY acc IS PORT ( aclr : IN STD_LOGIC := '0'; add_sub : IN STD_LOGIC := '1'; clock : IN STD_LOGIC := '0'; data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); result : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END acc; .................................................. Я дорабатываю так: LIBRARY altera_mf; USE altera_mf.all; ENTITY acc IS GENERIC (n: natural); PORT ( aclr : IN STD_LOGIC := '0'; add_sub : IN STD_LOGIC := '1'; clock : IN STD_LOGIC := '0'; data : IN STD_LOGIC_VECTOR (n-1 DOWNTO 0); result : OUT STD_LOGIC_VECTOR (n-1 DOWNTO 0) ); END acc; И в проекте спокойно вызываю как: acc_x_inst : acc generic map (n=>8) PORT MAP ( В среде Xilinx ISE аналогично я использую IP Coregen для аккумулятора. Я игнорирую то, что он в настройках дает только фиксированную разрядность, а в сгенерированном им VHDL-описании пытаюсь аналогично скорректировать его для произвольной разрядности через generic. Но если установить такой аккумулятор в проекте с разрядностью, отличной от той, что я задал в настройках IP Coregen, то компилятор сообщает мне об ошибке. Конечно, я могу написать свой аккумулятор с соответсвующим generic, но такой варинат меня сейчас не устраивает. В общем, как правильно это делать в Xilinx ISE? Или из какой библиотеки (аналогично altera_mf) можно вытягивать описание компонент с возможностью конкретизировать разрадность и другие параметры через generic? Или только писать свои реализации блоков? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 5 31 мая, 2008 Опубликовано 31 мая, 2008 · Жалоба Не все компоненты можно вставлять из библиотеки (Xilinxcorelib), вот например BinaryCounter v8.0 можно (о чем написанно в DataSheet на эту корку). Т.к. я IPCore аккумулятор не использую, то не знаю можно ли его тоже вставить напрямую из библиотеки, обойдясь без GUI интерфейса (в любом случае в библиотеке должен быть симуляционный эквивалент). Но во многих VHDL файлах сгенерированных корок написанно, что этот файл можно использовать только для behavioral моделирования, т.к. при компиляции такого VHDL файла код получиться субоптимальный, поищите нет ли такого предупреждения в Вашем файле. Когда Вы пользуетесь GUI интерфейсом и создаяте конкретную корку, то Вы задаете параметры по которым генерируется NGC файл (а VHDL прилагающийся к нему используется для целей behavioral симуляции, о чем обычно сверху и написано). При Translate в Ваш проект засасывается сильно оптимизированный NGC файл, как правило, плотненько набитый constraint'ами, а не одноименный VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться