Tornando o UVM mais rápido através de um novo sistema de configuração - Semiwiki

Tornando o UVM mais rápido através de um novo sistema de configuração – Semiwiki

Nó Fonte: 3036575

A Metodologia de Verificação Universal (UVM) é uma forma popular de ajudar a verificar projetos do SystemVerilog e inclui um sistema de configuração que infelizmente tem alguns problemas de velocidade e uso. Rich Edelman, da Siemens EDA, escreveu um artigo detalhado de 20 páginas sobre como evitar esses problemas, e eu o revisei para resumir os destaques para você. Os engenheiros de verificação usam um banco de dados de configuração UVM para definir valores e, em seguida, obtê-los posteriormente em seu teste UVM. Um exemplo de configuração e obtenção de um valor 'T' é:

uvm_config#(T)::set(escopo, nome_caminho_da_instância, nome_campo, valor); uvm_config#(T)::get(escopo, nome_caminho_da_instância, nome_campo, valor);

Conectar o testbench UVM ao dispositivo em teste usa o banco de dados de configuração para passar pelas interfaces virtuais. Existem três problemas ao usar a configuração UVM:

  • Código grande, cerca de 2,600 linhas de código
  • Requer correspondência exata de tipo, então 'int' e 'bit' não são iguais
  • Código lento

Considere o caso do código lento, porque com milhares de chamadas para set() usar nomes com caracteres curinga pode levar até 30 minutos para concluir a fase 'set' e 'get'.

Tempo decorrido mínimo

Rich propõe uma nova solução para configurações UVM que possui velocidades muito mais rápidas, levando apenas alguns segundos em comparação.

nova solução mín.

Se o seu código UVM evitar o uso de curingas e tiver poucos comandos 'set', seu código será executado mais rapidamente.

As possíveis soluções para os problemas de configuração do UVM são:

  • Use uma variável global em vez disso
  • Use a configuração UVM com um set()
  • Use a configuração UVM com alguns set()
  • Use uma árvore de configuração
  • Tente algo diferente

Essa última abordagem de tentar algo diferente é a nova solução, e ela continua a usar as APIs set() e get(), depois simplifica removendo a parametrização das configurações, remove a precedência e remove a alteração do algoritmo de pesquisa. Os resultados desta nova abordagem são velocidades rápidas.

Seu novo item de configuração é definido na classe derivada de 'config_item', e o exemplo abaixo mostra 'int value” como a propriedade que está sendo definida. Para fins de depuração, você adiciona a função pretty-print.

classe my_special_config_item estende config_item; função nova(string nome = "my_special_config_item"); super.novo(nome); valor interno da função final; string de função virtual convert2string(); return $sformatf("%s - valor=%0d <%s>", get_name(), valor, super.convert2string()); função final classe final

O 'config_item' possui um atributo name, e esse nome é pesquisado, mais o nome da instância. O objeto de configuração também possui uma função get_name() para retornar o nome. Para encontrar qualquer “instance_name.field_name”, o banco de dados de configuração usa uma matriz associativa para pesquisas rápidas e velocidades de criação.
Para rastreabilidade, você pode descobrir quem configurou ou quem chamou get, porque o nome do arquivo e o número da linha são campos nas chamadas de função set() e get().

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

A fila do acessador pode ser impressa durante a depuração para ver quem chamou set() e get().

Para oferecer suporte a curingas, é necessário adicionar um mecanismo de pesquisa usando contêineres. Considere o nome da instância 'top.abcd*_0'.

árvore de contêiner min
Árvore de contêiner

A parte curinga do nome da instância é tratada usando a árvore do contêiner, em vez da matriz associativa.

Resumo

O compartilhamento de dados entre o módulo/instância e o mundo baseado em classe em um testbench UVM pode ser feito usando o banco de dados de configuração UVM, apenas esteja ciente da lentidão da velocidade. Se sua metodologia usa muitas configurações, considere usar a nova abordagem introduzida, que possui um pacote usando cerca de 300 linhas de código em vez das 2,600 linhas de código no arquivo de banco de dados de configuração UVM.

Leia o artigo completo de 20 páginas, Evitando a loucura da configuração da maneira mais fácil na Siemens EDA.

Blogs relacionados

Compartilhe esta postagem via:

Carimbo de hora:

Mais de Semiwiki