Krys 2 10 октября, 2014 Опубликовано 10 октября, 2014 · Жалоба готово: general_purpose_lib.rar Использовать так: del_lat : delay generic map ( DEL => DUT_LAT ) port map ( clk => clk, -- clock -- Входные данные data_in => del_in, -- Выходные данные data_out => del_out ); del_in <= y1_mat_i & y1_mat_q & y2_mat_i & y2_mat_q; -- -- y1_mat_d_i <= del_out(EXT_DATA_BW*4 - 1 downto EXT_DATA_BW*3); -- -- y1_mat_d_q <= del_out(EXT_DATA_BW*3 - 1 downto EXT_DATA_BW*2); -- -- y2_mat_d_i <= del_out(EXT_DATA_BW*2 - 1 downto EXT_DATA_BW ); -- -- y2_mat_d_q <= del_out(EXT_DATA_BW - 1 downto 0 ); split(del_out, y1_mat_d_i, y1_mat_d_q, y2_mat_d_i, y2_mat_d_q); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба Знатоки, подскажите, пожалуйста. Есть строчка: rnd_const <= (NRS_BITS-1 => '1', others => '0'); где entity mult35x35 is generic ( NRS_BITS : natural := 0; Active-HDL выдаёт такое ругательство: # Warning: COMP96_0349: ../../../../../rtl/std_lib/mult35x35.vhd : (194, 23): Aggregate with multiple choices has a non-static or null choice. Пробовал вместо NRS_BITS подставлять константу - та же ошибка. Пробовал вместо NRS_BITS подставлять просто число - ошибки нет. Как правильно написать, чтобы не было ворнинга. Что я делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба rnd_const <= (NRS_BITS - 1 => '1', others => '0'); entity mult35x35 is generic ( NRS_BITS : natural := 0; Чему равно NRS_BITS при инстанцировании компонента? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба бывает 0 в некоторых инстансах, бывает 33 rnd_const объявлена так: signal rnd_const : std_logic_vector(BW_DSP_OUT-1 downto 0); , где constant BW_DSP_OUT : natural := 48; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба бывает 0 в некоторых инстансах signal rnd_const : std_logic_vector(BW_DSP_OUT-1 downto 0); Ну вот и ответ. Если 0, то получаем rnd_const <= (-1 => '1', others => '0'); Вы вышли за диапазон. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба Виноват, сразу не показал весь код, там ещё генерэйт есть: norndg: if NRS_BITS = 0 generate rnd_const <= (others => '0'); end generate norndg; rndg: if not (NRS_BITS = 0) generate rnd_const <= (NRS_BITS-1 => '1', others => '0'); end generate rndg; Так что нулевые отсеиваются. Ругается на ненулевые похоже. Попробовал ещё раз вместо NRS_BITS подставить константу NRS_BITS_С, определённую как constant NRS_BITS_C : natural := 4; Варнинг исчез. Но когда определяю так: constant NRS_BITS_C : natural := NRS_BITS; . То варнинг остаётся. Получается ругается на generic параметры?... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба constant NRS_BITS_C : natural := 4; Варнинг исчез. Но когда определяю так: constant NRS_BITS_C : natural := NRS_BITS; . То варнинг остаётся. Получается ругается на generic параметры?... Да, это такая багофича в ActiveHDL - в индексах агрегатов нельзя использовать дженерики и производные от дженериков константы, а только локальные константы. А ещё нельзя использовать "others=>" совместно с unconstrained ports и производными от них:). При этом без агрегатов можно сделать то же самое без проблем... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 31 октября, 2014 Опубликовано 31 октября, 2014 · Жалоба спасибо. Все подводные камни уже оказывается прощупаны ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба готово Выяснились первые недостатки такого подхода - разделять умеет только вектора std_logic_vector, одиночные проводники типа std_logic не разделит. Либо нужно писать дополнительные процедуры, учитывая, что на каждом месте может быть одиночный проводник, а может и не быть. Даже для 4 аргументов придётся 16 разных функций описывать, это уж слишком... Пока обхожу этот "гвоздь в крышку гроба VHDL" описанием одиночных сигналов как std_logic_vector(0 downto 0), но это неудобно, т.к. при подстановке приходится всегда индекс (0) подписывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 7 ноября, 2014 Опубликовано 7 ноября, 2014 · Жалоба Да, это такая багофича в ActiveHDL - в индексах агрегатов нельзя использовать дженерики и производные от дженериков константы, а только локальные константы. А ещё нельзя использовать "others=>" совместно с unconstrained ports и производными от них:). При этом без агрегатов можно сделать то же самое без проблем... О! Оказывается уже была такая проблема у людей... ) Только раньше это вызывало ошибку, а сейчас ворнинг. Ну и ладно. Забьём ) VHDL, Агрегат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба Такой вопрос появился: когда работал с Verilog под Xilinx, то в тестбенче использовали сигнал glbl.GSR, чтобы типа свой ресет не колхозить, а использовать "кошерный ресет", от производителя так сказать. Как делают ресет в тестбенчах на VHDL под Xilinx? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба Такой вопрос появился: когда работал с Verilog под Xilinx, то в тестбенче использовали сигнал glbl.GSR, чтобы типа свой ресет не колхозить, а использовать "кошерный ресет", от производителя так сказать. Как делают ресет в тестбенчах на VHDL под Xilinx? В package vcomponents(файл ISE_DS\ISE\vhdl\src\simprims\simprim_Vcomponents.vhd) объявляется глобальный сигнал GSR, и все модули могут свободно на него ссылаться. Удобнее, чем в Верилоге:). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 10 ноября, 2014 Опубликовано 10 ноября, 2014 · Жалоба А у Вас не найдётся примерчик использования такой конструкции? А чем удобнее? Почему в Верилоге не все могут на него ссылаться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба А у Вас не найдётся примерчик использования такой конструкции? А чем удобнее? Почему в Верилоге не все могут на него ссылаться? В Верилоге, чтобы надёжно ссылаться на "глобальный" сигнал, требуется знать полный абсолютный путь, а это невозможно для стандартных компонетов, которые могут быть включены куда угодно. То есть возможно, но для этого потребовалось создать модуль glbl, голову абсолютного пути, который приходится ставить вторым топом, что неудобно. А в Латтисе сделали ещё хуже. Примерчик использования - выше я указал имя файла, открываем его и сразу вверху видим пример декларации глобальных сигналов. Далее открываем какой-нибудь файл компонента, например ISE_DS\ISE\vhdl\src\simprims\primitive\mti\X_BUFR.vhd, и видим в заголовке директиву use simprim.Vcomponents.all , которая открывает короткие ссылки на глобальные сигналы. И далее есть строчка GSR_dly <= GSR, которая забирает глобальный сигнал внутрь. Устанавливаться GSR должен в модулях X_SIM_CONFIG_*, и тут обнаружился сюрприз: в этих модулях есть директива use simprim.Vcomponents.all, однако GSR декларируется также и локально(это, похоже, ошибка), и по правилам по короткому имени будет устанавливаться локальный сигнал, который вообще нигде не используется. Таким образом, очень похоже, что GSR в VHDL тупо не моделируется, он всегда остаётся '0', как был инициализирован в глобальной декларации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба Спасибо за развёрнутый ответ, теперь многое понятно. Хорошо, что Вы прояснили. Оказывается в VHDL и сигнал GSR тоже есть, и пользоваться им удобнее... ... но он не работает )))) Короче в VHDL на GSR проще забить и пользоваться самодельным типа: arst <= '1'; wait for 90 ns; arst <= '0'; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться