Pergunta

Usando o VHDL, quero ter alguns registros que armazenam 16 bits em cada um. Então, descobri que o VHDL tem uma matriz embutida e quero usá -la para armazenar 16 bits em cada elemento em IY, então quero saber se o mapa VHDL essa matriz para registros reais ou não?

Foi útil?

Solução

A resposta curta é não - o tipo de matriz não mapeia para um registro.

A resposta longa:

O tipo de matriz no VHDL é apenas uma coleção indexada de elementos do mesmo tipo. No seu caso, você provavelmente usaria uma matriz como saída de um banco de registro.

Então, diga que você tem um banco de 8 registros, cada um com 16 bits. A saída deste banco seria uma matriz (do tamanho 8) de vetores de 16 bits. A declaração de componente para este banco de registro seria algo assim:

 component reg8x16
  port(
   clock: in std_logic;
   reset: in std_logic;
   enable: in std_logic;
   rout : out r_array(0 to 7)
   );
 end component; 

rout A sua variedade de saídas registradas do Banco Register. Assim, você pode desreferenciar a saída do registro 0 do banco usando rout(0), que é do tipo std_logic_vector(15 downto 0).

Além disso, não se esqueça de declarar o tipo de matriz em algum lugar (geralmente em um arquivo de pacote). Seria algo como:

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

o (integer range <>) A declaração é um tipo de espaço reservado para o intervalo de índice de matriz - será preenchido posteriormente quando o tipo de matriz for usado (como em nossa declaração de componente acima).

Não tenho certeza se isso responde à sua pergunta ou não. Não vou entrar nos detalhes de como criar o componente Reg8x16. Basicamente, você apenas cria um registro de 16 bits cuja saída é do tipo std_logic_vector(15 downto 0); (Você pode procurar como fazer isso online ... é um VHDL bastante básico). Então você apenas instancia 8 desses registros e os coloca no componente nomeado reg8x16.

Outras dicas

Uma matriz é como qualquer outra variável ou sinal: se você descrever um comportamento, o que significa que deve se lembrar de seu estado de um relógio para outro, os flipflops (ou blocos de memória, se as condições estiverem certos) serão inferidos pelo sintetizador.

Qualquer matriz com um intervalo válido mapearia para fios na lista netlist gerada. Este é bastante óbvio- o hardware contém apenas portões e fios. Algo como um (3 para baixo 0) (1 a 0) seria um fio de tamanho de 4x2 ou 8 bits. Agora você mapeia acessos individuais como um (3) (1) para os índices nesta matriz de uma dimensão. Portanto, a (3) (1) é basicamente A (7).

Verifica isto página, verifique também o registro vhdl

Basicamente, é uma variedade de std_logic_vector com os comprimentos necessários

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top