Jump to content

    

Отображение сигнала в нужном мне виде в окне Wave Active-HDL - а возможно ли?

Всем добра.
Продолжаю сражаться с Active-HDL-ем поминая добрыми словами ModelSim: Хочу отобразить меандр (тактовую частоту), имеющую в модуле имя, скажем, clk, но так, чтобы название сигнала шло с gояснением, например clk - 64MHz
В ModelSime было просто:
add wave -label "clk - 64MHz" dut_tb/clk
А в Active-HDL-е самое близкое, что нашёл для "раскрашивания" имени - это 
add wave -virtual "clk - 64 MHz" /dut_tb/clk
При применении которого waveform становится неудобоваримого вида:

image.thumb.png.b9ab011b4b23d1947c9e81762b3b53ca.png

а я же хочу, чтобы он оставался меандром.
Как всегда, просьба ткнуть носом в нужном направлении (сегодня копался полдня: не нашёл ни в интернете, ни в хелпе)

Проект в скрепке.


 

Active-HDL wave signal.zip

Share this post


Link to post
Share on other sites

Не по теме, но все же. Вам давно пора освить автоматизированные тесты, отладку по синдромам и логам, ассерты, а не вейвформы, в AD-HOC тестбенчах разукрашивать.

Share this post


Link to post
Share on other sites

Тоже не по теме: нужно провести квалификацию инструмента (ModelSima). Как вы предлагаете делать это?

Share this post


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

Тоже не по теме: нужно провести квалификацию инструмента (ModelSima). Как вы предлагаете делать это?

ну уж точно не сравнивая цветовую дифференциацию штанов.

Сравните по функциональным возможностям: поддержка языков (реальная, а не декларируемая), поддержка advanced verification, ООП, assertion. covarage, скорости моделирования вхдл/верилог

Причем учтите что моделсим и альдек это базовые вещи, SV там обрезан в части верификации, что бы получить полную поддержку вам нужна квеста и ривера.

ЗЫ. Про скорость моделирования, лет 10 назад где то тут была моя тема, альдек, по скорости моделирования обошел моделсим, существенно причем. Представитель ментора, ЕМНИП по фамилии Лохов, пытался парировать что экспиремент не корректен, но не вышло))) Но в итоге победила бОльшая, на тот момент, стабильность и поддержка стандарта SV в менторе(это было почти начало его массового внедрения)

Share this post


Link to post
Share on other sites

Не совсем то: квалификация может основываться на независимой оценке выходных данных инструмента (это самый простой способ квалификации).
Из стандарта: "Независимая оценка проверяет правильность выходных данных инструмента, используя независимые средства. Если выходные данные инструмента оценены независимо, то оценки инструмента не требуется." И там же часть примечания: "Независимая оценка выходных данных инструмента верификации может включать рассмотрение вручную выходных данных инструмента или может включать сравнение выходных данных другого средства, способного выполнять то же самое мероприятие верификации, что и оцениваемое средство.  
Заявитель может также предлагать другие методы независимой оценки."
Правильно я понимаю, что мне достаточно сравнить vcd обработки этими инструментами моего проекта для подтверждения их идентичности и для квалификации одного из них в конечном итоге?
Если так, то дело в том, что ранее я уже поднимал вопрос о нетождественности этих vcd даже для простейшего проекта.
Как быть: снова посмотреть в сторону квесты и риверы?

5 hours ago, des00 said:

отладку по синдромам и логам

Ткните, пожалуйста, носом в такие виды отладки применимо к нашей области: гугление ничего похожего не дало..

Share this post


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

Не совсем то:......

Эмм, раз 10 прочитал, ничего не понял. Что вам конкретно нужно сделать? доказать что ваш симулятор и симулятор заказчика работают одинаково на вашей модели? Ну сделайте автоматический тест, с эталонной моделью и проверяйте.

Quote

Ткните, пожалуйста, носом в такие виды отладки применимо к нашей области: гугление ничего похожего не дало..

К какой конкретной области? Да любые виды отладки применимы, книги J. Bergeron Writing testbenches и Writing testbenches using System Verilog довольно неплохо раскрывают эту тему. Простой AD-HOC, по вейвформам, тот что у вас, это самое самое начало верификации.

Share this post


Link to post
Share on other sites
15 минут назад, MaratZuev сказал:

Ткните, пожалуйста, носом в такие виды отладки применимо к нашей области: гугление ничего похожего не дало..

А Вы попросите уважаемого des00 написать небольшой обзор хотя бы тезисно об этом. В виде статьи. Хотя бы в виде обзора книг, что в какой искать, где смотреть.... А мы напечатаем.

Share this post


Link to post
Share on other sites
8 minutes ago, des00 said:

Эмм, раз 10 прочитал, ничего не понял. Что вам конкретно нужно сделать? доказать что ваш симулятор и симулятор заказчика работают одинаково на вашей модели? Ну сделайте автоматический тест, с эталонной моделью и проверяйте.

Всё просто: надо показать, что результаты моделирования с помощью одного инструмента совпадают с результатами второго.

 

9 minutes ago, des00 said:

Ну сделайте автоматический тест, с эталонной моделью и проверяйте.

В том-то и дело, что на одном и том же простейшем тесте данные не совпадают!
@Модератор: как тут искать по форуму свои посты (я уже задавал этот вопрос ранее, хочу вставить ссылку на тот пост, но не найду его!)?

 

6 minutes ago, iosifk said:

А Вы попросите уважаемого des00 написать небольшой обзор хотя бы тезисно об этом.

Боюсь, что у уважаемого des00 и других забот достаточно: спасибо, что на форуме отвечает.

Share this post


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

Всё просто: надо показать, что результаты моделирования с помощью одного инструмента совпадают с результатами второго. В том-то и дело, что на одном и том же простейшем тесте данные не совпадают!

Как я понял, вы использовали VCD файл, но он у каждого может быть свой. Я же вам предлагаю другое: тестбенч в виде сравнения с эталонной моделью. Делаете себе эталонную модель, записываете лог ее работы, делаете автоматизированный тест, в нем в scoreboard сравнение результатов работы. Можно еще дальше пойти, накрутить покрытие, счетчики событий и т.д. Но, для этого нужен симулятор с хорошей поддержкой языка, не факт что такой будет у заказчика. На худой конец, что мешает вам добавить в ваш код $fdisplay/$fmonitor, с макросами компиляции, которые позволят вам создать файлы логов работы вашей системы, которые не зависят от какого либо симулятора, а реализованны четко по стандарту ?

Quote

@Модератор: как тут искать по форуму свои посты (я уже задавал этот вопрос ранее, хочу вставить ссылку на тот пост, но не найду его!)?

Ваш профиль, Show my activity и там искать когда и что вы писали. Модерато

1 hour ago, iosifk said:

А Вы попросите уважаемого des00 написать небольшой обзор хотя бы тезисно об этом. В виде статьи. Хотя бы в виде обзора книг, что в какой искать, где смотреть.... А мы напечатаем.

Не, у меня на это времени не хватает, с просвещением масс я закончил, не до этого)

ЗЫ. Можно даже без макросов, по иерархическому имени захватить все состояние вашей системы в отдельном файле и записать в ваш файл логов.

Share this post


Link to post
Share on other sites
20 minutes ago, des00 said:

Как я понял, вы использовали VCD файл, но он у каждого может быть свой.

Нет, пока ещё не использовал (в этом проекте), но задумка есть, но ранее столкнулся с несоответствием одного другому и уже спрашивал на форуме, но мне никто не ответил.

24 minutes ago, des00 said:

Делаете себе эталонную модель

Чем эта модель отличается от того, что я напишу с помощью $fdisplay/$fmonitor? Прошу пояснить, ибо раньше с понятием эталонной модели не сталкивался.

25 minutes ago, des00 said:

Ваш профиль, Show my activity и там искать когда и что вы писали. Модератор

Спасибо. Нашёл.

26 minutes ago, des00 said:

ЗЫ. Можно даже без макросов, по иерархическому имени захватить все состояние вашей системы в отдельном файле и записать в ваш файл логов.

Можно простейший пример?

Share this post


Link to post
Share on other sites
On 11/28/2019 at 5:34 PM, MaratZuev said:

Чем эта модель отличается от того, что я напишу с помощью $fdisplay/$fmonitor? Прошу пояснить, ибо раньше с понятием эталонной модели не сталкивался.

J. Bergeron Writing testbenches using System Verilog -> CHAPTER 6 ARCHITECTING TESTBENCHES -> SELF-CHECKING TESTBENCHES -> Reference Models

Quote

Можно простейший пример?

Spoiler

module pipa (input iclk, output logic [3 : 0] odat);

  initial begin
    odat = 4;
  end

  always_ff @(posedge iclk) begin
    odat <= odat + 1'b1;
  end

endmodule

module popa (input iclk, output logic [3 : 0] odat);

  initial begin
    odat = 0;
  end

  always_ff @(posedge iclk) begin
    odat <= odat + 1'b1;
  end

endmodule


module top (input iclk, output odat_pipa, odat_popa);

  logic [3 : 0] dat_pipa;
  logic [3 : 0] dat_popa;

  pipa pipa (iclk, dat_pipa);
  popa popa (iclk, dat_popa);

  assign odat_pipa = (dat_pipa < 5);
  assign odat_popa = (dat_popa > 2);

endmodule


module tb ;

  logic iclk;

  top uut (.iclk(iclk));

  initial begin : clk_gen
    iclk <= 1'b0;
    #5ns forever #5ns iclk = ~iclk;
  end

  int fp;

  initial begin : main
    $display("start test");
    do_init();
    repeat (32) @(posedge iclk);
    do_end();
    $display("end test");
    $stop;
  end


  always @(*) begin
    $fmonitor(fp, "pipa %4d -> %0d, popa %4d -> %0d", uut.pipa.odat, uut.odat_pipa, uut.popa.odat, uut.odat_popa);
  end

  function automatic void  do_init();
    fp = $fopen("tb.log", "w");
    $fdisplay(fp, "it's my super puper log");
  endfunction

  function automatic void  do_end();
    $fdisplay(fp, "it's done");
    $fclose(fp);
  endfunction

endmodule

 

лог работы этого теста

Quote

it's my super puper log
pipa    4 -> 1, popa    0 -> 0
pipa    5 -> 0, popa    1 -> 0
pipa    6 -> 0, popa    2 -> 0
.......
pipa   15 -> 0, popa   11 -> 1
pipa    0 -> 1, popa   12 -> 1
pipa    1 -> 1, popa   13 -> 1
pipa    2 -> 1, popa   14 -> 1
pipa    3 -> 1, popa   15 -> 1
it's done

Будет одинаковым, по формату лога, на любом симуляторе. Поэтому ситуация с VCD файлом, описанная по вашей ссылке, не повторится)

Share this post


Link to post
Share on other sites

Как вариант, можно по каждому событию сохранять данные в  текстовый файл, по окончанию сравнить референс и получаемые значения. Вариантов куча, но лучше уходить от человеческого фактора, все в автоматическое тестирование. 

Share this post


Link to post
Share on other sites
On 11/28/2019 at 6:38 PM, des00 said:

J. Bergeron Writing testbenches using System Verilog -> CHAPTER 6 ARCHITECTING TESTBENCHES -> SELF-CHECKING TESTBENCHES -> Reference Models

Спасибо, но, не уверен, что это то, что мне нужно. Reference model в моём случае будет один и тот же test bench, обработанный двумя разными инструментами. А вот то, что вы предложили - логирование в файл - представляется самым логичным и правильным вариантом и вывода и сравнения работы двух инструментов.

On 11/28/2019 at 6:38 PM, des00 said:

function automatic void do_init();

А вот этот automatic тут зачем?
Оставлю здесь свой "прилизанный" и смоделированный вариант вашего примера (за который большое спасибо)

Spoiler

`timescale 1ns / 100ps

module popa (input iclk, output reg [3:0] odat);

    initial
    odat = 0;

    always @(posedge iclk)
    odat <= odat + 1'b1;

endmodule

module pipa (input iclk, output reg [3:0] odat);

    initial
    odat = 4;

    always @(posedge iclk)
    odat <= odat + 1'b1;

endmodule

module top (input iclk);

    wire [3:0] dat_pipa;
    wire [3:0] dat_popa;

    pipa pipa (iclk, dat_pipa);
    popa popa (iclk, dat_popa);

    assign odat_pipa = (dat_pipa < 5);
    assign odat_popa = (dat_popa > 2);

endmodule

module tb;

    reg iclk;
    integer fp; 
    integer curr_time, ms, us, ns, ps;
    
    top uut (.iclk(iclk));
    
    reg write_2_file;
    initial 
        write_2_file = 0;

    initial begin : clk_gen
        iclk <= 1'b0;
        #5 forever #5 iclk = ~iclk;
    end

    initial begin : main
        #5; do_init(fp);
        repeat (32) @(posedge iclk);
        do_end(fp);
        $stop;
    end

    always @(*)
        if (write_2_file)
            $fmonitor(fp, "At %4g pipa %4d -> %0d, popa %4d -> %0d", $stime, uut.pipa.odat, uut.odat_pipa, uut.popa.odat, uut.odat_popa);
        else    
            $monitor("At %4g pipa %4d -> %0d, popa %4d -> %0d", $stime, uut.pipa.odat, uut.odat_pipa, uut.popa.odat, uut.odat_popa);

    task do_init;
    output integer fp;
    begin
        if (write_2_file) begin
            fp = $fopen("tb.log", "w");
            $fdisplay(fp, "log started");
        end    
        else
            $display("test started");
    end  
    endtask

    task do_end;
    input integer fp;
    begin
        if (write_2_file) begin
            $fdisplay(fp, "log finished");
            $fclose(fp);
        end
            $display("test finished");
    end  
    endtask

endmodule

 

 

On 11/28/2019 at 6:38 PM, des00 said:

Будет одинаковым, по формату лога, на любом симуляторе. Поэтому ситуация с VCD файлом, описанная по вашей ссылке, не повторится)

Пытаюсь доказать руководству, что это - единственный правильный вариант сравнения двух инструментов )

On 11/30/2019 at 9:16 AM, lexx said:

Как вариант, можно по каждому событию сохранять данные в  текстовый файл, по окончанию сравнить референс и получаемые значения. Вариантов куча, но лучше уходить от человеческого фактора, все в автоматическое тестирование

Да, выше мы к этому уже и пришли

Share this post


Link to post
Share on other sites
On 11/30/2019 at 4:49 PM, MaratZuev said:

Спасибо, но, не уверен, что это то, что мне нужно. Reference model в моём случае будет один и тот же test bench, обработанный двумя разными инструментами. А вот то, что вы предложили - логирование в файл - представляется самым логичным и правильным вариантом и вывода и сравнения работы двух инструментов.

Вы упускаете из рассмотрения базовую постановку вопроса о том, зачем вам тестбенч. Если вам нужен тестбенч что бы доказать что переданные вами исходники одинаково работают на любом симуляторе это одно(при этом не важно, ваш базовый тест работает корректно или нет). Если вам нужен тест, чтобы проверять что ваш тест работает правильно и работает правильно на любых симуляторах, тогда это другое. 

Эталонная модель может быть любая: вычислительная, табличная, поведенческая, главное что бы вы могли точно сказать: вот это эталон, а все что не попадает, все не работает) 

Quote

А вот этот automatic тут зачем?

привычка выработанная годами, делать не статические функции и таски 

Share this post


Link to post
Share on other sites
On 11/30/2019 at 6:49 PM, MaratZuev said:

А вот этот automatic тут зачем?

Automatic и static немного отличаются между собой. Наиболее близкое к классической функции  чистого verilog это именно automatic. Static может сохранять значение между вызовами, automatic создаётся заново при вызове и удаляется после завершения.

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