Email: bknpk@hotmail.com Phone: +972-54-7649119


V

 

ASIC/FPGA Design and Verification Out Source Services

My First VPI Program

This page shows a simple VPI program that interacts with a VERILOG code. VPI is the C-Programming interface to the Verilog HDL.

  1. The program is tested mainly with free VERILOG simulator - icarus. It has also checked on NCSIM simulator.

  2. The VERILOG code is simple. A counter value is decoded and on some value the VPI is called.

  3. The VPI program prints the module name; the simulation time and a VERILOG register value. The later use the integer format.

  4. The VERILOG new system task invocation is shown below:
    always @ (posedge clk) begin
      if(cnt == 4'd2) begin
        $reg_acc(cnt);
        $display("dbg %d", $time);
      end

  5. The functional part of the VPI c-code program is shown below:
    static int reg_acc_calltf(char*user_data)
    {
      vpiHandle h1, h2, h3;
      h1 = vpi_handle(vpiSysTfCall, NULL);
      h2 = vpi_iterate(vpiArgument, h1);
      h3 = vpi_scan(h2);
      vpi_printf("the name of the handle is %s\n", vpi_get_str(vpiFullName, h3));

      s_vpi_time time;
      time.type = vpiSimTime;
      vpi_get_time(NULL, &time);
      vpi_printf("at %d\n", time.low);
      
      s_vpi_value val;
      val.format = vpiIntVal;
      vpi_get_value (h3, &val);
      vpi_printf("the value is %d\n", val.value.integer);

      vpi_free_object(h2);
      return 0;
    }

  6. The NCSIM simulation is done using the irun utility:
    irun reg_acc.v reg_acc.c vpi_user.c -loadvpi :reg_acc_calltf

  7. The following bash script is used:

    #!/bin/bash
    rm $1.vvp *.vcd
    iverilog-vpi $1.c || exit
    iverilog -o$1.vvp $1.v || exit
    vvp -M. -m$1 $1.vvp || exit

  8. The output looks like (icarus)
    VCD info: dumpfile vpi.vcd opened for output.
    the name of the handle is cntM.cnt
    at 25
    the value is 2
    dbg 25
    the name of the handle is cntM.cnt
    at 185
    the value is 2
    dbg 185
    the name of the handle is cntM.cnt
    at 345
    the value is 2
    dbg 345

  9. The entire package, my_first_vpi.tar.gz, is at the download area see below. You can also download it directly from: direct load

Contact me now at:

  ...


I would be happy to offer my services. Call ASAP !


Home

Download Area

example of VHDL std_logic_vector to c code string


A simple c-code program to read a memory array from verilog RTL, using VPI.







Search This Site


Feedback This Site




new pages on this site