Jump to content

    

Покрытие кода для FPGA

Добра всем!
Поискал в форуме в разных ветках, но сразу не нашёл ответа на такой вопрос: поставлена задача для наших проектов доказать соответствие оных директивам DO-254 и иже с ними. Проекты написаны как на VHDL и Verilog (SV), так и в схематике. Причём ПЛИС Actel и Altera.
Вопрос: откуда нам, первый раз столкнувшимся со словами Code Coverage, начать сей нелёгкий и тернистый путь?
Всё комментарии, а тем паче, ссылки, книги и прочее, приветствуются. Оптимально Mentor (ModelSim и QuestaSim), но и Aldec пойдёт, если он умеет это лучше.

Edited by MaratZuev

Share this post


Link to post
Share on other sites
15 minutes ago, MaratZuev said:

Вопрос: откуда нам, первый раз столкнувшимся со словами Code Coverage, начать сей нелёгкий и тернистый путь?

с руководства по симулятору

Share this post


Link to post
Share on other sites

Был у Ментора такой ресурс Verification Academy, если первый раз столкнулись, рекомендую, чтоб понять что это такое, какие виды покрытия бывают, как понять, чтовсе ok, и т.п.. Особенно если потом потребуется функциональное покрытие и пр. А по поводу симулятора - читайте описание, моделсим умеет такое, ну а схематик, скорее всего, придется переводить на код.

Share this post


Link to post
Share on other sites
1 hour ago, des00 said:

с руководства по симулятору

Нашёл в QuestaSim 10.4e tutorial, но рисунок (Figure 13-1. Code Coverage Windows) на стр. 163
65285338_Figure13-1.CodeCoverageWindows.thumb.png.c6c6f52ccae46a6a5053c9a5574673ee.png
в нём почему-то не соответствует тому, что я вижу на экране:

1809872749_QuestaSim10.4eCodeCoveragewindows.thumb.png.676a6f2b36d016bc421a2a7954874881.png

ЧЯДНТ? О_о

1 hour ago, Viktuar said:

Был у Ментора такой ресурс Verification Academy

Да, знаю, спасибо за напоминание, оставлю ещё (для себя) такую ссылку здесь: http://www.testbench.in/TB_24_ABOUT_CODE_COVERAGE.html

Share this post


Link to post
Share on other sites
2 hours ago, Viktuar said:

ну а схематик, скорее всего, придется переводить на код.

да, мне вот тоже не очень понимается что такое "кодовое" покрытие "схемы" ...

...тем паче в соответствии с DO-254 и иже с ним

 

55 minutes ago, MaratZuev said:

ЧЯДНТ? О_о

начните с методологии: что делать и для чего.. не кидайтесь сразу на амбразуру инструмент

методология вполне вероятно ответит и на вопрос надо ли покрывать сам код тестбенчей (нет).

Share this post


Link to post
Share on other sites
3 hours ago, Doka said:

не кидайтесь сразу на амбразуру инструмент

Там ещё есть такие инструменты как ALINT и иже с ними: я в раздумьях, нужны ли они мне?

Share this post


Link to post
Share on other sites
10 hours ago, MaratZuev said:

Нашёл в QuestaSim 10.4e tutorial, но рисунок (Figure 13-1. Code Coverage Windows) на стр. 163

кхх...\docs\pdfdocs\questa_sim_user.pdf

Questa® SIM User’s Manual Including Support for Questa SV/AFV -> Chapter 19 Code Coverage

Share this post


Link to post
Share on other sites

Покрытия есть в systemverilog как стандартная фича. Прям раздел в стандарте Coverage. Если используется vhdl, то здесь стоит смотреть на osvvm

Edited by KeisN13

Share this post


Link to post
Share on other sites

Думаю я не прав. Покрытие в св и осввм показывает насколько процентов были использованы возможные состояния сигналов, шин, автоматов, переходов в автомате и тд. Не думаю, что это имеет отношение к покрытию кода. 

Share this post


Link to post
Share on other sites
43 minutes ago, KeisN13 said:

Думаю я не прав. Покрытие в св и осввм показывает насколько процентов были использованы возможные состояния сигналов, шин, автоматов, переходов в автомате и тд. Не думаю, что это имеет отношение к покрытию кода. 

А зачем смотреть OSVVM? Я глядел-глядел, толку ноль. Если есть проектировщик на SV, можно сделать покрытие 100% даже кода на VHDL, там полно фич и инструкций, которые залезут в недри. И не придётся разбираться в непонятном инструменте, которой к тому же не везде поддерживается (в связи с описанием конструкций на VHDL-2008

Share this post


Link to post
Share on other sites
42 minutes ago, Nick_K said:

в связи с описанием конструкций на VHDL-2008

Я пишу на SV, зачем мне что-то знать про VHDL?

5 hours ago, des00 said:

кхх...\docs\pdfdocs\questa_sim_user.pdf

Questa® SIM User’s Manual Including Support for Questa SV/AFV -> Chapter 19 Code Coverage

Спасибо. Установил версию 10.7с: буду смотреть.

Share this post


Link to post
Share on other sites

В матлабе есть какие-то пакеты для проверки на соответствие авиастандартам DO. Там проверяется с формированием сертификата соответствия, вроде , hdl код. Посмотрите в этом направлении. 

https://matlab.ru/promo/standards

Share this post


Link to post
Share on other sites
On 8/6/2019 at 9:50 PM, Skryppy said:

В матлабе есть какие-то пакеты для проверки на соответствие авиастандартам DO.

Посмотрел (наверное поверхностно) и не увидел ничего для себя интересного. Есть инструменты Mentor-а и Aldec-а - вот их и хочу использовать.
Есть такой вопрос: взял примитивный проект, который прилагаю к этому комментарию, по результатам обработки которого ModelSim (QuestaSim) в своём GUI показывает 100% покрытие statemеnts, и тоже самое я вижу в текстовом отчёте (test_tb_opt.txt).

Но в html отчёте покрытия вообще никакого нет!

Вкратце (кто не полезет в проект) так:
design under test - test.sv
 

module test (
    input logic clk, 
    input logic data,
    input logic ena,
    output logic q
);

    always_ff @(posedge clk)
        q <= ena ? data : q;
        
endmodule : test

Test bench - test_tb.sv

module test_tb;

    logic clk; 
    logic data;
    logic ena;
    logic q;

    initial begin
        clk = 0;
        forever #10 clk = ~clk;
    end
    
    initial begin
        data = 0;
        ena = 0;
    end
    
    test test(.*);
        
endmodule : test_tb

tcl скрипт для обработки проекта в ModelSime (QuestaSime) - coverage_test.tcl

proc coverage_proc {main_coverage_file_name coverage_letters_string current_module} {

    # http://read.pudn.com/downloads190/doc/comm/895124/ofdm_cp_insertion_v71/ofdm_cp_insertion/scripts/ofdm_kernel_msim.tcl__.htm

    if {!([vsimAuth] == "ALTERA")} {
        # https://electronix.ru/forum/index.php?app=forums&module=forums&controller=topic&id=122907
        # main window at full screen
        wm state . zoomed
    }

    # clear transript window of ModelSim re QuestaSim
    .main clear

    onbreak {resume}

    # create library
    if [file exists work] {
        vdel -all
    }

    vlib work
    set FilesCompiled 0
     
    # compile all source files
    # https://stackoverflow.com/questions/51409347/how-to-copy-or-move-multiple-files-with-same-extension
    set verilog_files [glob -nocomplain *.v]
    if {[llength $verilog_files]} {
        vlog -O0 +fcover +acc *.v
        set FilesCompiled 1
        puts "Verilog file(s) are compiled!"
    }
    
    set system_verilog_files [glob -nocomplain *.sv]
    if {[llength $system_verilog_files]} {
        vlog -O0 +fcover +acc *.sv
        set FilesCompiled 1
        puts "SystemVerilog file(s) are compiled!"
    }

    if {$FilesCompiled == 1} {

        set main_coverage_file_name_opt $main_coverage_file_name
        append main_coverage_file_name_opt "_opt"
        # puts $main_coverage_file_name
        # puts $main_coverage_file_name_opt

        # optimize design
        vopt +cover=$coverage_letters_string $main_coverage_file_name -o $main_coverage_file_name_opt
        # ModelSim® SE Command Reference Manual, v10.5 page 855
        # Commands 
        # vopt
        # 
        # +cover=<spec>
        # <spec> — one or more of the following characters:
        # b — Collect branch statistics.
        # c — Collect condition statistics. Collects only FEC statistics, 
        #     unless -coverudp is specified.
        # e — Collect expression statistics, Collects only FEC statistics, 
        #     unless -coverudp is specified.
        # s — Collect statement statistics.
        # t — Collect toggle statistics. Overridden if ‘x’ is specified elsewhere
        # x — Collect extended toggle statistics (Refer to “Toggle Coverage” for details). 
        #     This takes precedence, if ‘t’ is specified elsewhere.
        # f — Collect Finite State Machine statistics

        # https://stackoverflow.com/questions/49789252/how-to-generate-a-detail-report-of-functional-coverage-in-questasim
        # load simulator with optimized design

        vsim -cvgperinstance -c -coverage work.$main_coverage_file_name_opt
        coverage save $main_coverage_file_name_opt.ucdb 
        
        run 1ms

        # vsim -cvgperinstance -viewcov $main_coverage_file_name_opt.ucdb
        coverage report -file $main_coverage_file_name_opt.txt -detail -code $coverage_letters_string -noannotate -cvg
        # vcover report -html $main_coverage_file_name_opt.ucdb -details -code $coverage_letters_string -cvg
        vsim -cvgperinstance -c -coverage work.$main_coverage_file_name_opt -do "run 1ms; vcover report -html $main_coverage_file_name_opt.ucdb -details -code $coverage_letters_string -cvg"

    } else {
        puts "No file(s) to compile found!"
    }

}
coverage_proc test_tb s test

командный файл для запуска всего этого хозяйства на исполнение - coverage_test.bat

c:\Mentor_Graphics\QuestaSimx64_10.7c\win64\questasim.exe -do coverage_test.tcl

Файл отчёта - test_tb_opt.txt

Coverage Report by file with details

=================================================================================
=== File: test.sv
=================================================================================
Statement Coverage:
    Enabled Coverage            Active      Hits    Misses % Covered
    ----------------            ------      ----    ------ ---------
    Stmts                            2         2         0    100.00

================================Statement Details================================

Statement Coverage for file test.sv --

    8               1                          1     
    9               1                          1     

=================================================================================
=== File: test_tb.sv
=================================================================================
Statement Coverage:
    Enabled Coverage            Active      Hits    Misses % Covered
    ----------------            ------      ----    ------ ---------
    Stmts                            6         6         0    100.00

================================Statement Details================================

Statement Coverage for file test_tb.sv --

    9               1                          1     
    10              1                          1     
    10              2                     100001     
    10              3                     100000     
    14              1                          1     
    15              1                          1     


Total Coverage By File (code coverage only, filtered view): 100.00%

Окно Questa:

Questa.png.381f91f8031163f2c7a7e6a597dcb66b.png

И, наконец, html отчёт Quest-ы - пустой?! Почему? ЧЯДНТ?!

123035058_Questa1.png.7be7c56a6611daf534fdfc9bab9958d2.png

test_coverage.rar

Share this post


Link to post
Share on other sites

Вопрос снят:
в файле coverage_test.tcl в строке
vsim -cvgperinstance -c -coverage work.$main_coverage_file_name_opt -do "run 1ms; vcover report -html $main_coverage_file_name_opt.ucdb -details -code $coverage_letters_string -cvg"
вместо vcover д.б.б. coverage

1047141232_Questa2.png.2a931f40ee91c6d0bf62f7f0df011c11.png

Share this post


Link to post
Share on other sites
В 05.08.2019 в 16:04, MaratZuev сказал:

... поставлена задача для наших проектов доказать соответствие оных директивам DO-254 и иже с ними. ...

Доброго времени суток!

Не с той стороны подходите к проблеме!  Сперва вам необходимо прочитать собственно сам стандарт DO-254. Потом связаться с официальными поставщиками САПР. Тех, что используете в своём маршруте проектирования. У поставщиков запросите поддержку для DO-254 и много чего интересного узнаете! И тогда станет понятно, какой маршрут вы ДОЛЖНЫ выбрать, какие способы анализа покрытия и автоматического документирования вы должны использовать, и прочее прочее прочее. И стоит эта красота на порядок дороже, чем без этой красоты. :)

Как-то так.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now