Перейти к содержанию
    

Инициализация вектора

Обнулить просто

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');

генерирует ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а стандарт читать сейчас вообще не принято? ну ладно, читать это сложно, но банально погуглить по ключевым словам "VHDL vector initialization" вообще никак?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/11/2023 at 11:48 AM, des00 said:

а стандарт читать сейчас вообще не принято? ну ладно, читать это сложно, но банально погуглить по ключевым словам "VHDL vector initialization" вообще никак?

VHDL vector initialization - это первое что я забил в гугле. но он даёт только простые случаи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

где разобраны случаи еще более сложных назначений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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');

ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/11/2023 at 12:56 PM, Strob said:

19 downto 0, и можно без скобок

все равно ошибка. 

Quote

positional association must be listed before named association

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так ребята, я понял. лучше уж я сделаю так

signal fpga_outputs : std_logic_vector(40 downto 0) := "111111111111111111100000000000000000000";

и забуду про это как страшный сон.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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');

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, jenya7 said:

а вот так компилируется

В шестом посте это же предлагалось, нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/11/2023 at 3:29 PM, andrew_b said:

В шестом посте это же предлагалось, нет?

он почему то на скобки ругался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 часа назад, jenya7 сказал:
signal fpga_outputs : std_logic_vector(40 downto 0) := ((0 downto 19) => '1', others => '0');

А ничего, что у вас нет диапазона 0 downto 19 ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 9/12/2023 at 11:48 AM, Flip-fl0p said:

А ничего, что у вас нет диапазона 0 downto 19 ? 

это была очепятка. исправил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...