Мур 1 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба Туплю что-то... Кто подскажет свежим взглядом, что я пропускаю в тесте с generate? Ругается (места обозначил звездочками) ERROR:HDLCompiler:806 Line 27: Syntax error near "generate" ERROR:HDLCompiler:806 Line 34: Syntax error near "generate". library IEEE; use IEEE.std_logic_1164.all; use ieee.numeric_std.all; entity Log_Decoder is Generic ( G_OUTPUT_SIZE: integer ); Port ( CLK_INP : in STD_LOGIC; CODE_DC_INP : in STD_LOGIC_VECTOR (G_OUTPUT_SIZE-1 downto 0); RESET_INP : in STD_LOGIC; CODE_DC_OUT : out STD_LOGIC_VECTOR ((2**G_OUTPUT_SIZE)-1 downto 0)); end Log_Decoder; architecture Behavioral of Log_Decoder is begin process(CLK_INP) begin if CLK_INP'event and CLK_INP = '1' then if ( RESET_INP = '0') then CODE_DC_OUT <= (others=>'0'); else * cikl: for i in 0 to (2**G_OUTPUT_SIZE)-1 generate begin if (i = conv_integer(CODE_DC_INP)) then CODE_DC_OUT(i) <= '1'; else CODE_DC_OUT(i) <= '0'; end if; * end generate cikl; end if; end if; end process; end Behavioral; Уж очень заманчивая конструкция!.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба Туплю что-то... Кто подскажет свежим взглядом, что я пропускаю в тесте с generate? Ругается (места обозначил звездочками) ERROR:HDLCompiler:806 Line 27: Syntax error near "generate" ERROR:HDLCompiler:806 Line 34: Syntax error near "generate". Уж очень заманчивая конструкция!.... library IEEE; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.ALL; entity genericmux is Generic ( G_OUTPUT_SIZE: integer := 8); Port ( CLK_INP : in STD_LOGIC; CODE_DC_INP : in STD_LOGIC_VECTOR (G_OUTPUT_SIZE-1 downto 0); RESET_INP : in STD_LOGIC; CODE_DC_OUT : out STD_LOGIC_VECTOR (2**G_OUTPUT_SIZE-1 downto 0)); end genericmux; architecture Behavioral of genericmux is begin process(CLK_INP) begin if CLK_INP'event and CLK_INP = '1' then if ( RESET_INP = '0') then CODE_DC_OUT <= (others=>'0'); else for i in 0 to ((2**G_OUTPUT_SIZE)-1) loop if (i = conv_integer(CODE_DC_INP)) then CODE_DC_OUT(i) <= '1'; else CODE_DC_OUT(i) <= '0'; end if; end loop; end if; end if; end process; end Behavioral; так квартус компилирует :) PS название компонента/модуля поменял - не хотел новый проект делать... PS PS не скромный вопрос из любопытства и чем же конструкция заманчива? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба PS название компонента/модуля поменял - не хотел новый проект делать... PS PS не скромный вопрос из любопытства и чем же конструкция заманчива? :) Спасибо! :tort: Хочется лаконичности. У меня напрашивается Decoder на 128 линий. Есть задумка перевернуть немного логику по разрядности... Хочу поиграться с разрядностью от выхода, а не входа.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба Спасибо! :tort: Хочется лаконичности. У меня напрашивается Decoder на 128 линий. Есть задумка перевернуть немного логику по разрядности... Хочу поиграться с разрядностью от выхода, а не входа.. Лаконично можно одним выражением описать: CODE_DC_OUT <= std_logic_vector(shift_left(to_unsigned(1, CODE_DC_OUT'length), to_integer(unsigned(CODE_DC_INP)))); Хотя кодогенерация для варианта с циклом может оказаться лучше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 ноября, 2015 Опубликовано 15 ноября, 2015 · Жалоба Лаконично можно одним выражением описать: CODE_DC_OUT <= std_logic_vector(shift_left(to_unsigned(1, CODE_DC_OUT'length), to_integer(unsigned(CODE_DC_INP)))); Хотя кодогенерация для варианта с циклом может оказаться лучше. Гран мерси! :tort: Прдолжаю вариант трансформации... library IEEE; use IEEE.std_logic_1164.all; use work.log2_pkg.all; use ieee.numeric_std.all; USE ieee.std_logic_arith.ALL; USE ieee.std_logic_unsigned.ALL; entity Log_Decoder is Generic ( G_OUTPUT_SIZE: integer ); Port ( CODE_DC_INP : in STD_LOGIC_VECTOR (log2(G_OUTPUT_SIZE)-1 downto 0); CODE_DC_OUT : out STD_LOGIC_VECTOR (G_OUTPUT_SIZE-1 downto 0)); end Log_Decoder; architecture Behavioral of Log_Decoder is begin process(CODE_DC_INP) begin cikl: for i in 0 to G_OUTPUT_SIZE-1 loop if (i = conv_integer(CODE_DC_INP)) then CODE_DC_OUT(i) <= '1'; else CODE_DC_OUT(i) <= '0'; end if; end loop; end process; end Behavioral; ничего нового, но для причесывания полезно... library ieee; use ieee.std_logic_1164.all; package log2_pkg is function log2(n:integer) return integer; end; package body log2_pkg is function log2(n:integer) return integer is variable m,p:integer; begin m:=0; p:=1; while p<n loop m:=m+1; p:=p*2; end loop; return m; end log2; end log2_pkg; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 15 ноября, 2015 Опубликовано 15 ноября, 2015 · Жалоба Туплю что-то... Кто подскажет свежим взглядом, что я пропускаю в тесте с generate? Вы не можете использовать generate внутри process, но можете наоборот. Лично я предпочитаю использовать циклы вместо generate, если это возможно. generate порождает дополнительный уровень иерархии и в симуляторе с ним не очень удобно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 15 ноября, 2015 Опубликовано 15 ноября, 2015 · Жалоба Вы не можете использовать generate внутри process, но можете наоборот. Лично я предпочитаю использовать циклы вместо generate, если это возможно. generate порождает дополнительный уровень иерархии и в симуляторе с ним не очень удобно работать. Я позаимствовал этот текст из англоязычного интернета... И стал шлифовать. Авторитетность сработала не в мою пользу... Спасибо ребятки! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 28 ноября, 2015 Опубликовано 28 ноября, 2015 · Жалоба Столкнулся с интересной особенностью для синтезатора от ISE(Xilinx). Максимально насыщенный параметрическими настройками проект, который шел под Spartan 6(Без единого варнинга!), при портации на CPLD отказывался синтезироваться и ругался на непонимание параметров. Тупо отбразывал сигналы... RTL- "оставались рожки да ножки". Понятно, что макроячейки другие и не все синтезабельно в итоге.. Вопрос, что любит CPLD? Какие конструкции VHDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться