liloukan 0 21 июня, 2006 Опубликовано 21 июня, 2006 (изменено) · Жалоба На VHDL сделал суматор с переменным числом слагаемых. Параметры задаются через generic map. Синтез проходит на УРА! при всех значенияях, но симуляция в ModelSime 5.7(из WebPack 6.3) выбрасывает ошибку. По моему в моделсиме не полностью реализован оператор for ___ generate. Что посоветуете? По другому описать данный компонент? Другой симулятор? library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity conveyer is generic (WIDTH : natural:= 4; INPORTS : natural:=6); port ( CLK : in std_logic; DATA_IN : in std_logic_vector(WIDTH*INPORTS - 1 downto 0); DATA_EN : in std_logic; DATA_OUT : out std_logic_vector(WIDTH - 1 downto 0)); end conveyer; architecture Behavioral of conveyer is function getst (INPORTS : in natural) return natural is variable st : natural; begin st := 0; while 2**st < INPORTS loop st := st + 1; end loop; return st; end; constant CONN : natural := getst(INPORTS); type ar is array (1 to 2**(CONN+1) - 1) of std_logic_vector(WIDTH - 1 downto 0); signal data:ar; begin ge1: for i in 1 to CONN generate process(CLK) variable num: natural; begin if rising_edge(CLK) then if DATA_EN = '1' then num := 0; cl1: for j in 1 to 2**(i - 1) loop data(2**(i-1)+(j-1)) <= data(2**i+num)+data(2**i+num+1); num := num + 2; end loop; end if; end if; end process; end generate; gen2: for i in 1 to 2**CONN generate data(2**CONN + i - 1) <= DATA_IN(i*WIDTH - 1 downto (i-1)*WIDTH) when i < (INPORTS + 1) else (others=>'0'); end generate; DATA_OUT <= data(1); end Behavioral; Изменено 21 июня, 2006 пользователем Serega_YSV Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба На VHDL сделал суматор с переменным числом слагаемых. Параметры задаются через generic map. Синтез проходит на УРА! при всех значенияях, но симуляция в ModelSime 5.7(из WebPack 6.3) выбрасывает ошибку. Лето в разгаре, телепаты в отпусках. Почему вы не потрудились привести текст ошибки? Если вы просите помощи, то почему не предоставляете максимум информации? Очень часто это помогает найти решение прямо в первой итерации, а не вытягивать клещами информацию постепенно. По моему в моделсиме не полностью реализован оператор for ___ generate. Вы ошибаетесь. Все там реализовано нормально. Что посоветуете? По другому описать данный компонент? Другой симулятор? Попробую угадать.. use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; Ну, во-первых, забудьте про эти библиотеки. Только numeric_std. gen2: for i in 1 to 2**CONN generate data(2**CONN + i - 1) <= DATA_IN(i*WIDTH - 1 downto (i-1)*WIDTH) when i < (INPORTS + 1) else (others=>'0'); end generate; Здесь ошибка? Так делать не надо. Надо так: gen2: for i in 1 to 2**CONN generate genLess: if i < (INPORTS + 1) generate data(2**CONN + i - 1) <= DATA_IN(i*WIDTH - 1 downto (i-1)*WIDTH); end generate; genMore: if i >= (INPORTS + 1) generate data(2**CONN + i - 1) <= (others=>'0'); end generate; end generate; Такой же вопрос обсуждается тут: http://groups.google.com/group/comp.lang.v...161d5e3fac606/# Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба ... "Ну, во-первых, забудьте про эти библиотеки. Только numeric_std." ... Это почему?! Аргументы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 197 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба ... "Ну, во-первых, забудьте про эти библиотеки. Только numeric_std." ... Это почему?! Аргументы... Numeric_std - детище IEEE и входит в стандарт, а std_logic_signed(_arith) и т.п. - это плод Synopsys и стандартом не является. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MadMakc 0 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба А не могли бы поделиться описанием на Numeric_std? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба А не могли бы поделиться описанием на Numeric_std? Я лучшего описания, чем сам код, предложить не могу: http://www.vhdl.org/vhdlsynth/vhdl/numeric_std.vhd Все очень хорошо видно, какие фуникции, как перегружены... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба Ну, во-первых, забудьте про эти библиотеки. Только numeric_std. А все-таки в чем глюки этих библиотек? То что они не являются стандартом, я понял. Но хотелось бы знать на будущее, чтобы учитывать. Их что, разные производители по разному реализуют, или у них разный состав, или просто у кого-то из производителей ошибки замечены, переносимость кода теряется? Xilinx при генерации шаблона user core сразу их подключает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maior 0 22 июня, 2006 Опубликовано 22 июня, 2006 · Жалоба Стандартный пакет IEEE.NUMERIC_STD рекомендован для применения в новых проектах. Это означает, что если новый проект является частично наследуемым из более ранних проектов/версий, где использовались IEEE.STD_LOGIC_ARITH и IEEE.STD_LOGIC_UNSIGNED, то надо пользоваться двумя правилами: 1. В библиотечных элементах в их интерфейсах использовать, по возможности, только std_logic<_vector>, что и делают Altera и Xilinx при генерации своих коров. 2. Но eсли только возникает необходимость в конвертации типов, использованных из разных библиотек - делать это отдельно и аккуратно. Например, signed в ieee.std_logic_arith и в ieee.numeric_std формально совершенно разные типы. Никаких глюков в никаких из этих билиотеках нет. Поэтому какие из них использовать в своем проекте, в конце концов, дело вкуса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 23 июня, 2006 Опубликовано 23 июня, 2006 · Жалоба 2 maior: спасибо за разъяснения, теперь стало ясно :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться