Como destacar sinais internos de um módulo inferior para um módulo superior em VHDL?


11

Como posso trazer os sinais internos do meu código fonte VHDL para o meu testbench para que eu possa visualizá-los como formas de onda? Eu uso o HDL ativo. Gostaria de saber se existe algum método independente de ferramenta para alcançar meu objetivo. Qualquer ajuda é apreciada.

Eu recebo esse erro agora.insira a descrição da imagem aqui

Meu código fonte é

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

Meu código do testbench é

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;

Quando você inicia sua simulação, seu simulador elaborará todos os elementos. Depois, ele procura os links que você criou usando nomes externos. Parece-me que seu caminho está errado. Editei minha resposta para dar mais detalhes sobre a construção de caminhos. Sem o conhecimento do seu design, não posso dizer o que há de errado com o seu caminho.
Thomas S.

Como eu disse na minha resposta, você deve usar o rótulo e não o nome da entidade. O caminho correto deve ser .tp_spi_dac.uut.ch1_byte_data_sent.
Thomas S.

Suas sugestões resolveram meu problema @ThomasS. Muito obrigado! Eu tive um problema com a versão do VHDL, que resolvi depois de assistir ao vídeo, conforme sugerido por David. Sei que escrever notas de agradecimento não é recomendado, mas obrigado Thomas por corrigir minha edição (fiquei realmente confuso com essa formatação de remarcação).
Suhasini

Respostas:


11

O que você está procurando é chamado de nomes externos (ou nomes hierárquicos) em VHDL. Eles podem ser usados ​​para burlar a visibilidade do escopo / hierarquia. A sintaxe é como o exemplo abaixo.

<<signal path_name : std_logic_vector(7 downto 0)>>

Você também pode acessar constantes e variáveis ​​com nomes externos. Você precisa alterar o tipo no tipo externo. Você pode usar nomes externos diretamente para acesso de leitura / gravação. No entanto, você deve usar aliases para melhorar a legibilidade.

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

O nome externo deve conter o caminho para o elemento que você deseja acessar. O caminho pode ser absoluto ou relativo. Os elementos individuais no seu caminho são separados por pontos. Observe que você deve fornecer os rótulos da instância / processo / entidade / ... e não o nome. O caminho absoluto começa com um .seguido pelo nome do seu nível superior. Para caminhos relativos, você pode usar ^para subir na hierarquia. Ao usar constantes / sinais de algum pacote, você também pode usar @para mover para uma biblioteca.

Um exemplo para um caminho absoluto é

.tb_name.instance_label.sub_instance_label.signal_name

Para acessar o mesmo elemento do testbench com nomes relativos, você pode usar

instance_label.sub_instance_label.signal_name

Quando você deseja acessar algum sinal / constante testbench na subinstância, você pode usar

^.^.constant_name

Para acessar alguma outra constante em um pacote de configuração localizado na biblioteca de configuração, você pode usar

@config.pkg_name.other_constant_name

Você pode usar o navegador de design / biblioteca do simulador como David apontou para encontrar o nome do caminho correto.

Esse recurso foi adicionado no VHDL-2008, portanto, ele deve ser suportado por todas as ferramentas que já possuem suporte ao VHDL-2008 (incluindo o ActiveHDL, eu acho). A maioria dos simuladores não usa o VHDL-2008 por padrão, mas fornece um argumento de linha de comando ou opção de configuração para habilitá-lo.


Eu tentei o que você sugeriu. o alias ch1_byte_data_sent é << sinal .TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent: STD_LOGIC_VECTOR (23 até 0) >>: = x "000000"; Eu recebo um erro "Identificador ou seqüência literal esperada" quando faço isso. Alguma idéia de por que eu recebo o erro? (Desculpe por quaisquer erros com o post, a minha primeira vez aqui!)
Suhasini

Minha resposta pode não estar clara o suficiente. Ao usar, aliasvocê deve escrever a tarefa em uma nova declaração. A vantagem é que você pode usar o nome alternativo em vez do nome externo longo.
Thomas S.

1

Como posso trazer os sinais internos do meu código fonte VHDL para o meu testbench para que eu possa visualizá-los como formas de onda?

Uma bancada de testes implica simulação - uma entidade sem portas geralmente não é elegível para síntese.

Embora eu nunca tenha usado o Active-HDL, eu entendo que ele possui um navegador de design que deve permitir que você escolha sinais na hierarquia para exibir na forma de onda. Consulte o vídeo de compilação e simulação da Aldec (5:02, min: seg).

E agora tenho a impressão de que o vídeo pode causar confusão, talvez neste caso em particular.

Às 2:22 do final, o vídeo mostra um arquivo do (macro) que controla a simulação:

2:22 do arquivo

Onde vemos todos os sinais no nível superior do design foram adicionados à exibição da forma de onda com o comando wave. Também deve ser possível especificar um sinal em qualquer lugar da hierarquia de design.

A idéia básica é que muitos simuladores permitem agendar sinais (e alguns permitem variáveis) a serem coletados para a exibição da forma de onda.

Este pequeno vídeo simplesmente não mostra sinais de níveis de hierarquia subsidiária. (Há muito em uma breve apresentação em vídeo).

Gostaria de saber se existe algum método independente de ferramenta para alcançar meu objetivo.

Como observado acima, seu objetivo parece ser visualizar os sinais internos como formas de onda.

Agora, as más notícias - não há padronização para recursos ou interfaces do simulador, sinais de agendamento para despejo de forma de onda, etc. Todos estes são definidos de implementação.

É praticamente garantido que você pode despejar sinais em qualquer lugar da hierarquia de design para um visualizador de forma de onda ou arquivo de despejo de forma de onda com qualquer implementação que simule, o método para isso é definido.

A boa notícia é que eles tendem a copiar conceitos um do outro, como arquivos do tipo, que você pode gerar programaticamente para portabilidade, usando um banco de dados comum que descreve a verificação funcional em várias plataformas de implementação, superando diferenças de sintaxe e semântica. Provavelmente também haveria diferenças na sintaxe da interface da linha de comandos para chamar as ferramentas programaticamente.

A idéia de portabilidade não abraçando várias GUI's graciosamente.


0

Ferramentas como o xilinx tem opção para visualizar sinais internos.

O método simples e independente da ferramenta é declarar linhas de saída separadas e conectar os sinais internos a essas linhas.


Não desejo me intrometer nas minhas portas de entrada e saída; portanto, não é possível declarar nenhuma nova linha de saída. Eu declarei os sinais no meu banco de testes, mas não consigo ver nenhuma saída na forma de onda (mostra apenas meu valor inicial de zero sem implementar a funcionalidade). Existe alguma outra maneira de fazer isso?
Suhasini 19/08/14

0

Se você declarou os sinais no testbench, mas não consegue ver nenhuma saída, pode haver um problema na instrução de instanciação em que instancia a entidade a ser testada. Verifique se você a instanciara corretamente, usando uma instrução de instanciação de entidade ou instanciação de componente. Certifique-se de que os sinais no seu testbench estejam conectados à entidade em teste. Se isso não resolver o problema, poste o código testbench para que possamos ajudar.


O que Thomas disse, trata exatamente do meu problema. Resolvi o erro mencionado anteriormente, que surgiu devido ao padrão definido como VHDL 1993 no Active-HDL fornecido com o software de design iCEcube2 da Lattice. Agora, enfrento um erro fatal de elaboração quando tento inicializar a simulação. Estou tentando descobrir por que isso ocorre, espero que não seja um problema de licença limitada.
Suhasini 19/08/2014

Você pode nos mostrar essa mensagem?
Rick
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.