SlideShare a Scribd company logo
1 of 58
Algorithm Verification with
Open Source and System Verilog
*
Andra Socianu Daniel Ciupitu
• Verification of algorithmic blocks using Octave
• Case study I : SV – SHA-3 – Octave
• Case study II : SV – DSP functions – Octave
• Case study III : SV – DSP functions – SystemC
• Conclusions
• Q&A
*
Agenda
Algorithmic Blocks
• Speech/signal/image processing and analysis
• Data encryption/decryption
• BB/radio signal modulation/demodulation
• Signal filtering
• Error detection and correction
• Data compression
• etc.
*
GSM Vocoder
*
Pre-processing
Short term
LPC analysis
Short term
analysis filter
RPE grid
selection and
coding
Long term
analysis filter
LTP analysis
RPE grid
decoding and
positioning
To radio subsystem
Input
signal
RPE parameters
(47 bits/ 5 ms)
Reflection coefficients
coded as
Log. - Area ratios
(36 bits/ 20 ms)
LTP parameters
(9 bits/ 5 ms)
Implementation Challenges
• Complexity
• Performance
• Debug
• Verification language limitations
*
Alternatives
• Matlab or Octave
• SystemC
• C++
• etc.
*
What is Octave?
GNU Octave is:
• a high-level interpreted language for
numerical computations
• usually used through its interactive command
line interface, but it can also be used to write
non-interactive programs
• allows cross language communication
• open source (GNU-GPL)
*
Where to Get It
There are two Octave packages that need to be
installed:
• Main application: ftp://ftp.gnu.org/gnu/octave
• Development package: http://goo.gl/yjHGbp
This paper uses version 3.4.3 of the above
packages.
*
How to Install It
• Create a Makefile by running the script
`configure‘ which you can find in the Octave
package
• Run `make‘ to compile the sources
• Run `make install‘ to install octave and a copy
of its libraries and its documentation
*
How to Test It
• Start Octave by typing octave in the Linux
prompt
• Search for a known function
• Test a known function output
*
$: octave
octave:1> which fft
`fft' is a function from the file /usr/lib64/octave/3.4.3/oct/x86_64-redhat-linux-gnu/fft.oct
octave:2> cos(2*pi)
ans = 1
Verification Environment
*
Score Boarding
*
ScoreboardInput
Monitor
Output
Monitor
Bridge
Octave
How to Connect SV and Octave
External interfaces:
• DPI-C (Direct Programming Interface)
• VPI (Verilog Procedural Interface)
• PLI (Programming Language Interface)
• etc.
*
The Bridge
*
How to Use DPI-C API
External interfaces:
• import functions and tasks: implemented in C
and called from SV
• export functions and tasks: implemented in
SV and called from C
*
import "DPI-C" function int c_function (input int a, output int b,
inout int c);
export "DPI-C" sv_function;
System Verilog <-> C
*
import "DPI-C" function void c_hello_world();
class amiq_hello_world extends uvm_component;
function sv_hello_world();
`uvm_info("AMIQ_HELLO_WORLD", "Hello world from SV file", UVM_NONE);
c_hello_world();
endfunction
endclass
SV
extern "C" {
void c_hello_world() {
printf("[AMIQ_HELLO_WORLD] Hello world from C filen");
cpp_hello_world();
}
}
C
C <-> C++
*
extern "C" {
void c_hello_world() {
printf("[AMIQ_HELLO_WORLD] Hello world from C filen");
cpp_hello_world();
}
}
C
void cpp_hello_world() {
cout << "[AMIQ_HELLO_WORLD] Hello world from C++ file" << endl;
oct_hello = load_fcn_from_file("hello.m", "", "", "hello", true);
feval("hello", oct_in_list, 1);
}
C++
Octave C++ Library
To get access to the octave C++ API you need to
include its libraries. This will allow you to use script
files, oct-files and built-in functions.
Libraries:
• main C++ library:
#include <octave/octave.h>
• Octave main() function:
#include <octave/oct.h>
• virtual terminal support:
#include <octave/parse.h>
*
C++ <-> Octave
*
void cpp_hello_world() {
cout << "[AMIQ_HELLO_WORLD] Hello world from C++ file" << endl;
oct_hello = load_fcn_from_file("hello.m", "", "", "hello", true);
feval("hello", oct_in_list, 1);
}
C++
function hello ();
disp("[AMIQ_HELLO_WORLD] Hello world from Octave file");
end
Oct
Octave Initialization
*
Octave Initialization
*
// Initialize the Octave interpreter
void initialize_octave_cpp() {
string_vector argv(2);
argv(0) = "embedded";
argv(1) = "-q";
octave_main(2, argv.c_str_vec(), 1);
}
Calling Octave Built-In Functions
// Input parameters list for octave function
octave_value_list oct_in_list;
// Output message as a Matrix
Matrix oct_output_data(1, output_size);
// Get computed convolution to oct_output_data
oct_output_data = feval("conv", oct_in_list, 1)(0).matrix_value();
*
Calling Octave User-Written Functions
// Input parameters list for octave function
octave_value_list oct_in_list;
// Output message as a Matrix
Matrix oct_output_data(1, output_size);
// Pointer to Octave custom function
octave_function *conv_fct;
// Load Octave custom function
conv_fct = load_fcn_from_file ("amiq_conv.m", "", "", "amiq_conv ", true);
// Get computed convolution to oct_output_data
oct_output_data = feval("amiq_conv ", oct_in_list, 1)(0).matrix_value();
*
Compiling
Create a shared library that contains the Octave
library and the C++ code. This library will be
passed to the simulator which runs System
Verilog.
TIP: Compiler options can be easily obtained by running:
*
$: mkoctfile -link-stand-alone -v cpp_code.cpp
Compile Command
mkoctfile -link-stand-alone -v my_file.cpp
g++ -c -fPIC -I/usr/include/octave-3.4.3/octave/.. -
I/usr/include/octave-3.4.3/octave -I/usr/include/freetype2 -O2 -
g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -
fstack-protector --param=ssp-buffer-size=4 -m64 -
mtune=generic my_file.cpp -o my_file.o
g++ -shared -Wl,-Bsymbolic -o my_file.oct my_file.o -link-
stand-alone -L/usr/lib64/octave/3.4.3 -L/usr/lib64 -loctinterp -
loctave -lcruft -L/usr/lib64/atlas -llapack -L/usr/lib64/atlas -
lf77blas -latlas -lfftw3 -lfftw3f -lm -L/usr/lib/gcc/x86_64-redhat-
linux/4.4.6 -L/usr/lib/gcc/x86_64-redhat-
linux/4.4.6/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -
L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../.. -lgfortranbegin -
lgfortran -lm
*
Compile Command
g++ 
-Wall 
-m64 
-I${PROJ_HOME}/octave 
-I${PROJ_HOME}/c 
-I${PROJ_HOME}/sim 
-I/usr/include/octave-3.4.3/octave/.. 
-I/usr/include/octave-3.4.3/octave 
-I/usr/include/freetype2 
-L${PROJ_HOME}/sim 
-L/usr/lib64/octave/3.4.3 
-L/usr/lib64 
-L/usr/lib64/atlas 
-L/usr/lib/gcc/x86_64-redhat-linux/4.4.6 
-L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64 
-L/lib/../lib64 
-L/usr/lib/../lib64 
-L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../.. 
-Wl,-rpath 
-Wl,/usr/lib64/octave/3.4.3 
-loctinterp 
-loctave 
-lcruft 
-llapack 
-lf77blas 
-latlas 
-lfftw3 
-lfftw3f 
-lreadline 
-lm 
-lgfortranbegin 
-lgfortran 
-shared 
-fPIC 
-o libcpp_oct.so ${PROJ_HOME}/c/amiq_fft256_c_oct_container.cpp
*
Running
You can compile and run simulations with any of
the 3 major EDA vendors simulators:
• irun (Cadence) and vcs (Synopsys): include
the shared library at compile time
• vlog/vsim (Mentor): include the shared library
at run time
TIP: If you run into errors related to octave main()
calls, the macro call "OCTINTERP_API" from
"octave.h" library file has to be removed.
*
Success!!!
UVM_INFO @ 0 [AMIQ_HELLO_WORLD]: Hello world from SV file
[AMIQ_HELLO_WORLD]: Hello world from C file
[AMIQ_HELLO_WORLD]: Hello world from C++ file
[AMIQ_HELLO_WORLD]: Hello world from Octave file
*
Octave Data Types
Special Octave types:
• octave_value_list (generic type)
• RowVector
• ColumnVector
• Matrix
• DiagMatrix
• etc.
*
How to Pass Data to/from DPI-C
*direction is relative to System Verilog argument
*
System Verilog C (input*) C (output/inout*)
byte char char*
string const char* char**
real double double*
bit unsigned char unsigned char
logic unsigned char unsigned char*
int int int*
shortreal float float*
open array [] const
svOpenArrayHandler
svOpenArrayHandler
Recap
• What is Octave
• How to install Octave
• How to test Octave
• How to create a SV-Octave bridge
• How to compile and run a simulation
*
Case study I
SV – SHA 3 – Octave
*
Verification Environment
*
DUT
*
What is SHA-3/Keccak?
SHA-3 is:
• a cryptographic hash function
• a subset of the cryptographic primitive
family Keccak
• an alternative to SHA-1 and SHA-2 which in
theory are vulnerable
*
Performance – Simulator 1
*
Performance – Simulator 2
*
Performance – Simulator 3
*
Implementation Effort
*
System Verilog Octave
Number of code lines 223 132
Implementation time 1 day 1 day
Debug time 2 days 1 day
Why did we pushed forward?
• Keccak deals mainly with matrix operations
• System Verilog is optimized to work with
multi-dimension arrays
• Things could be different for other types of
functions
TIP: A simple multiplication of two matrixes takes
9.32 ms for the Octave computation and context
switch, while the same operation takes 8.27 ms
in SV.
*
Case study II
SV – DSP functions – Octave
*
Test Bench
*
Octave
UVM component
Input feeder
Test bench
SV
DSP Functions We Used
• FFT or Fast Fourier Transform
• DCT or Discrete Cosine Transform
• FIR or Finite Impulse Response filter
• Convolution
*
0
10
20
30
40
50
60
FFT with
optimization
FFT without
optimization
DCT with
optimization
DCT without
optimization
FIR with
optimization
FIR without
optimization
Convolution
with
optimization
Convolution
without
optimization
Duration(s)
SV Duration
Octave duration
Performance – Simulator 1
*
Performance – Simulator 2
*
0
10
20
30
40
50
60
FFT with
optimization
FFT without
optimization
DCT with
optimization
DCT without
optimization
FIR with
optimization
FIR without
optimization
Convolution
with
optimization
Convolution
without
optimization
Duration(s)
SV Duration
Octave duration
Performance – Simulator 3
*
0
10
20
30
40
50
60
FFT with
optimization
FFT without
optimization
DCT with
optimization
DCT without
optimization
FIR with
optimization
FIR without
optimization
Convolution
with
optimization
Convolution
without
optimization
Duration(s)
SV Duration
Octave duration
Implementation Effort
*
System Verilog Octave
FFT
Number of code lines 30 3
Implementation time 1 day 0,5 days
Debug time 1 day 0,5 days
DCT
Number of code lines 19 3
Implementation time 1 day 0,5 days
Debug time 1 day 0,5 days
FIR
Number of code lines 21 3
Implementation time 1 day 0,5 days
Debug time 1 day 0,5 days
Convolution
Number of code lines 12 3
Implementation time 1 day 0,5 days
Debug time 1 day 0,5 days
Case study III
SV – DSP functions – SystemC
*
Test Bench
*
SystemC
UVM component
Input feeder
Test bench
SV
What is SystemC?
• a C++ library
• provides an event-driven simulation interface
• supports system level design
• inherits all C++ features
• adds new data types
• fixed point computation
*
SystemC Specific Data Types
*
System Verilog SystemC
bit, logic, reg wire bool, sc_bit, sc_logic
bit, logic, reg, wire vector sc_bv, sc_lv, sc_int, sc_uint
integer, int [unsigned] [unsigned] int
real, shortreal double/float
byte [unsigned] [unsigned] char
enum Enum
struct Struct
- sc_fixed, sc_ufixed
Performance – Simulator 1
*
Performance – Simulator 2
*
Implementation Effort
*
System Verilog SystemC
FFT
Number of code lines 30 37
Implementation time 2 days 1 day
Debug time 4 days 3 days
DCT
Number of code lines 20 20
Implementation time 1 day 1 day
Debug time 2 days 2 days
FIR
Number of code lines 13 16
Implementation time 1 day 1 day
Debug time 2 days 2 days
Convolution
Number of code lines 23 21
Implementation time 1 day 1 day
Debug time 1 day 1 day
Conclusions
Both Octave and SystemC can offer:
• greater performance
• lower implementation
• lower debug time
*
Conclusions
• SV is better when multi-dimensional vectors
are involved
• Octave is better for particular functions (e.g.
FFT, DCT, Convolution or FIR), but language
context switch comes at a cost (~2.3 ms/call)
• SystemC can help you if you miss Octave
fixed point libraries
*
Q&A
*
Q&A
*
Thank you!

More Related Content

What's hot

Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_features
Nirav Desai
 
UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register Package
DVClub
 
Session 7 code_functional_coverage
Session 7 code_functional_coverageSession 7 code_functional_coverage
Session 7 code_functional_coverage
Nirav Desai
 

What's hot (20)

program status word
program status wordprogram status word
program status word
 
Functional verification techniques EW16 session
Functional verification techniques  EW16 sessionFunctional verification techniques  EW16 session
Functional verification techniques EW16 session
 
Session 9 advance_verification_features
Session 9 advance_verification_featuresSession 9 advance_verification_features
Session 9 advance_verification_features
 
INTERRUPT LATENCY AND RESPONSE OF THE TASK
INTERRUPT LATENCY AND RESPONSE OF THE TASKINTERRUPT LATENCY AND RESPONSE OF THE TASK
INTERRUPT LATENCY AND RESPONSE OF THE TASK
 
UVM Update: Register Package
UVM Update: Register PackageUVM Update: Register Package
UVM Update: Register Package
 
Scalable Service-Oriented Middleware over IP
Scalable Service-Oriented Middleware over IPScalable Service-Oriented Middleware over IP
Scalable Service-Oriented Middleware over IP
 
BUD17-302: LLVM Internals #2
BUD17-302: LLVM Internals #2 BUD17-302: LLVM Internals #2
BUD17-302: LLVM Internals #2
 
UVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATIONUVM ARCHITECTURE FOR VERIFICATION
UVM ARCHITECTURE FOR VERIFICATION
 
One Time Pad Encryption Technique
One Time Pad Encryption TechniqueOne Time Pad Encryption Technique
One Time Pad Encryption Technique
 
System verilog assertions (sva) ( pdf drive )
System verilog assertions (sva) ( pdf drive )System verilog assertions (sva) ( pdf drive )
System verilog assertions (sva) ( pdf drive )
 
Vista 20SE
Vista 20SEVista 20SE
Vista 20SE
 
8259 a
8259 a8259 a
8259 a
 
01 GPIO||General Purpose Input Output.2016
01 GPIO||General Purpose Input Output.201601 GPIO||General Purpose Input Output.2016
01 GPIO||General Purpose Input Output.2016
 
IP Security
IP SecurityIP Security
IP Security
 
Supervisor call and pendable service call
Supervisor call and pendable service callSupervisor call and pendable service call
Supervisor call and pendable service call
 
Embedded C - Optimization techniques
Embedded C - Optimization techniquesEmbedded C - Optimization techniques
Embedded C - Optimization techniques
 
Session 7 code_functional_coverage
Session 7 code_functional_coverageSession 7 code_functional_coverage
Session 7 code_functional_coverage
 
01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swetha01 Transition Fault Detection methods by Swetha
01 Transition Fault Detection methods by Swetha
 
Computer Organisation and Architecture
Computer Organisation and ArchitectureComputer Organisation and Architecture
Computer Organisation and Architecture
 
What is Bootloader???
What is Bootloader???What is Bootloader???
What is Bootloader???
 

Viewers also liked

SystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification ProcessSystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification Process
DVClub
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
chiportal
 
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
Robert O. Peruzzi, PhD, PE, DFE
 

Viewers also liked (20)

SystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification ProcessSystemVerilog Assertions (SVA) in the Design/Verification Process
SystemVerilog Assertions (SVA) in the Design/Verification Process
 
Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...Top five reasons why every DV engineer will love the latest systemverilog 201...
Top five reasons why every DV engineer will love the latest systemverilog 201...
 
Tokyo r47 beginner
Tokyo r47 beginnerTokyo r47 beginner
Tokyo r47 beginner
 
MixedSignal UVM Demo CDNLive
MixedSignal UVM Demo CDNLiveMixedSignal UVM Demo CDNLive
MixedSignal UVM Demo CDNLive
 
C++ process new
C++ process newC++ process new
C++ process new
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
 
Concurrency 2010
Concurrency 2010Concurrency 2010
Concurrency 2010
 
Week1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC BeginWeek1 Electronic System-level ESL Design and SystemC Begin
Week1 Electronic System-level ESL Design and SystemC Begin
 
Systemc overview 2010
Systemc overview 2010Systemc overview 2010
Systemc overview 2010
 
Thread and method_2010
Thread and method_2010Thread and method_2010
Thread and method_2010
 
Channel 2010
Channel 2010Channel 2010
Channel 2010
 
SystemC Ports
SystemC PortsSystemC Ports
SystemC Ports
 
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0A Systematic Approach to Creating Behavioral Models (white paper) v1.0
A Systematic Approach to Creating Behavioral Models (white paper) v1.0
 
Esl basics
Esl basicsEsl basics
Esl basics
 
UVM Ral model usage
UVM Ral model usageUVM Ral model usage
UVM Ral model usage
 
SystemVerilog Assertions verification with SVAUnit - DVCon US 2016 Tutorial
SystemVerilog Assertions verification with SVAUnit - DVCon US 2016 TutorialSystemVerilog Assertions verification with SVAUnit - DVCon US 2016 Tutorial
SystemVerilog Assertions verification with SVAUnit - DVCon US 2016 Tutorial
 
stack
stackstack
stack
 
Design and Implementation of an Advanced DMA Controller on AMBA-Based SoC
Design and Implementation of an Advanced DMA Controller on AMBA-Based SoCDesign and Implementation of an Advanced DMA Controller on AMBA-Based SoC
Design and Implementation of an Advanced DMA Controller on AMBA-Based SoC
 
Queue
QueueQueue
Queue
 
Tree
TreeTree
Tree
 

Similar to How to Connect SystemVerilog with Octave

MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptx
gopikahari7
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
Edge AI and Vision Alliance
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
sean chen
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdf
SamHoney6
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
Serge Stinckwich
 
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
JunZhao68
 
CodeChecker Overview Nov 2019
CodeChecker Overview Nov 2019CodeChecker Overview Nov 2019
CodeChecker Overview Nov 2019
Olivera Milenkovic
 
E yantra robot abstractions
E yantra robot abstractionsE yantra robot abstractions
E yantra robot abstractions
Akshar Desai
 

Similar to How to Connect SystemVerilog with Octave (20)

Digital design with Systemc
Digital design with SystemcDigital design with Systemc
Digital design with Systemc
 
SDAccel Design Contest: Vivado HLS
SDAccel Design Contest: Vivado HLSSDAccel Design Contest: Vivado HLS
SDAccel Design Contest: Vivado HLS
 
DvClub 2102 tlm based software control of uvcs for vertical verification re...
DvClub 2102   tlm based software control of uvcs for vertical verification re...DvClub 2102   tlm based software control of uvcs for vertical verification re...
DvClub 2102 tlm based software control of uvcs for vertical verification re...
 
MattsonTutorialSC14.pptx
MattsonTutorialSC14.pptxMattsonTutorialSC14.pptx
MattsonTutorialSC14.pptx
 
MattsonTutorialSC14.pdf
MattsonTutorialSC14.pdfMattsonTutorialSC14.pdf
MattsonTutorialSC14.pdf
 
CodeChecker summary 21062021
CodeChecker summary 21062021CodeChecker summary 21062021
CodeChecker summary 21062021
 
Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1Harmonia open iris_basic_v0.1
Harmonia open iris_basic_v0.1
 
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres..."The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
"The OpenCV Open Source Computer Vision Library: Latest Developments," a Pres...
 
Onnc intro
Onnc introOnnc intro
Onnc intro
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
Web Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdfWeb Template Mechanisms in SOC Verification - DVCon.pdf
Web Template Mechanisms in SOC Verification - DVCon.pdf
 
Hands on with CoAP and Californium
Hands on with CoAP and CaliforniumHands on with CoAP and Californium
Hands on with CoAP and Californium
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Cotopaxi - IoT testing toolkit (Black Hat Asia 2019 Arsenal)
Cotopaxi - IoT testing toolkit (Black Hat Asia 2019 Arsenal)Cotopaxi - IoT testing toolkit (Black Hat Asia 2019 Arsenal)
Cotopaxi - IoT testing toolkit (Black Hat Asia 2019 Arsenal)
 
Labs_BT_20221017.pptx
Labs_BT_20221017.pptxLabs_BT_20221017.pptx
Labs_BT_20221017.pptx
 
Protocol T50: Five months later... So what?
Protocol T50: Five months later... So what?Protocol T50: Five months later... So what?
Protocol T50: Five months later... So what?
 
OSGi Remote Services - Alexander Broekhuis, Bram de Kruijff
OSGi Remote Services - Alexander Broekhuis, Bram de Kruijff OSGi Remote Services - Alexander Broekhuis, Bram de Kruijff
OSGi Remote Services - Alexander Broekhuis, Bram de Kruijff
 
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
3 Open-Source-SYCL-Intel-Khronos-EVS-Workshop_May19.pdf
 
CodeChecker Overview Nov 2019
CodeChecker Overview Nov 2019CodeChecker Overview Nov 2019
CodeChecker Overview Nov 2019
 
E yantra robot abstractions
E yantra robot abstractionsE yantra robot abstractions
E yantra robot abstractions
 

Recently uploaded

Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
UXDXConf
 

Recently uploaded (20)

Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfAgentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Structuring Teams and Portfolios for Success
Structuring Teams and Portfolios for SuccessStructuring Teams and Portfolios for Success
Structuring Teams and Portfolios for Success
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 

How to Connect SystemVerilog with Octave

  • 1. Algorithm Verification with Open Source and System Verilog * Andra Socianu Daniel Ciupitu
  • 2. • Verification of algorithmic blocks using Octave • Case study I : SV – SHA-3 – Octave • Case study II : SV – DSP functions – Octave • Case study III : SV – DSP functions – SystemC • Conclusions • Q&A * Agenda
  • 3. Algorithmic Blocks • Speech/signal/image processing and analysis • Data encryption/decryption • BB/radio signal modulation/demodulation • Signal filtering • Error detection and correction • Data compression • etc. *
  • 4. GSM Vocoder * Pre-processing Short term LPC analysis Short term analysis filter RPE grid selection and coding Long term analysis filter LTP analysis RPE grid decoding and positioning To radio subsystem Input signal RPE parameters (47 bits/ 5 ms) Reflection coefficients coded as Log. - Area ratios (36 bits/ 20 ms) LTP parameters (9 bits/ 5 ms)
  • 5. Implementation Challenges • Complexity • Performance • Debug • Verification language limitations *
  • 6. Alternatives • Matlab or Octave • SystemC • C++ • etc. *
  • 7. What is Octave? GNU Octave is: • a high-level interpreted language for numerical computations • usually used through its interactive command line interface, but it can also be used to write non-interactive programs • allows cross language communication • open source (GNU-GPL) *
  • 8. Where to Get It There are two Octave packages that need to be installed: • Main application: ftp://ftp.gnu.org/gnu/octave • Development package: http://goo.gl/yjHGbp This paper uses version 3.4.3 of the above packages. *
  • 9. How to Install It • Create a Makefile by running the script `configure‘ which you can find in the Octave package • Run `make‘ to compile the sources • Run `make install‘ to install octave and a copy of its libraries and its documentation *
  • 10. How to Test It • Start Octave by typing octave in the Linux prompt • Search for a known function • Test a known function output * $: octave octave:1> which fft `fft' is a function from the file /usr/lib64/octave/3.4.3/oct/x86_64-redhat-linux-gnu/fft.oct octave:2> cos(2*pi) ans = 1
  • 13. How to Connect SV and Octave External interfaces: • DPI-C (Direct Programming Interface) • VPI (Verilog Procedural Interface) • PLI (Programming Language Interface) • etc. *
  • 15. How to Use DPI-C API External interfaces: • import functions and tasks: implemented in C and called from SV • export functions and tasks: implemented in SV and called from C * import "DPI-C" function int c_function (input int a, output int b, inout int c); export "DPI-C" sv_function;
  • 16. System Verilog <-> C * import "DPI-C" function void c_hello_world(); class amiq_hello_world extends uvm_component; function sv_hello_world(); `uvm_info("AMIQ_HELLO_WORLD", "Hello world from SV file", UVM_NONE); c_hello_world(); endfunction endclass SV extern "C" { void c_hello_world() { printf("[AMIQ_HELLO_WORLD] Hello world from C filen"); cpp_hello_world(); } } C
  • 17. C <-> C++ * extern "C" { void c_hello_world() { printf("[AMIQ_HELLO_WORLD] Hello world from C filen"); cpp_hello_world(); } } C void cpp_hello_world() { cout << "[AMIQ_HELLO_WORLD] Hello world from C++ file" << endl; oct_hello = load_fcn_from_file("hello.m", "", "", "hello", true); feval("hello", oct_in_list, 1); } C++
  • 18. Octave C++ Library To get access to the octave C++ API you need to include its libraries. This will allow you to use script files, oct-files and built-in functions. Libraries: • main C++ library: #include <octave/octave.h> • Octave main() function: #include <octave/oct.h> • virtual terminal support: #include <octave/parse.h> *
  • 19. C++ <-> Octave * void cpp_hello_world() { cout << "[AMIQ_HELLO_WORLD] Hello world from C++ file" << endl; oct_hello = load_fcn_from_file("hello.m", "", "", "hello", true); feval("hello", oct_in_list, 1); } C++ function hello (); disp("[AMIQ_HELLO_WORLD] Hello world from Octave file"); end Oct
  • 21. Octave Initialization * // Initialize the Octave interpreter void initialize_octave_cpp() { string_vector argv(2); argv(0) = "embedded"; argv(1) = "-q"; octave_main(2, argv.c_str_vec(), 1); }
  • 22. Calling Octave Built-In Functions // Input parameters list for octave function octave_value_list oct_in_list; // Output message as a Matrix Matrix oct_output_data(1, output_size); // Get computed convolution to oct_output_data oct_output_data = feval("conv", oct_in_list, 1)(0).matrix_value(); *
  • 23. Calling Octave User-Written Functions // Input parameters list for octave function octave_value_list oct_in_list; // Output message as a Matrix Matrix oct_output_data(1, output_size); // Pointer to Octave custom function octave_function *conv_fct; // Load Octave custom function conv_fct = load_fcn_from_file ("amiq_conv.m", "", "", "amiq_conv ", true); // Get computed convolution to oct_output_data oct_output_data = feval("amiq_conv ", oct_in_list, 1)(0).matrix_value(); *
  • 24. Compiling Create a shared library that contains the Octave library and the C++ code. This library will be passed to the simulator which runs System Verilog. TIP: Compiler options can be easily obtained by running: * $: mkoctfile -link-stand-alone -v cpp_code.cpp
  • 25. Compile Command mkoctfile -link-stand-alone -v my_file.cpp g++ -c -fPIC -I/usr/include/octave-3.4.3/octave/.. - I/usr/include/octave-3.4.3/octave -I/usr/include/freetype2 -O2 - g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions - fstack-protector --param=ssp-buffer-size=4 -m64 - mtune=generic my_file.cpp -o my_file.o g++ -shared -Wl,-Bsymbolic -o my_file.oct my_file.o -link- stand-alone -L/usr/lib64/octave/3.4.3 -L/usr/lib64 -loctinterp - loctave -lcruft -L/usr/lib64/atlas -llapack -L/usr/lib64/atlas - lf77blas -latlas -lfftw3 -lfftw3f -lm -L/usr/lib/gcc/x86_64-redhat- linux/4.4.6 -L/usr/lib/gcc/x86_64-redhat- linux/4.4.6/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 - L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../.. -lgfortranbegin - lgfortran -lm *
  • 26. Compile Command g++ -Wall -m64 -I${PROJ_HOME}/octave -I${PROJ_HOME}/c -I${PROJ_HOME}/sim -I/usr/include/octave-3.4.3/octave/.. -I/usr/include/octave-3.4.3/octave -I/usr/include/freetype2 -L${PROJ_HOME}/sim -L/usr/lib64/octave/3.4.3 -L/usr/lib64 -L/usr/lib64/atlas -L/usr/lib/gcc/x86_64-redhat-linux/4.4.6 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.4.6/../../.. -Wl,-rpath -Wl,/usr/lib64/octave/3.4.3 -loctinterp -loctave -lcruft -llapack -lf77blas -latlas -lfftw3 -lfftw3f -lreadline -lm -lgfortranbegin -lgfortran -shared -fPIC -o libcpp_oct.so ${PROJ_HOME}/c/amiq_fft256_c_oct_container.cpp *
  • 27. Running You can compile and run simulations with any of the 3 major EDA vendors simulators: • irun (Cadence) and vcs (Synopsys): include the shared library at compile time • vlog/vsim (Mentor): include the shared library at run time TIP: If you run into errors related to octave main() calls, the macro call "OCTINTERP_API" from "octave.h" library file has to be removed. *
  • 28. Success!!! UVM_INFO @ 0 [AMIQ_HELLO_WORLD]: Hello world from SV file [AMIQ_HELLO_WORLD]: Hello world from C file [AMIQ_HELLO_WORLD]: Hello world from C++ file [AMIQ_HELLO_WORLD]: Hello world from Octave file *
  • 29. Octave Data Types Special Octave types: • octave_value_list (generic type) • RowVector • ColumnVector • Matrix • DiagMatrix • etc. *
  • 30. How to Pass Data to/from DPI-C *direction is relative to System Verilog argument * System Verilog C (input*) C (output/inout*) byte char char* string const char* char** real double double* bit unsigned char unsigned char logic unsigned char unsigned char* int int int* shortreal float float* open array [] const svOpenArrayHandler svOpenArrayHandler
  • 31. Recap • What is Octave • How to install Octave • How to test Octave • How to create a SV-Octave bridge • How to compile and run a simulation *
  • 32. Case study I SV – SHA 3 – Octave *
  • 34. DUT *
  • 35. What is SHA-3/Keccak? SHA-3 is: • a cryptographic hash function • a subset of the cryptographic primitive family Keccak • an alternative to SHA-1 and SHA-2 which in theory are vulnerable *
  • 39. Implementation Effort * System Verilog Octave Number of code lines 223 132 Implementation time 1 day 1 day Debug time 2 days 1 day
  • 40. Why did we pushed forward? • Keccak deals mainly with matrix operations • System Verilog is optimized to work with multi-dimension arrays • Things could be different for other types of functions TIP: A simple multiplication of two matrixes takes 9.32 ms for the Octave computation and context switch, while the same operation takes 8.27 ms in SV. *
  • 41. Case study II SV – DSP functions – Octave *
  • 43. DSP Functions We Used • FFT or Fast Fourier Transform • DCT or Discrete Cosine Transform • FIR or Finite Impulse Response filter • Convolution *
  • 44. 0 10 20 30 40 50 60 FFT with optimization FFT without optimization DCT with optimization DCT without optimization FIR with optimization FIR without optimization Convolution with optimization Convolution without optimization Duration(s) SV Duration Octave duration Performance – Simulator 1 *
  • 45. Performance – Simulator 2 * 0 10 20 30 40 50 60 FFT with optimization FFT without optimization DCT with optimization DCT without optimization FIR with optimization FIR without optimization Convolution with optimization Convolution without optimization Duration(s) SV Duration Octave duration
  • 46. Performance – Simulator 3 * 0 10 20 30 40 50 60 FFT with optimization FFT without optimization DCT with optimization DCT without optimization FIR with optimization FIR without optimization Convolution with optimization Convolution without optimization Duration(s) SV Duration Octave duration
  • 47. Implementation Effort * System Verilog Octave FFT Number of code lines 30 3 Implementation time 1 day 0,5 days Debug time 1 day 0,5 days DCT Number of code lines 19 3 Implementation time 1 day 0,5 days Debug time 1 day 0,5 days FIR Number of code lines 21 3 Implementation time 1 day 0,5 days Debug time 1 day 0,5 days Convolution Number of code lines 12 3 Implementation time 1 day 0,5 days Debug time 1 day 0,5 days
  • 48. Case study III SV – DSP functions – SystemC *
  • 50. What is SystemC? • a C++ library • provides an event-driven simulation interface • supports system level design • inherits all C++ features • adds new data types • fixed point computation *
  • 51. SystemC Specific Data Types * System Verilog SystemC bit, logic, reg wire bool, sc_bit, sc_logic bit, logic, reg, wire vector sc_bv, sc_lv, sc_int, sc_uint integer, int [unsigned] [unsigned] int real, shortreal double/float byte [unsigned] [unsigned] char enum Enum struct Struct - sc_fixed, sc_ufixed
  • 54. Implementation Effort * System Verilog SystemC FFT Number of code lines 30 37 Implementation time 2 days 1 day Debug time 4 days 3 days DCT Number of code lines 20 20 Implementation time 1 day 1 day Debug time 2 days 2 days FIR Number of code lines 13 16 Implementation time 1 day 1 day Debug time 2 days 2 days Convolution Number of code lines 23 21 Implementation time 1 day 1 day Debug time 1 day 1 day
  • 55. Conclusions Both Octave and SystemC can offer: • greater performance • lower implementation • lower debug time *
  • 56. Conclusions • SV is better when multi-dimensional vectors are involved • Octave is better for particular functions (e.g. FFT, DCT, Convolution or FIR), but language context switch comes at a cost (~2.3 ms/call) • SystemC can help you if you miss Octave fixed point libraries *
  • 57. Q&A *