2016-01-28 8 views
0

Привет, я пытаюсь использовать ARRAYS для памяти. Я хотел бы объединить 4 меньших ARRAYS в большую ARRAY. Я попытался с помощью амперсанд, чтобы сделать это как так:VHDL конкатенация двух типов ARRAYS std_logic

MEM_STRING(1) <= MEM_CHAR(3) & MEM_CHAR(3) & MEM_CHAR(0) & MEM_CHAR(1); 

Но компилятор говорит, что он не находит определений & характера. MEM_STRING (1) - 28 бит, каждый MEM_CHAR - 7 бит. Я мог конвертировать каждый MEM_CHAR в std_logic_vector, назначать сигнал и затем конкатенировать, но это похоже на очень долгий путь. Есть ли другой способ сделать это?

TYPE SEG7 IS ARRAY (6 DOWNTO 0) OF std_logic; 
TYPE REG_CHAR IS ARRAY (3 DOWNTO 0) OF SEG7; --Array block for characters 
TYPE STRINGS IS ARRAY (27 DOWNTO 0) OF std_logic; 
TYPE REG_STRINGS IS ARRAY (6 DOWNTO 0) OF STRINGS; --Array block for strings 
SIGNAL MEM_CHAR   : REG_CHAR; --Assign character 
SIGNAL MEM_STRING  : REG_STRINGS; --Assign String 

Это используемые дешифраторы ARRAY. Лучший Regard D

+0

Вы можете показать объявления, в том числе любых типов вы объявленным? – user1155120

ответ

1

Я мог бы преобразовать каждый MEM_CHAR в STD_LOGIC_VECTOR, присвоить сигнал, а затем конкатенацию, но это кажется очень долгий путь, чтобы идти о вещах. Есть ли другой способ сделать это?

MEM_CHAR и std_logic_vector не связаны друг с другом. Тип элемента MEM_CHAR - SEG7, а тип элемента std_logic_vector - std_ulogic.

Вы должны создать агрегат типа REG_CHAR и преобразовать его в тип строки:

library ieee; 
use ieee.std_logic_1164.all; 

entity memchar is 
end entity; 

architecture foo of memchar is 

    TYPE SEG7 IS ARRAY (6 DOWNTO 0) OF std_logic; 
    TYPE REG_CHAR IS ARRAY (3 DOWNTO 0) OF SEG7; --Array block for characters 
    TYPE STRINGS IS ARRAY (27 DOWNTO 0) OF std_logic; 
    TYPE REG_STRINGS IS ARRAY (6 DOWNTO 0) OF STRINGS; --Array block for strings 
    SIGNAL MEM_CHAR:   REG_CHAR; --Assign character 
    SIGNAL MEM_STRING:   REG_STRINGS; --Assign String 

    function to_strings (REGC: REG_CHAR) return STRINGS is 
     variable retstr: STRINGS; 
     subtype strings_range is natural range STRINGS'RANGE; 
     variable retptr: strings_range; -- default value is STRINGS'LEFT 
    begin 
     for i in REG_CHAR'RANGE loop -- 3 downto 0 
      for k in SEG7'RANGE loop -- 6 downto 0 
       retstr(retptr) := REGC(i)(k); 
       if retptr /= 0 then  -- quit decrementing at 0 
        retptr := retptr - 1; 
       end if; 
      end loop; 
     end loop; 
     return retstr; 
    end function; 

begin 
    -- MEM_STRING(1) <= MEM_CHAR(3) & MEM_CHAR(3) & MEM_CHAR(0) & MEM_CHAR(1); 
    MEM_STRING(1) <= to_strings(REG_CHAR'(MEM_CHAR(3), 
              MEM_CHAR(3), 
              MEM_CHAR(0), 
              MEM_CHAR(1) 
              ) 
           ); 

end architecture; 

Этот пример анализирует, разрабатывает и моделирует, который говорит нам в общей сложности длин элементов из заполнителя соответствует STRINGS длина.

Обратите внимание, что порядок слева направо сохраняется в функции to_strings.

И для чего было больно пробираться сквозь все эти обходные определения, тем более без вопроса, дающего Minimal, Complete, and Verifiable example.

+0

Большое спасибо за ваше время и помощь, это очень ценится. Я горел полуночным маслом, таким образом, плохой пост, большое спасибо. – hoboBob

0

Если вместо:

TYPE SEG7 IS ARRAY (6 DOWNTO 0) OF std_logic; 
TYPE STRINGS IS ARRAY (27 DOWNTO 0) OF std_logic; 

Вы сделали:

subtype SEG7 IS std_logic_vector(6 DOWNTO 0) ; 
subtype STRINGS IS std_logic_vector(27 DOWNTO 0) ; 

Тогда вы можете сделать:

MEM_STRING(1) <= MEM_CHAR(3) & MEM_CHAR(3) & MEM_CHAR(0) & MEM_CHAR(1); 

Или:

MEM_STRING(1) <= MEM_CHAR(3) & MEM_CHAR(2) & MEM_CHAR(1) & MEM_CHAR(0); 

Вы могли бы также пропущено создание подтипов SEG7 и струнами и сделали:

--Array block for characters  
TYPE REG_CHAR IS ARRAY (3 DOWNTO 0) OF std_logic_vector(6 DOWNTO 0) ; 
--Array block for strings 
TYPE REG_STRINGS IS ARRAY (6 DOWNTO 0) OF std_logic_vector(27 DOWNTO 0) ; 
SIGNAL MEM_CHAR   : REG_CHAR; --Assign character 
SIGNAL MEM_STRING  : REG_STRINGS; --Assign String 
Смежные вопросы