SCV in User Forum Japan 2003

Similar documents
SystemC H2’2000 Accomplishments

SystemC 2.0を用いた簡易CPUバスモデルの設計

SystemC言語概論

EDSF2006_ PDF

設計現場からの課題抽出と提言 なぜ開発は遅れるか?その解決策は?

Verilog HDL による回路設計記述

Microsoft Word J.^...O.|Word.i10...j.doc

デザインパフォーマンス向上のためのHDLコーディング法

ATLAS 2011/3/25-26

Avalon Memory-Mappedブリッジ

Condition DAQ condition condition 2 3 XML key value

論理設計の基礎

starc_verilog_hdl pptx

A Responsive Processor for Parallel/Distributed Real-time Processing

PowerPoint Presentation

untitled

/ / SeamlessCVE

VHDL

Copyright c 2008 Zhenjiang Hu, All Right Reserved.

ex01.dvi

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

スライド 1

VHDL VHDL VHDL i

Nios® II HAL API を使用したソフトウェア・サンプル集 「Modular Scatter-Gather DMA Core」

mbed_library_study_meeting_v1.0.key

1.ppt

FPGAメモリおよび定数のインシステム・アップデート

組込みシステムシンポジウム2011 Embedded Systems Symposium 2011 ESS /10/20 FPGA Android Android Java FPGA Java FPGA Dalvik VM Intel Atom FPGA PCI Express DM

ex01.dvi

スライド 1

DAシンポ2003_SLD研_発表原稿

Core1 FabScalar VerilogHDL Cache Cache FabScalar 1 CoreConnect[2] Wishbone[3] AMBA[4] AMBA 1 AMBA ARM L2 AMBA2.0 AMBA2.0 FabScalar AHB APB AHB AMBA2.0

if clear = 1 then Q <= " "; elsif we = 1 then Q <= D; end rtl; regs.vhdl clk 0 1 rst clear we Write Enable we 1 we 0 if clk 1 Q if rst =

XAPP858 - High-Performance DDR2 SDRAM Interface In Virtex-5 Devices

PLDとFPGA

Design at a higher level

CM1-GTX

strtok-count.eps

IP L09( Tue) : Time-stamp: Tue 14:52 JST hig TCP/IP. IP,,,. ( ) L09 IP (2017) 1 / 28

Quartus II ハンドブック Volume 5、セクションIV. マルチプロセッサの調整

SystemC 2.1 新機能と TLM 動向 2006 年 1 月 27 日 JEITA EDA 技術専門委員会標準化小委員会 SystemC タスクグループ Copyright JEITA, All rights reserved 1

第5回お試しアカウント付き並列プログラミング講習会

Microsoft PowerPoint - 01_Vengineer.ppt


Makefile, TCPソケットサーバ, コマンドライン引数

untitled

joho07-1.ppt

DELPHINUS EQUULEUS 2019 NASA SLS FPGA ( ) DELPHINUS 2

! 行行 CPUDSP PPESPECell/B.E. CPUGPU 行行 SIMD [SSE, AltiVec] 用 HPC CPUDSP PPESPE (Cell/B.E.) SPE CPUGPU GPU CPU DSP DSP PPE SPE SPE CPU DSP SPE 2

Stratix IIIデバイスの外部メモリ・インタフェース

tutorial_lc.dvi

「FPGAを用いたプロセッサ検証システムの製作」

エラー処理・分割コンパイル・コマンドライン引数

Cisco Aironet 1130AG アクセス ポイント クイック スタート ガイド

橡CoreTechAS_HighAvailability.PDF

WinDriver PCI Quick Start Guide

Power Calculator

ネットリストおよびフィジカル・シンセシスの最適化

main.dvi

2.5. Verilog 19 Z= X + Y - Z A+B LD ADD SUB ST (X<<1)+(Y<<1) X 1 2 LD SL ST 2 10

HardCopy IIIデバイスの外部メモリ・インタフェース

IEEE Std の要約

FreeBSD 1

Slide 1

N Express5800/R320a-E4 N Express5800/R320a-M4 ユーザーズガイド

Express5800/R320a-E4, Express5800/R320b-M4ユーザーズガイド

r07.dvi

Express5800/320Fc-MR

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

ohp07.dvi

BIST LSI LSI LSI (DDP) BIST Ring-STP (BIST) BIST LSI e-shuttle 65nm 12Layer CMOS Cadence Verilog-XL 100MHz 16M Packet/sec LSI 5 1 BIST i

Unconventional HDL Programming ( version) 1

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

SERVIS Multi

/

WinHPC ppt

BW BW

Vol. 42 No. 4 Apr VC 2 VC 4 VC VC 4 Recover-x Performance Evaluation of Adaptive Routers Based on the Number of Virtual Channels and Operating F

Express5800/R320a-E4/Express5800/R320b-M4ユーザーズガイド

CDR1000_J

ワイヤレス~イーサネットレシーバー UWTC-REC3

untitled

プロセッサ・アーキテクチャ

ohp1.dvi

SE-800 INSTRUCTION BOOK


スライド 1

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

自動シャットタ<3099>ウンクイックインストールカ<3099>イト<3099>.indb

EDSF2008.ppt

Xilinx XAPP485 Spartan-3E FPGA における最大レート 666Mbps でのデシリアライズ、アプリケーション ノート

programmingII2019-v01

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

IT 2


HDL Designer Series SupportNet GUI HDL Designer Series HDL Desi

etrust Access Control etrust Access Control UNIX(Linux, Windows) 2

"CAS を利用した Single Sign On 環境の構築"

2. IEC61508 ISO WD IEC6150 SIL( Safety Integrity Level ) ISO WD2626 ASIL( Automotive Safety Integrity Level ) SIL/ASIL (tolerable risk) (Residu

Transcription:

Open SystemC Initiative (OSCI) SystemC - The SystemC Verification Standard (SCV) - Stuart Swan & Cadence Design Systems, Inc.

Q0 Q1 Q2 Q3 Q4 Q5 2

SystemC Q0 Q1 Q2 Q3 Q4 Q5 3

Verification Working Group (VWG), ST, Motorola 2001 6 SystemC SystemC SystemC API (Formal Verification) etc. ARM, Elixent,, Infineon, Motorola, Philips Axys, Cadence, Forte, Synopsys Chemnitz, Tübingen 4

SystemC Verification Standard (SCV) OSCI SCV 1.0 TestBuilder(Cadence), QuickBench(Forte) OSCI WEB SCV 1.0 2002 12 SCV 1.0 SCV 1.0 SystemC 2.12003 4 SCV SCV (Temporal Expressions) 5

SCV 1.0 (Data Introspection) C/C++ Verilog PLI PLI Verilog (module, signal, event etc.) Randomization (Weighted randomization) (Constrained randomization) Sparse Array API PLI, VPI, VHDI SCV 1.0 IP 6

SystemC 2.0 SystemC SCV SCV C++ SystemC Standard Channels for Various MOCs Kahn Process Networks Static Dataflow, etc. Core Language Modules Ports Processes Interfaces Channels Events Add-On Libraries Verification Standard Library etc. Elementary Channels Signal, Clock, Mutex, Semaphore, Fifo, etc. Data Types Logic Type (01XZ) Logic Vectors Bits and Bit Vectors Arbitrary Precision Integers Fixed Point Numbers C++ Built-In Types (int, char, double, etc.) C++ User-Defined Types C++ Language Standard (C++) (SystemC) (SystemC) (SystemC) FIFO etc. (SystemC) (SystemC 2.1) (associative array) etc. (C++ STL) HDL Co-Sim (SystemC / EDA vendors) 7

SystemC CPU / Bus Master DSP / Bus Master Monitor Bus Arbiter FastMem / Slave SlowMem / Slave HW Accel / Slave ( ) Read: Addr: 0xFF12 Data: 0x0123 Write: Addr: 0xFF14 Data: 0xBEEF SystemC Simple Bus 8

SystemC SystemC SW(C/C++) 9

(Transactors) Abstract or TLM Transactor Transactor test transactor design 10

SystemC class transactor_if : public virtual sc_interface { public: virtual int read ( unsigned addr ) = 0; }; class transactor : public design_ports, public transactor_if { public: int read ( unsigned addr ) { wait ( clk.posedge_event() ) return data; } }; class design_ports : public sc_module { public: sc_in < bool > clk; sc_inout < sc_int<48> > data; }; test transactor design 11

SCV (RAND, RAND32, RAND48, CUSTOM) (RANDOM, SCAN, RANDOM_AVOID_DUPLICATE) 12

( ) ( ) scv_smart_ptr<int> p; p->keep_only(0,100); p->keep_out(3,98); p->next(); 0 1 2 3 4 98 99 100 ( p->set_mode(random)) RANDOM : SCAN : RANDOM_AVOID_DUPLICATE : DISTRIBUTION scv_bag<> 13

scv_bag<int> dist; dist.add(0,15); dist.add(1,8); dist.add(2,4); dist.add(3,2); dist.add(4,1); = 15/(15+8+4+2+1) = 50% scv_smart_ptr<int> p; p->set_mode(dist); p->next(); 0 1 2 3 4 5 14

#2 scv_bag<pair<int, int> > dist; dist.add(pair<int,int>(1,3), 100); dist.add(pair<int,int>(4, 10), 30); dist.add(pair<int,int>(11, 20), 20); dist.add(pair<int,int>(21, 80), 80); scv_smart_ptr<int> p; p->set_mode(dist); p->next(); 0 10 20 30 40 50 15

class packet_t { sc_uint<8> src; sc_uint<8> dest; sc_uint<32> data[8]; } // scv_smart_ptr < packet_t > p ; p->next( ); // src scv_smart_ptr < packet_t > p ; p->src.disable_randomization(); p->next( ); // my_constraint c( constraint ); c.p->next( ); 1 4 2 3 5 // new_constraint c( constraint ); c.p->next( ); 7 // class my_constraint : public scv_constraint_base { public: scv_smart_ptr < packet_t > p ; SCV_CONSTRAINT_CTOR( my_constraint ) { SCV_CONSTRAINT ( p -> src ( )!= p -> dest ( ) ); for ( int i = 0; i < 8 ; ++ i ) SCV_CONSTRAINT ( p -> data [ i ]() < 10 ); } }; // my_constraint 6 class new_constraint : public my_constraint { public: SCV_CONSTRAINT_CTOR( new_constraint ) { SCV_CONSTRAINT_BASE( my_constraint ) SCV_CONSTRAINT ( p -> data [ 0 ]()!= p -> data [ 1 ]() ); } }; 16

(scv_tr_db, scv_tr_stream, scv_tr_generator) ; ; ( ) ASCII () read : addr : 0xFF data : 0xabcd read : addr : 0xFE data : 0x1234 addr : 0xFF addr : 0xFE data : 0xabcd data : 0x1234 17

API scv_tr_db scv_tr_stream scv_tr_generator scv_tr_handle 18

examples/overview int sc_main (int argc, char *argv[]) { scv_tr_db db("my_db"); scv_tr_db::set_default_db(&db); class rw_pipelined_transactor : { scv_tr_stream pipelined_stream; scv_tr_stream addr_stream; scv_tr_stream data_stream; scv_tr_generator<sc_uint<8>, sc_uint<8> > read_gen; scv_tr_generator<sc_uint<8> > addr_gen; scv_tr_generator<sc_uint<8> > data_gen; public: rw_pipelined_transactor(sc_module_name nm) : pipelined_stream("pipelined_stream", "transactor"), addr_stream("addr_stream", "transactor"), data_stream("data_stream", "transactor"), read_gen("read",pipelined_stream,"addr","data"), addr_gen("addr",addr_stream,"addr"), data_gen("data",data_stream,"data") {} virtual data_t read(const addr_t* p_addr); }; rw_pipelined_transactor::read(const rw_task_if::addr_t* addr) { addr_phase.lock(); scv_tr_handle h = read_gen.begin_transaction(*addr); scv_tr_handle h1 = addr_gen.begin_transaction(*addr,"addr_phase",h); h1.record_attribute("osci", 777); // <- Added wait(clk->posedge_event()); bus_addr = *addr; addr_req = 1; wait(addr_ack->posedge_event()); wait(clk->negedge_event()); addr_req = 0; wait(addr_ack->negedge_event()); addr_gen.end_transaction(h1); addr_phase.unlock(); data_phase.lock(); scv_tr_handle h2 = data_gen.begin_transaction("data_phase",h); h2.add_relation("related address phase", h1); // <- Added wait(data_rdy->posedge_event()); data_t data = bus_data.read(); wait(data_rdy->negedge_event()); data_gen.end_transaction(h2); read_gen.end_transaction(h,data); data_phase.unlock(); return data; } 19

#2 examples/overview scv_tr_stream (ID 1, name "pipelined_stream", ) scv_tr_stream (ID 2, name "addr_stream", ) scv_tr_stream (ID 3, name "data_stream", ) scv_tr_generator (ID 4, name "read", scv_tr_stream 1, begin_attribute (ID 0, name "addr", type "UNSIGNED") end_attribute (ID 1, name "data", type "UNSIGNED") ) scv_tr_generator (ID 6, name "addr", scv_tr_stream 2, begin_attribute (ID 0, name "addr", type "UNSIGNED") ) scv_tr_generator (ID 7, name "data", scv_tr_stream 3, begin_attribute (ID 0, name "data", type "UNSIGNED") ) tx_begin 1 4 0 s tx_begin 2 6 0 s tx_relation "addr_phase" 2 1 tx_record_attribute 2 "OSCI" INTEGER = 777 tx_end 2 6 200 ns tx_begin 3 7 200 ns tx_relation "data_phase" 3 1 tx_relation "Related address phase" 3 2 tx_end 3 7 420 ns tx_end 1 4 420 ns my_db rw_pipelined_transactor::read(const rw_task_if::addr_t* addr) { addr_phase.lock(); 0 200 420 [ns] scv_tr_handle h = read_gen.begin_transaction(*addr); } scv_tr_handle h1 = addr_gen.begin_transaction(*addr,"addr_phase",h); piplelined h1.record_attribute("osci", 777); read// <- Added wait(clk->posedge_event()); stream bus_addr = *addr; addr_req = 1; wait(addr_ack->posedge_event()); wait(clk->negedge_event()); addr Addr addr_req = 0; stream OSCI = 777 wait(addr_ack->negedge_event()); addr_gen.end_transaction(h1); addr_phase.unlock(); data data data_phase.lock(); scv_tr_handle stream h2 = data_gen.begin_transaction("data_phase",h); h2.add_relation("related address phase", h1); // <- Added wait(data_rdy->posedge_event()); data_t data = bus_data.read(); wait(data_rdy->negedge_event()); data_gen.end_transaction(h2); tx_(begin) (end) <TransID> <GenID> <Time> read_gen.end_transaction(h,data); data_phase.unlock(); tx_relation RelName <TransID#1> <TransID#2> return tx_record_addtibute data; <TransID> AttName <Value> 20

SCV 1 = SystemC = SystemC or HDL (Abstract or TLM) High->Low SysC TLM or RTL HDL Low->High 2 TLM (Validation) Tr->Sig RTL HDL Sig->Tr 21

TLM RTL 22

SystemC? 23

SCV SystemC http://www.systemc.org SystemC SCV!! SystemC SystemC SystemC Primer ( ) C++ http://www.testbuilder-jp.com/inno/tu/cpp/p1.html SystemC http://www.testbuilder-jp.com/inno/tu/sysc/index.html 24