реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Запись симуляции в лог SV, как лучше?
-=Vitaly=-
сообщение Jul 30 2008, 09:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Здравствуйте.

Подскажите наиболее оптимально в СистемВерилоге сохранить ход симуляции в файл?

Я попробовал внутри класса вставить в таск $fwrite но Квесте не понравилось. Такой вариант вообще возможен?

Заранее спасибо.
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 30 2008, 09:47
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(-=Vitaly=- @ Jul 30 2008, 04:22) *
Здравствуйте.

Подскажите наиболее оптимально в СистемВерилоге сохранить ход симуляции в файл?

Я попробовал внутри класса вставить в таск $fwrite но Квесте не понравилось. Такой вариант вообще возможен?

Заранее спасибо.


а файлик открыть? а проверить что указатель валидный ? а указать функциям файлового ввода вывода указатель на файлик ? а корректно его закрыть ? все как в с/с++ в общем smile.gif))

читайте стандарт на верилог

удачи !!!


--------------------
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение Jul 30 2008, 11:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Цитата(des00 @ Jul 30 2008, 12:47) *
а файлик открыть? а проверить что указатель валидный ? а указать функциям файлового ввода вывода указатель на файлик ? а корректно его закрыть ? все как в с/с++ в общем smile.gif))

читайте стандарт на верилог

удачи !!!


Да тут конкретно Квеста говорит Hierarchical reference file not allowed from within package. Наверное все таки так нельзя

Спасибо
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 30 2008, 11:31
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(-=Vitaly=- @ Jul 30 2008, 06:26) *
Да тут конкретно Квеста говорит Hierarchical reference file not allowed from within package. Наверное все таки так нельзя

Спасибо


чего ????

код в студию.

вот совершенно рабочий пример


Код
//
// Project      : High-Speed SDRAM Controller with adaptive bank management and command pipeline
//
// Project Nick : HSSDRC
//
// Version      : 1.0-beta
//  
// Revision     : $Revision: 240 $
//
// Date         : $Date: 2008-02-19 17:41:56 +0600 (Р'С', 19 С"РчР_ 2008) $
//
// Workfile     : message_class.sv
//
// Description  : simple message service class
//


`ifndef __MESSAGE_CLASS__

  `define __MESSAGE_CLASS__

  class message_class;
  
    static int fp;
  
    static int err_cnt;

    //
    //
    //

    function new (string file_name = "");
      if (file_name.len() != 0)
        fp = $fopen(file_name, "w");
      else
        fp = 0;
    endfunction

    //
    //
    //
  
    function void stop();
      $fclose(fp);
    endfunction
  
    //
    //
    //
    
    function void note (string str);
      string io_str;
  
      io_str = $psprintf("**NOTE** at %0t : ", $time);
  
      io_str = {io_str, str};
  
      $display (io_str);
      if (fp)
        $fdisplay (fp, io_str);
    endfunction

    //
    //
    //

    function void err (string str);
      string io_str;
  
      err_cnt++;
  
      io_str = $psprintf("**ERROR** at %0t : ", $time);
  
      io_str = {io_str, str};
  
      $display (io_str);
      if (fp)
        $fdisplay (fp, io_str);
  
    endfunction
  
  endclass

`endif


--------------------
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение Jul 30 2008, 13:19
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Цитата(des00 @ Jul 30 2008, 14:31) *
чего ????

код в студию.

А вот совершенно нерабочий :-)
Код
import definitions::*;
program simple_spi_tb (spi_bus_i.master spi_m);
   //import definitions::*;
spi_simple_class spi_sender, spi_sender2;
Packet p;    
//reg SSB,SCLK,MOSI;  
bit [7:0] my_data []='{`SI,8'hBB,8'hCC};
static int file;
initial
  begin
  file=$fopen("log.txt","w");
  $fwrite(file, "Simulation started %t", $realtime);
  spi_sender = new(spi_m);
  spi_m.RSTB=1'b0;
  #600;
  spi_m.RSTB=1'b1;
  spi_m.SSB=1'b1;
  spi_sender.SPI_COMMAND_WRITE(my_data);
  repeat (10)
  begin
   spi_sender.SPI_TRASH_WRITER();
  end
  spi_sender2=null;
  $stop;
end    
//========================================================
endprogram

class Packet;
bit [7:0] commands_array [] ='{`NOP,`CR,`RT,`WT,`SI,`SIL,`RO1,`RO2,`RO4,`RO8,`TZ1,`TZ2,`TZ12,`TZ0,`SM,`WU};
typedef bit [7:0] command_payload_t [3];
rand int command_index;
rand command_payload_t data;

constraint inside_sixteen {
  command_index inside {[0:16]};
endclass

class spi_simple_class;

virtual spi_bus_i spi;
const int tcs_sclk=100;
const int tsclk_cs=100;
  typedef bit [7:0] my_data [3];
  rand my_data data;
  function new (virtual spi_bus_i spi);
    this.spi=spi;
  endfunction

task SPI_COMMAND_WRITE (bit [7:0] data []);
    
endtask

task SPI_TRASH_WRITER();
  Packet p;
  bit [7:0] data [3];
  p=new;
   begin
    assert(p.randomize());
       $fwrite(file, "Send packet over SPI time=%t p.data= %p",  $realtime ,p.data);
     data[0]=p.commands_array[p.command_index];
     data[1:2]=p.data[1:2];
     $display("p.data= %p", data);
     SPI_COMMAND_WRITE(data);
   end  
endtask  
endclass


Спасибо!
Go to the top of the page
 
+Quote Post
-=Vitaly=-
сообщение Jul 30 2008, 14:34
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 468
Регистрация: 31-08-06
Из: Киев
Пользователь №: 19 991



Вот так вот работает, но чувствую что это некрасиво. Особенно если логить много прийдется надо все время передавать указатель на файл. smile3046.gif

Код
program simple_spi_tb (spi_bus_i.master spi_m);
   //import definitions::*;
spi_simple_class spi_sender, spi_sender2;
static int file;
Packet p;    
//reg SSB,SCLK,MOSI;  
bit [7:0] my_data []='{`SI,8'hBB,8'hCC};

initial
  begin
   spi_sender = new(spi_m);
   file=$fopen("log.txt","w");
  $fdisplay(file, "Simulation started %0t", $realtime);

  spi_m.RSTB=1'b0;
  #600;
  spi_m.RSTB=1'b1;
  spi_m.SSB=1'b1;
  spi_sender.SPI_COMMAND_WRITE(my_data);
  repeat (10)
  begin
   =========================spi_sender.SPI_TRASH_WRITER(file);
  end
  spi_sender2=null;
  $stop;
end    

endprogram


class Packet;
bit [7:0] commands_array [] ='{`NOP,`CR,`RT,`WT,`SI,`SIL,`RO1,`RO2,`RO4,`RO8,`TZ1,`TZ2,`TZ12,`TZ0,`SM,`WU};
typedef bit [7:0] command_payload_t [3];
rand int command_index;
rand command_payload_t data;

constraint inside_sixteen {
  command_index inside {[0:16]};}
endclass

class spi_simple_class;

virtual spi_bus_i spi;
=================================================int file;
const int tcs_sclk=100;
const int tsclk_cs=100;
  typedef bit [7:0] my_data [3];
  rand my_data data;
    function new (virtual spi_bus_i spi);
     this.spi=spi;
    endfunction

task SPI_COMMAND_WRITE (bit [7:0] data []);
         endtask

===================================task SPI_TRASH_WRITER(input int file);
  Packet p;
  bit [7:0] data [3];
  p=new;
   begin
    assert(p.randomize());
    $fdisplay(file, "Send packet over SPI time inside class=%0t p.data= %p",  $realtime ,p.data);
     data[0]=p.commands_array[p.command_index];
     data[1:2]=p.data[1:2];
     $display("p.data= %p", data);
     SPI_COMMAND_WRITE(data);
   end  
endtask  
endclass


Как объявить переменную чтобы она была видна всем объектам использующимся в программе?

Спасибо
Go to the top of the page
 
+Quote Post
dvladim
сообщение Jul 30 2008, 17:59
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 654
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



А вы Бержерона читали?

Он там, конечно, не о СВ а о Верилоге и ВХДЛ, но общая идея такая:
Он использует несколько модулей верхнего уровня один из которых syslog. В этом модуле несколько task-ов и вызывет он их как syslog.note("msg"); syslog.error("msg"); ну и т.д. А в тасках, соответственно, врапперы для сообщений ошибок и всего такого. Переписываешь враппер и перенаправляешь куда хочешь - хоть в файл, хоть на экран. Опять же можно и количество посчитать.
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 31 2008, 03:40
Сообщение #8


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(dvladim @ Jul 30 2008, 12:59) *
Он там, конечно, не о СВ а о Верилоге и ВХДЛ, но общая идея такая:


автор плодороден, он и про СВ много писал smile.gif))

но идея та. используйте так называемый сервер/службу сообщений. самостоятельный объект в который передаете логи. В этом объекте static переменная, которая видна всем экземплярам класса.
указатель на службу можете передавать в классы.

Еще проще использовать базовые классы OVM, там в каждом базовом классе защит механизм коннекта к серверу сообщений, тогда там будет все проще.

а в вашем конкретном случае, могли бы и public переменную в классе сделать и присвоить ее в конструкторе или после создания класса %)))

удачи.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 07:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.02005 секунд с 7
ELECTRONIX ©2004-2016