jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба Обнулить просто signal fpga_outputs : std_logic_vector(40 downto 0) := (others => '0'); но если надо биты 0-19 сделать единицы а остальные 20-40 нули - как это сделать не записывая длинной строкой все биты? пробовал разные варианты signal fpga_outputs : std_logic_vector(40 downto 0) := (others => '0' & X"0000001111"); signal fpga_outputs : std_logic_vector(40 downto 0) := (others(0 downto 19) => '1' & others(20 downto 40) => '0'); генерирует ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба а стандарт читать сейчас вообще не принято? ну ладно, читать это сложно, но банально погуглить по ключевым словам "VHDL vector initialization" вообще никак? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба On 9/11/2023 at 11:48 AM, des00 said: а стандарт читать сейчас вообще не принято? ну ладно, читать это сложно, но банально погуглить по ключевым словам "VHDL vector initialization" вообще никак? VHDL vector initialization - это первое что я забил в гугле. но он даёт только простые случаи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба 4 minutes ago, jenya7 said: VHDL vector initialization - это первое что я забил в гугле. но он даёт только простые случаи. вот первая строка из гугла, там про агрегаты в контексте одного бита https://stackoverflow.com/questions/60330923/assigning-initial-value-to-vhdl-vector сверится со стандортом и передалать агрегат на несколько бит. а вот шестая строка из гугла https://stackoverflow.com/questions/16593125/vhdl-how-to-initialize-my-signal где разобраны случаи еще более сложных назначений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба On 9/11/2023 at 11:58 AM, des00 said: вот первая строка из гугла, там про агрегаты в контексте одного бита https://stackoverflow.com/questions/60330923/assigning-initial-value-to-vhdl-vector сверится со стандортом и передалать агрегат на несколько бит. ну там signal Qout: Std_Logic_Vector (4 downto 0) := (0 => '1', others => '0'); а мне шо делать? signal fpga_outputs : std_logic_vector(40 downto 0) := ((0 downto 19) => '1', others => '0'); ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба 50 minutes ago, jenya7 said: ошибка. 19 downto 0, и можно без скобок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба On 9/11/2023 at 12:56 PM, Strob said: 19 downto 0, и можно без скобок все равно ошибка. Quote positional association must be listed before named association Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба 38 minutes ago, jenya7 said: так, для каждого елемента прописиваешь значение type rom_array is array(0 to 2**ADDR-1) of std_logic_vector(DATA-1 downto 0); constant mem : rom_array := ( x"0A732DF5", x"0A72DA12", x"0A72862F", x"0A72324D", x"0A71DE6A", x"0A718A87", x"0A7136A4", x"0A70E2C1", x"0A708EDE", x"0A703AFB", x"0A6FE719", x"0A6F9336", x"0A6F3F53", x"0A6EEB70", x"0A6E978D", x"0A6E43AA", x"0A6DEFC8", x"0A6D9BE5", x"0A6D4802", x"0A6CF41F", x"0A6CA03C", x"0A7381D8", x"0A732DF5", x"0A72DA12", x"0A72862F", x"0A72324D", x"0A71DE6A", x"0A718A87", x"0A7136A4", x"0A70E2C1", x"0A708EDE", x"0A703AFB", x"0A6FE719", x"0A6F9336", x"0A6F3F53", x"0A6EEB70", x"0A6E978D", x"0A6E43AA", x"0A6DEFC8", x"0A6D9BE5", x"0A6D4802", x"0A6CF41F", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000", x"00000000" ); можно через функцию library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use IEEE.NUMERIC_STD.ALL; entity bram_tdp is generic ( DATA : integer := 32; ADDR : integer := 12 ); port ( -- Port A a_clk : in std_logic; --ena : in std_logic; a_wr : in std_logic; a_addr : in std_logic_vector(ADDR-1 downto 0); a_din : in std_logic_vector(DATA-1 downto 0); a_dout : out std_logic_vector(DATA-1 downto 0); -- Port B b_clk : in std_logic; --enb : in std_logic; b_wr : in std_logic; b_addr : in std_logic_vector(ADDR-1 downto 0); b_din : in std_logic_vector(DATA-1 downto 0); b_dout : out std_logic_vector(DATA-1 downto 0) ); end bram_tdp; architecture rtl of bram_tdp is -- Shared memory type mem_type is array ( (2**ADDR)-1 downto 0 ) of std_logic_vector(DATA-1 downto 0); -- FUNCTION initialize_ram return mem_type is variable result : mem_type; -- variable v_TEMP : std_logic_vector(((DATA/2)-1) downto 0); -- BEGIN -- v_TEMP := (others => '1'); -- FOR i IN ((2**ADDR)-1) DOWNTO 0 LOOP -- result(i) := v_TEMP & std_logic_vector( to_unsigned(natural(i), natural'((DATA/2)))); -- END LOOP; -- RETURN result; -- END initialize_ram; FUNCTION initialize_ram return mem_type is variable result : mem_type; BEGIN FOR i IN ((2**ADDR)-1) DOWNTO 0 LOOP result(i) := std_logic_vector( to_unsigned(natural(i), natural'((DATA)))); END LOOP; RETURN result; END initialize_ram; shared variable mem : mem_type := initialize_ram; -- shared variable mem : mem_type := (others => (others => '0')); -- := initialize_ram; begin -- Port A process(a_clk) begin if(a_clk'event and a_clk='1') then -- if ena = '1' then if(a_wr='1') then mem(conv_integer(a_addr)) := a_din; end if; a_dout <= mem(conv_integer(a_addr)); -- end if; end if; end process; -- Port B process(b_clk) begin if(b_clk'event and b_clk='1') then --- if enb = '1' then if(b_wr='1') then mem(conv_integer(b_addr)) := b_din; end if; b_dout <= mem(conv_integer(b_addr)); -- end if; end if; end process; end rtl; можно проинициализировать массив нулями потом дополнительно проинициализировать необходимые єлементы отдельно type t_Five is array (0 to 4) of bit_vector(15 downto 0); signal r_Calc : t_Five := (others => (others => '0')); r_Calc (1) <= std_logic_vector(to_unsigned(15, r_Calc'length); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 (изменено) · Жалоба так ребята, я понял. лучше уж я сделаю так signal fpga_outputs : std_logic_vector(40 downto 0) := "111111111111111111100000000000000000000"; и забуду про это как страшный сон. Изменено 11 сентября, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба 19 downto 0 => (others => '1'), others '0' Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 (изменено) · Жалоба On 9/11/2023 at 2:42 PM, alexadmin said: 19 downto 0 => (others => '1'), others '0' все равно ругается а вот так компилируется signal fpga_outputs : std_logic_vector(40 downto 0) := (19 downto 0 => '1', others => '0'); Изменено 11 сентября, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба 20 minutes ago, jenya7 said: а вот так компилируется В шестом посте это же предлагалось, нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 11 сентября, 2023 Опубликовано 11 сентября, 2023 · Жалоба On 9/11/2023 at 3:29 PM, andrew_b said: В шестом посте это же предлагалось, нет? он почему то на скобки ругался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 12 сентября, 2023 Опубликовано 12 сентября, 2023 · Жалоба 23 часа назад, jenya7 сказал: signal fpga_outputs : std_logic_vector(40 downto 0) := ((0 downto 19) => '1', others => '0'); А ничего, что у вас нет диапазона 0 downto 19 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 13 сентября, 2023 Опубликовано 13 сентября, 2023 · Жалоба On 9/12/2023 at 11:48 AM, Flip-fl0p said: А ничего, что у вас нет диапазона 0 downto 19 ? это была очепятка. исправил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться