Перейти к содержанию
    

SystemVerilog видимость parameter в task

Приветствую всех!

С SystemVerilog пока особого опыта нет, изучаю понемногу. 

 Тестбенч, все сгенерировано с помощью Clarity ( Lattice Diamond 3.12 )

В топ модуле тестбенча  pix2byte_tb.v 

определенны различные параметры, например  num_frames

`timescale 1 ps / 1fs
`include "dut_defines.v"
`include "tb_params.v"
`include "vid_timing_gen_driver.v"
`include "byte_out_monitor.v"

module top();

`include "dut_params.v"

parameter num_frames    = `NUM_FRAMES;
parameter hfront_porch  = `HFRONT;
parameter hsync_pulse   = `HPULSE;
parameter hback_porch   = `HBACK;
parameter vfront_porch  = `VFRONT;
parameter vsync_pulse   = `VPULSE;
parameter vback_porch   = `VBACK;

//`ifndef MISC_ON
//  parameter init_drive_delay = `INIT_DRIVE_DELAY;
//`endif

parameter output_width_in_bytes = (DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/128;
parameter input_width_in_bits = PIX_WIDTH*NUM_PIX_LANE;
parameter input_width_in_bytes = input_width_in_bits[0] ? input_width_in_bits :
                                 input_width_in_bits[1] ? input_width_in_bits/2 :
                                 input_width_in_bits[2] ? input_width_in_bits/4 :
                                                          input_width_in_bits/8;
parameter multiple_bytes = input_width_in_bytes*output_width_in_bytes;
parameter least_common_multiple_bytes = multiple_bytes[0] ? multiple_bytes*4 : multiple_bytes[1] ? multiple_bytes*2 : multiple_bytes;
parameter number_of_bytes = (1 + `NUM_BYTES/least_common_multiple_bytes)*least_common_multiple_bytes;
parameter total_pix = number_of_bytes*8/PIX_WIDTH;
parameter act_pix = total_pix/NUM_PIX_LANE;

parameter total_line     = `NUM_LINES;
parameter pixclk_period  = `SIP_PCLK/2;
parameter byteclk_period = (pixclk_period*DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/(PIX_WIDTH*NUM_PIX_LANE*16);
localparam exp_byte_count = `NUM_FRAMES * `NUM_LINES * number_of_bytes;

reg     reset_n;
reg     pix_clk_i   = 0;
reg     byte_clk_i  = 0;
reg     mon_en      = 0;
reg     start_vid   = 0;
reg     byte_log_en = 0;
wire    rst_n_i     = reset_n;
wire    byte_clk    = byte_clk_i;

integer line_cnt     = 0;
integer frame_cnt    = 0;
integer pixel_cnt    = 0;
integer testfail_cnt = 0;

integer txfr_delay = 100000/byteclk_period;
integer wc_delay = number_of_bytes/(GEAR_16+1)*NUM_TX_LANE;

reg  dvalid_i;
wire de_i;
wire hsync_i, vsync_i;
wire fv_i, lv_i;
wire eof;

wire [PIX_WIDTH-1:0] pix_data9_i;

.....

потом в тексте есть include

...............

`ifdef TX_DSI
  `include "test_snow_pixel2byte_dsi_reset.v"
  `include "test_snow_pixel2byte_dsi_trans.v"
`else
  `include "test_snow_pixel2byte_csi2_trans.v"
  `include "test_snow_pixel2byte_csi2_reset.v"
`endif
  
...............

....

и вызов

...........
  
@(posedge pix_clk_i);
    byte_log_en = 1;
    start_vid = 1;
    $display(" test_hsync_front_porch : %d \n", hfront_porch);
    $display(" test_hsync_width       : %d \n", hsync_pulse);
    $display(" test_hsync_back_porch  : %d \n", hback_porch);
    $display(" test_h_width           : %d \n", act_pix);
    $display(" test_v_height          : %d \n", total_line);
    $display(" test_vsync_front_porch : %d \n", vfront_porch);
    $display(" test_vsync_width       : %d \n", vsync_pulse);
    $display(" test_vsync_back_porch  : %d \n", vback_porch);
    mon_en = 1;
    test_snow_pixel2byte_csi2_trans;
  
    `ifdef DSI_RESET_TEST1
       byte_log_en = 0;
       start_vid = 1;
       mon_en = 1;
       test_snow_pixel2byte_dsi_reset;
    `endif
      
 .................

 

В  test_snow_pixel2byte_csi2_trans.v определен такой task

// =========================================================================
// Filename: test_snow_pixel2byte_csi2_trans.v
// Copyright(c) 2017 Lattice Semiconductor Corporation. All rights reserved.
// =========================================================================

//`ifdef CSI2_TEST1

task test_snow_pixel2byte_csi2_trans;
   begin

      fork

  `ifdef MISC_ON
      if (data_type !== 6'bzz_zzz)  // 20191217
      while((frame_cnt !== num_frames)) begin

.........................

 

Насколько я понимаю перед begin должны быть перечислены input и output для даного task, но их нет.

 

Все нужные файлы включены в .do файл, использую vlog -sv -work lib  filename.v чтобы добавить исходник к тестбенчу

 

ModelSim ругается, не видит frame_cnt

# ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'frame_cnt'.
# ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'num_frames'.
###### ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84):         @(posedge  eof);
# ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84): (vlog-2730) Undefined variable: 'eof'.

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

Оригинального DO файла нет, он не сгенирирован wizard-ом.

 

Подскажите пожалуйста, какая была задумка у автора этого дизайна, как task  должен видеть переменные из главного модуля?

 

Изменено пользователем alxkon

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 minutes ago, alxkon said:

Насколько я понимаю перед begin должны быть перечислены input и output для даного task, но их нет.

таск и функция могут быть без аргументов.

13 minutes ago, alxkon said:

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

компилировать нужно файл с модулем, а не инклуд файл. т.к. каждый файл в команде компилируется отдельно и в таске действительно не определены эти сигналы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

45 минут назад, des00 сказал:

таск и функция могут быть без аргументов.

компилировать нужно файл с модулем, а не инклуд файл. т.к. каждый файл в команде компилируется отдельно и в таске действительно не определены эти сигналы

Спасибо огромное! Это ведь действительно очевидно, туплю... С RTL и TB на Verilog и SV не работал до сих пор особо, так, подправить и разобраться как работает.

Зато теперь открыл для себя +include+

:clapping:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в рамках занудства - это не SV, это самый что ни на есть классический Verilog (вроде даже из 90-х, а не обновленный в 2000-х)

у латтиса вообще плохо с SV, если с ним работать, то нужно через нетлист - в Симплифае SV проект, который генерит нетлист, а потом этот edn уже в Даймонд брать.

сейчас (в Diamond 3.11) вроде проект не валится от SV файла, но всякие чудеса - типа Reveal не работает с SV - вылазят в неожиданных местах

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

01.04.2021 в 23:00, yes сказал:

в рамках занудства - это не SV, это самый что ни на есть классический Verilog (вроде даже из 90-х, а не обновленный в 2000-х)

у латтиса вообще плохо с SV, если с ним работать, то нужно через нетлист - в Симплифае SV проект, который генерит нетлист, а потом этот edn уже в Даймонд брать.

сейчас (в Diamond 3.11) вроде проект не валится от SV файла, но всякие чудеса - типа Reveal не работает с SV - вылазят в неожиданных местах

 

Да, Вы правы. Это следствие ошибки на которую указал des00. Мне нужно было запустить TB 3-х разных латтисовских IP. DO файлов там не было я сам быстро настрогал.  Начал с первого ядра сразу криво -  компиляция include файла привела к появлению ошибок, которые были мною приняты как смешаный Verilog разных стандартов. Попробовал в Modelsim выбрать год стандарта и оказалось что выбрав SV ошибок нет, вот и решил что это SV. Симуляция прошла. TB второго ядра это copy-paste первого TB. А на третьем споткнулся... Нашел Стюарта Сазерленда буду вникать сразу в SV.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...