CPE 626 The SystemC Language Aleksandar Milenkovic Web:http://www.ece.uah.edu/~milenkahttp://www.ece.uah.edu/~milenka.

Slides:



Advertisements
Similar presentations
Simulation executable (simv)
Advertisements

Verilog Intro: Part 1.
High Level Languages: A Comparison By Joel Best. 2 Sources The Challenges of Synthesizing Hardware from C-Like Languages  by Stephen A. Edwards High-Level.
Chapter 3 : Combination and Sequential Circuits Modeling.
Copyright 2001, Agrawal & BushnellDay-1 PM Lecture 4a1 Design for Testability Theory and Practice Lecture 4a: Simulation n What is simulation? n Design.
Chapter 4 : Simulation and Debugging. Original Monitor Module Problem Text are hard to read Undesired changes In file: c:\temp\systemc \src\systemc\kernel\sc_object.cpp:217.
Reconfigurable Computing S. Reda, Brown University Reconfigurable Computing (EN2911X, Fall07) Lecture 15: SystemC (3/3) Prof. Sherief Reda Division of.
VHDL Intro What does VHDL stand for? VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuit Developed in 1982 by Govt. to standardize.
VHDL. What is VHDL? VHDL: VHSIC Hardware Description Language  VHSIC: Very High Speed Integrated Circuit 7/2/ R.H.Khade.
Reconfigurable Computing S. Reda, Brown University Reconfigurable Computing (EN2911X, Fall07) Lecture 14: SystemC (2/3) Prof. Sherief Reda Division of.
Overview Logistics Last lecture Today HW5 due today
SystemC: Introduction. SystemC  A C++ based class library and design environment for system-level design.  Suitable for functional description that.
From Scenic to SystemC Mehrdad Abutalebi. Outline Introducing Scenic Scenic Implementation Modeling Reactivity A Simple example From Scenic to SystemC.
1 VERILOG Fundamentals Workshop סמסטר א ' תשע " ה מרצה : משה דורון הפקולטה להנדסה Workshop Objectives: Gain basic understanding of the essential concepts.
ECE 2372 Modern Digital System Design
IAY 0600 Digitaalsüsteemide disain Event-Driven Simulation Alexander Sudnitson Tallinn University of Technology.
SystemC Tutorial Author: Silvio Veloso
SystemC: A Complete Digital System Modeling Language: A Case Study Reni Rambus Inc.
ASIC/FPGA design flow. FPGA Design Flow Detailed (RTL) Design Detailed (RTL) Design Ideas (Specifications) Design Ideas (Specifications) Device Programming.
Synthesis Presented by: Ms. Sangeeta L. Mahaddalkar ME(Microelectronics) Sem II Subject: Subject:ASIC Design and FPGA.
1 H ardware D escription L anguages Modeling Digital Systems.
1 Freeha Azmat Saba Zia Dec 02, Agenda Installation Introduction From Verilog to SystemC Counter as an Example Complete SystemC Modeling 2.
1 An Update on Verilog Ξ – Computer Architecture Lab 28/06/2005 Kypros Constantinides.
Digital System 數位系統 Verilog HDL Ping-Liang Lai (賴秉樑)  
1 Workshop Topics - Outline Workshop 1 - Introduction Workshop 2 - module instantiation Workshop 3 - Lexical conventions Workshop 4 - Value Logic System.
CWRU EECS 317 EECS 317 Computer Design LECTURE 1: The VHDL Adder Instructor: Francis G. Wolff Case Western Reserve University.
1 IMEC / KHBO June 2004 Micro-electronics SystemC Dorine Gevaert.
1 Very Large Scale Integration II - VLSI II SystemC Gürer Özbek ITU VLSI Laboratories Istanbul Technical University.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHSIC Hardware Description Language  Required Reading: –These Slides –VHDL Tutorial  Very High Speed.
Anurag Dwivedi. Basic Block - Gates Gates -> Flip Flops.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
Winter-Spring 2001Codesign of Embedded Systems1 Debug and Trace Facilities in SystemC Part of HW/SW Codesign of Embedded Systems Course (CE )
M. Balakrishnan Dept of Computer Science & Engg. I.I.T. Delhi
(1) Basic Language Concepts © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
1 Hardware description languages: introduction intellectual property (IP) introduction to VHDL and Verilog entities and architectural bodies behavioral,
Introduction to VHDL Simulation … Synthesis …. The digital design process… Initial specification Block diagram Final product Circuit equations Logic design.
CPE 626 The SystemC Language – VHDL, Verilog Designer’s Guide Aleksandar Milenkovic Web:
CPE 626 The SystemC Language Aleksandar Milenkovic Web:
Introduction to ASIC flow and Verilog HDL
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Introduction to Verilog. Data Types A wire specifies a combinational signal. – Think of it as an actual wire. A reg (register) holds a value. – A reg.
Apr. 3, 2000Systems Architecture I1 Introduction to VHDL (CS 570) Jeremy R. Johnson Wed. Nov. 8, 2000.
IAY 0600 Digital Systems Design Event-Driven Simulation VHDL Discussion Alexander Sudnitson Tallinn University of Technology.
May 9, 2001Systems Architecture I1 Systems Architecture I (CS ) Lab 5: Introduction to VHDL Jeremy R. Johnson May 9, 2001.
Verilog Intro: Part 1. Hardware Description Languages A Hardware Description Language (HDL) is a language used to describe a digital system, for example,
Introduction to Verilog. Structure of a Verilog Program A Verilog program is structured as a set of modules, which may represent anything from a collection.
CIS 4930/6930 System-on-Chip Design Dr. Hao Zheng Comp. Sci & Eng. U of South Florida.
1 of 14 Ivan Ukhov Embedded Systems Laboratory Department of Computer and Information Science Linköping University TDDI08: Embedded Systems Design Introduction.
1 Introduction to Engineering Spring 2007 Lecture 18: Digital Tools 2.
Hardware Description Languages: Verilog
Basic Language Concepts
Systems Architecture Lab: Introduction to VHDL
CPE 626 The SystemC Language
Behavioral Style Combinational Design with VHDL
IAY 0600 Digital Systems Design
VLSI Testing Lecture 5: Logic Simulation
VLSI Testing Lecture 5: Logic Simulation
Vishwani D. Agrawal Department of ECE, Auburn University
Behavioral Style Combinational Design with VHDL
Hardware Description Languages: Verilog
SystemC for SoC Designs
Design Flow System Level
Introduction to Verilog
VHDL VHSIC Hardware Description Language VHSIC
IAS 0600 Digital Systems Design
VHDL Introduction.
IAS 0600 Digital Systems Design
The Verilog Hardware Description Language
Chapter 1 : SystemC Overview
CPE 626 The SystemC Language
Presentation transcript:

CPE 626 The SystemC Language Aleksandar Milenkovic Web:

 A. Milenkovic 2 Outline  Introduction  Data Types  Modeling Combinational Logic  Modeling Synchronous Logic  Misc

 A. Milenkovic 3 Introduction  What is SystemC?  Why SystemC?  Design Methodology  Capabilities  SystemC RTL

 A. Milenkovic 4 What is SystemC An extension of C++ enabling modeling of hardware descriptions  SystemC adds a class library to C++  Mechanisms to model system architecture  Concurrency – multiple processes executed concurently  Timed events  Reactive behavior  Constructs to describe hardware  Signals  Modules  Ports  Processes  Simulation kernel

 A. Milenkovic 5 What is SystemC  Provides methodology for describing  System level design  Software algorithms  Hardware architecture  Design Flow  Create a system level model  Explore various algorithms oSimulate to validate model and optimize design  Create executable specifications oHardware team and software team use the same specification Test input files

 A. Milenkovic 6 C++/SystemC Development Environment Compiler Linker Debugger SystemC Class Library and Simulation Kernel Make Simulator executable Run Test input files Source files in SystemC (design + testbenches) Test, log output files

 A. Milenkovic 7 Why SystemC?  Designs become  Bigger in size  Faster in speed  Larger in complexity  Design description on higher levels of abstraction enables  Faster simulation  Hardware/software co-simulation  Architectural Exploration System RTL Chip Slowest Fastest Iteration Time

 A. Milenkovic 8 Why SystemC? SystemC describes overall system  System level design  Describing hardware architectures  Describing software algorithms  Verification  IP exchange

 A. Milenkovic 9 Non-SystemC Design Methodology Write conceptual C/C++ model Verify against specification System Designer To implementation Write testbench Understand specification Partition design Write each block in HDL Reverify Synthesize Write testbenches RTL Designer Hand-over

 A. Milenkovic 10 SystemC Design Methodology Write conceptual C/C++ model Verify against specification System Designer To implementation Write testbench Understand specification Partition design Refine SystemC model to RTL Reverify Synthesize RTL Designer Hand-over Reuse testbench

 A. Milenkovic 11 System Level Design Process System Level model Explore algorithms Verify against specifications Software Refine Timed model Explore architectures Do performance analysis Partition hardware / software RTOS Target code Behavioral model RTL model Hardware Refine - Not synthesizable - Event driven - Abstract data types - Abstract communication -Untimed - Event driven - Synthesizable - Algorithmic description - I/O cycle accurate - Clocked - Synthesizable - FSM - Clocked

 A. Milenkovic 12 SystemC Capabilities  Modules  SC_MODULE class  Processes  SC_METHOD, SC_THREAD  Ports: input, output, inout  Signals  resolved, unresolved  updates after a delta delay  Rich set of data types  2-value, 4-value logic  fixed, arbitrary size  Clocks  built-in notion of clocks  Event-base simulation  Multiple abstraction levels  Communication protocols  Debugging support  Waveform tracing  VCD: Value Change Dump (IEEE Std. 1364)  WIF: Waveform Interch. F.  ISDB: Integrated Signal Data Base  RTL synthesis flow  System and RTL modeling  Software and Hardware

 A. Milenkovic 13 SystemC Half Adder // File half_adder.h #include “systemc.h” SC_MODULE(half_adder) { sc_in a, b; sc_out sum, carry; void prc_half_adder(); SC_CTOR(half_adder) { SC_METHOD(prc_half_adder); sensitive << a << b; } }; // File half_adder.cpp #include “half_adder.h” void half_adder::prc_half_adder() { sum = a ^ b; carry = a & b; }

 A. Milenkovic 14 SystemC Decoder 2/4 // File decoder2by4.h #include “systemc.h” SC_MODULE(decoder2by4) { sc_in enable; sc_in > select; sc_out > z; void prc_decoder2by4(); SC_CTOR(decoder2by4) { SC_METHOD(prc_half_adder); sensitive(enable, select); } }; // File decoder2by4.cpp #include “decoder2by4.h” void decoder2by4::prc_ decoder2by4() { if (enable) { switch(select.read()) { case 0: z=0xE; break; case 1: z=0xD; break; case 2: z=0xB; break; case 3: z=0x7; break; } else z=0xF; } Note: Stream vs. Function notation sensitive << a << b; // Stream notation style sensitive(a, b);// Function notation style

 A. Milenkovic 15 Hierarchy: Building a full adder // File full_adder.h #include “systemc.h” SC_MODULE(full_adder) { sc_in a,b,carry_in; sc_out sum,carry_out; sc_signal c1, s1, c2; void prc_or(); half_adder *ha1_ptr, *ha2_ptr; SC_CTOR(full_adder) { ha1_ptr = new half_adder(“ha1”); ha1_ptr->a(a); ha1_ptr->b(b); ha1_ptr->sum(s1); ha1_ptr->carry(c1); ha2_ptr = new half_adder(“ha2”); (*ha2_ptr)(s1, carry_in,sum,c2); SC_METHOD(prc_or); sensitive << c1 << c2; } // a destructor ~full_adder() { delete ha1_ptr; delete ha2_ptr; } }; // File: full_adder.cpp #include “full_adder.h” void full_adder::prc_or(){ carry_out = c1 | c2; }

 A. Milenkovic 16 Verifying the Functionality: Driver // File driver.h #include “systemc.h” SC_MODULE(driver) { sc_out d_a,d_b,d_cin; void prc_driver(); SC_CTOR(driver) { SC_THREAD(prc_driver); } }; // File: driver.cpp #include “driver.h” void driver::prc_driver(){ sc_uint pattern; pattern=0; while(1) { d_a=pattern[0]; d_b=pattern[1]; d_cin=pattern[2]; wait(5, SC_NS); pattern++; }

 A. Milenkovic 17 Verifying the Functionality: Monitor // File monitor.h #include “systemc.h” SC_MODULE(monitor) { sc_in m_a,m_b,m_cin, m_sum, m_cout; void prc_monitor(); SC_CTOR(monitor) { SC_THREAD(prc_monitor); sensitive << m_a,m_b,m_cin, m_sum, m_cout; } }; // File: monitor.cpp #include “monitor.h” void monitor::prc_monitor(){ cout << “At time “ << sc_time_stamp() << “::”; cout <<“(a,b,carry_in): ”; cout << m_a << m_b << m_cin; cout << “(sum,carry_out): ”; cout << m_sum << m_cout << endl; }

 A. Milenkovic 18 Verifying the Functionality: Main // File full_adder_main.cpp #include “driver.h” #include “monitor.h” #include “full_adder.h” int sc_main(int argc, char * argv[]) { sc_signal t_a, t_b, t_cin, t_sum, t_cout; full_adder f1(“FullAdderWithHalfAdders”); f1 << t_a << t_b << t_cin << t_sum << t_cout; driver d1(“GenWaveforms”); d1.d_a(t_a); d1.d_b(t_b); d1.d_cin(t_cin); monitor m1(“MonitorWaveforms”); m1 << t_a << t_b << t_cin << t_sum << t_cout; sc_start(100, SC_NS); return(0); }

 A. Milenkovic 19 Modeling Combinational Logic  Use SC_METHOD process with an event sensitivity list // File: bist_cell.cpp #include “bist_cell.h” void bist_cell::prc_bist_cell(){ bool s1, s2, s3; s1 = !(b0&d1); s2 = !(d0&b1); s3 = !(s2|s1); s2 = s2&s1; z = !(s2|s3); } // File: bist_cell.cpp #include “bist_cell.h” void bist_cell::prc_bist_cell(){ z = !(!(d0&b1)&!(b0&d1))|! (!(d0&b1)|!(b0&d1))); } // File: bist_cell.h #include “systemc.h” SC_MODULE(bist_cell) { sc_in b0,b1,d0,d1; sc_out z; void prc_bist_cell(); SC_CTOR(bist_cell) { SC_METHOD(prc_bist_cell); sensitive <<b0<<b1<<d0<<d1; }

 A. Milenkovic 20 Modeling Combinational Logic: Local Variables  Local variables in the process (s1, s2, s3) do not synthesize to wires  Hold temporary values (improve readability)  Are assigned values instantaneously (no delta delay) – one variable can represent many wires (s2)  signals and ports are updated after a delta delay  Simulation is likely faster with local variables // File: bist_cell.cpp #include “bist_cell.h” void bist_cell::prc_bist_cell(){ bool s1, s2, s3; s1 = !(b0&d1); s2 = !(d0&b1); s3 = !(s2|s1); s2 = s2&s1; z = !(s2|s3); } // File: bist_cell.cpp #include “bist_cell.h” void bist_cell::prc_bist_cell(){ z = !(!(d0&b1)&!(b0&d1))|! !(d0&b1)&!(b0&d1))); }

 A. Milenkovic 21 Modeling Combinational Logic: Reading and Writing Ports and Signals  Use read() and write() methods for reading and writing values from and to a port or signal // File: xor_gates.cpp #include “xor_gates.h” void bist_cell::prc_xor_gates(){ tap = bre ^ sty; } // File: xor_gates.h #include “systemc.h” SC_MODULE(xor_gates) { sc_in > bre, sty; sc_out > tap; void prc_xor_gates(); SC_CTOR(xor_gates) { SC_METHOD(prc_xor_gates); sensitive << bre << sty; } // File: xor_gates.cpp #include “xor_gates.h” void bist_cell::prc_xor_gates(){ tap = bre.read() ^ sty.read(); }

 A. Milenkovic 22 Modeling Combinational Logic: Logical Operators  ^ - xor  & - and  | - or // File: xor_gates.h #include “systemc.h” const int SIZE=4; SC_MODULE(xor_gates) { sc_in > bre, sty; sc_out > tap; void prc_xor_gates(); SC_CTOR(xor_gates) { SC_METHOD(prc_xor_gates); sensitive << bre << sty; } // File: xor_gates.cpp #include “xor_gates.h” void bist_cell::prc_xor_gates(){ tap = bre.read() ^ sty.read(); }

 A. Milenkovic 23 Modeling Combinational Logic: Arithmetic Operations sc_uint write_addr; sc_int read_addr; read_addr = write_addr + read_addr;  Note: all fixed precision integer type calculations occur on a 64-bit representation and appropriate truncation occurs depending on the target result size  E.g.:  write_addr is zero-extended to 64-bit  read_addr is sign-extended to 64-bit  + is performed on 64-bit data  result is truncated to 5-bit result and assigned back to read_addr

 A. Milenkovic 24 Modeling Combinational Logic: Unsigned Arithmetic // File: u_adder.cpp #include “u_adder.h” void u_adder ::prc_s_adder(){ sum = a.read() + b.read(); } // File: u_adder.h #include “systemc.h” SC_MODULE(u_adder) { sc_in > a, b; sc_out > sum; void prc_u_adder(); SC_CTOR(u_adder) { SC_METHOD(prc_u_adder); sensitive << a << b; } };

 A. Milenkovic 25 Modeling Combinational Logic: Signed Arithmetic // File: s_adder.cpp #include “s_adder.h” void s_adder ::prc_s_adder(){ sum = a.read() + b.read(); } // File: s_adder.h #include “systemc.h” SC_MODULE(s_adder) { sc_in > a, b; sc_out > sum; void prc_s_adder(); SC_CTOR(s_adder) { SC_METHOD(prc_s_adder); sensitive << a << b; } };

 A. Milenkovic 26 Modeling Combinational Logic: Signed Arithmetic (2) // File: s_adder.cpp #include “s_adder_c.h” void s_adder_c::prc_ s_adder_c(){ sc_int temp; temp = a.read() + b.read(); sum = temp.range(3,0); carry_out = temp[4]; } // File: s_adder_c.h #include “systemc.h” SC_MODULE(s_adder_c) { sc_in > a, b; sc_out > sum; sc_out carry_out; void prc_s_adder_c(); SC_CTOR(s_adder_c) { SC_METHOD(prc_s_adder_c); sensitive << a << b; } };

 A. Milenkovic 27 Modeling Combinational Logic: Relational Operators // File: gt.cpp #include “gt.h” void gt::prc_gt(){ sc_int atemp, btemp; atemp = a.read(); btemp = b.read(); z = sc_uint (atemp.range(WIDTH/2-1,0)) > sc_uint (btemp.range(WIDTH-1,WIDTH/2)) } // File: gt.h #include “systemc.h” const WIDTH=8; SC_MODULE(gt) { sc_in > a, b; sc_out z; void prc_gt(); SC_CTOR(gt) { SC_METHOD(prc_gt); sensitive << a << b; } };

 A. Milenkovic 28 Modeling Combinational Logic: Vector and Ranges // Bit or range select of a port // or a signal is not allowed sc_in > data; sc_signal > counter; sc_uint temp; sc_uint cnt_temp; bool mode, preset; mode = data[2]; // not allowed //instead temp = data.read(); mode = temp[2]; counter[4] = preset; // not allowed cnt_temp = counter; cnt_temp[4] = preset; counter = cnt_temp;

 A. Milenkovic 29...

 A. Milenkovic 30 Multiple Processes and Delta Delay // File: mult_proc.h #include “systemc.h” SC_MODULE(mult_proc) { sc_in in; sc_out out; sc_signal c1, c2; void mult_proc1(); void mult_proc2(); void mult_proc3(); SC_CTOR(mult_proc) { SC_METHOD(mult_proc1); sensitive << in; SC_METHOD(mult_proc2); sensitive << c1; SC_METHOD(mult_proc3); sensitive << c2; } }; // File: mult_proc.cpp #include “mult_proc.h” void mult_proc::mult_proc1(){ c1 = !in; } void mult_proc::mult_proc2(){ c2 = !c1; } void mult_proc::mult_proc3(){ out = !c2; }

 A. Milenkovic 31 If Statement // File: simple_alu.h #include “systemc.h” const int WS=4; SC_MODULE(simple_alu) { sc_in > a, b; sc_in ctrl; sc_out > z; void prc_simple_alu(); SC_CTOR(simple_alu) { SC_METHOD(prc_simple_alu); sensitive << a << b << ctrl; } }; // File: simple_alu.cpp #include “simple_alu.h” void simple_alu::prc_simple_alu(){ if(ctrl) z = a.read() & b.read(); else z = a.read() | b.read(); }

 A. Milenkovic 32 If Statement: Priority encoder // File: priority.h #include “systemc.h” const int IS=4; const int OS=3; SC_MODULE(priority) { sc_in > sel; sc_out > z; void prc_priority(); SC_CTOR(priority) { SC_METHOD(prc_priority); sensitive << sel; } }; // File: priority.cpp #include “priority.h” void priority::prc_priority(){ sc_uint tsel; tsel = sel.read(); if(tsel[0])z = 0; else if (tsel[1]) z = 1; else if (tsel[2]) z = 2; else if (tsel[3]) z = 3; else z = 7; }

 A. Milenkovic 33 Switch Statement: ALU // File: alu.h #include “systemc.h” const int WORD=4; enum op_type {add, sub, mul, div}; SC_MODULE(alu) { sc_in > a, b; sc_in op; sc_out > z; void prc_alu(); SC_CTOR(alu) { SC_METHOD(prc_alu); sensitive << a << b << op; } }; // File: alu.cpp #include “alu.h” void priority::prc_alu(){ sc_uint ta, tb; ta = a.read(); tb = b.read(); switch (op) { case add: z = ta+tb; break; case sub: z = ta–tb; break; case mul: z = ta*tb; break; case div: z = ta/tb; break; }

 A. Milenkovic 34 Loops  C++ loops: for, do-while, while  SystemC RTL supports only for loops  For loop iteration must be a compile time constant

 A. Milenkovic 35 Loops: An Example // File: demux.h #include “systemc.h” const int IW=2; const int OW=4; SC_MODULE(demux) { sc_in > a; sc_out > z; void prc_demux(); SC_CTOR(demux) { SC_METHOD(prc_demux); sensitive << a; } }; // File: demux.cpp #include “demux.h” void priority::prc_demux(){ sc_uint j; sc_uint temp; for(j=0; j<OW; j++) if(a==j) temp[j] = 1; else temp[j] = 0; }

 A. Milenkovic 36 Methods  Methods other than SC_METHOD processes can be used in a SystemC RTL

 A. Milenkovic 37 Methods // File: odd1s.h #include “systemc.h” const int SIZE = 6; SC_MODULE(odd1s) { sc_in > data_in; sc_out is_odd; bool isOdd(sc_uint abus); void prc_odd1s(); SC_CTOR(odd1s) { SC_METHOD(prc_odd1s); sensitive << data_in; } }; // File: odd1s.cpp #include “odd1s.h” void odd1s::prc_odd1s(){ is_odd = isOdd(data_in); } bool odd1s:isOdd (sc_uint abus) { bool result; int i; for(i=0; i<SIZE; i++) result = result ^ abus[i]; return(result); }

 A. Milenkovic 38 Modeling Synchronous Logic: Flip-flops // File: dff.h #include “systemc.h” SC_MODULE(dff) { sc_in d, clk; sc_out q; void prc_dff(); SC_CTOR(dff) { SC_METHOD(prc_dff); sensitive_pos << clk; } }; // File: dff.cpp #include “dff.h” void dff::prc_dff(){ q = d; }

 A. Milenkovic 39 Registers // File: reg.h #include “systemc.h” const int WIDTH = 4; SC_MODULE(reg) { sc_in > cstate; sc_in clock; sc_out > nstate; void prc_reg(); SC_CTOR(dff) { SC_METHOD(prc_dff); sensitive_neg << clock; } }; // File: reg.cpp #include “reg.h” void reg::prc_reg(){ cstate = nstate; }

 A. Milenkovic 40 Sequence Detector: “101” // File: sdet.h #include “systemc.h” SC_MODULE(sdet) { sc_in clk, data; sc_out sfound; sc_signal first, second, third; // synchronous logic process void prc_sdet(); // comb logic process void prc_out(); SC_CTOR(sdet) { SC_METHOD(prc_sdet); sensitive_pos << clk; SC_METHOD(prc_out); sensitive << first << second << third; } }; // File: sdet.cpp #include “sdet.h” void sdet::prc_sdet(){ first = data; second = first; third = second } void sdet::prc_out(){ sfound = first & (!second) & third; }

 A. Milenkovic 41 Counter: Up-down, Async Negative Clear // File: cnt4.h #include “systemc.h” const int CSIZE = 4; SC_MODULE(sdet) { sc_in mclk, cl, updown; sc_out > dout; void prc_cnt4(); SC_CTOR(cnt4) { SC_METHOD(prc_cnt4); sensitive_pos << mclk; sensitive_neg << cl; } }; // File: cnt4.cpp #include “cnt4.h” void sdet::prc_cnt4(){ if(!clear) data_out = 0; else if(updown) dout=dout.read()+1; else dout=dout.read()-1; }