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.
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;
.tp_spi_dac.uut.ch1_byte_data_sent
.Respostas:
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.
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.
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 é
Para acessar o mesmo elemento do testbench com nomes relativos, você pode usar
Quando você deseja acessar algum sinal / constante testbench na subinstância, você pode usar
Para acessar alguma outra constante em um pacote de configuração localizado na biblioteca de configuração, você pode usar
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.
fonte
alias
você deve escrever a tarefa em uma nova declaração. A vantagem é que você pode usar o nome alternativo em vez do nome externo longo.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:
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).
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.
fonte
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.
fonte
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.
fonte