SUAVE Tutorial: Peter Ashenden March 1999SUAVE: VHDL Extensionsfor System-Level ModelingPeter J. AshendenDept Computer ScienceUniversity of Adelaide, Australiapetera@cs.adelaide.edu.auwww.cs.adelaide.edu.au/~peteraMarch 1999In a Nutshell ...• VHDL is a standard hardware descriptionlanguage, and is good for– register transfer level and behavioral modeling– structural modeling• SUAVE makes it better!– at what it’s already good for– and for modeling large complex systems• SAVANT and University of AdelaideVHDL Extensions– SAVANT: Standard Analyzer of VHDL Applicationsfor Next-generation Technology•Phil Wilsey, U. CincinnatiSUAVE Tutorial: Peter Ashenden - March 1999 21SUAVE Tutorial: Peter Ashenden March 1999Current Design FlowsASICVHDL VITALRequirements Detailed RTL gate? SynthSpecification Design model netlistFPGASimulation Simulation 4TestBenchSUAVE Tutorial: Peter Ashenden - March 1999 3Future Design FlowsRequirements TestTestSpecification BenchSystem Design/codeDesign Synths/wmodelCosimulationCosimulation//SystemSystem Partition Simulation 4Formal ProofmodelASICsh/wDesign/Perf. RTLmodelSynth modelAnalysisFPGASUAVE Tutorial: Peter Ashenden - March 1999 42SUAVE Tutorial: Peter Ashenden March 1999High-Level Modeling• System-level models– describe behavior of complex systems at a highlevel of abstraction• Test benches– manage complex data sets and test sequences• It’s really software engineering!SUAVE Tutorial: Peter ...
Peter J. Ashenden Dept Computer Science University of Adelaide, Australia petera@cs.adelaide.edu.au www.cs.adelaide.edu.au/~petera March 1999
In a Nutshell ... VHDL is a standard hardware description language, and is good for – register transfer level and behavioral modeling – structural modeling SUAVE makes it better! – at what it’s already good for – and for modeling large complex systems SAVANT andUniversity ofAdelaide VHDLExtensions – SAVANT:StandardAnalyzer ofVHDLApplications forNext-generationTechnology Phil Wilsey, U. Cincinnati SUAVE Tutorial: Peter Ashenden - March 1999
2
March 1999
1
SUAVE Tutorial: Peter Ashenden
Current Design Flows
VHDL VITALASIC RSepqeuciifriecamtieonnts?DesitganiledeDdoleRLTmSynthnliettetgsa FPGA Simulation Simulation✔ Test Bench
SUAVE Tutorial: Peter Ashenden - March 1999
3
Future Design Flows RequirementsTest SpecificationBench System Design/ Designs/wSynthcode model SmysotdeemlnniiooatuliPmaSitrtlaaltiPFsiomrumon/oCorfo✔ ASICs Perf.h/wDesign/ model RTL Analysis Synthmodel FPGA
SUAVE Tutorial: Peter Ashenden - March 1999
4
March 1999
2
SUAVE Tutorial: Peter Ashenden
High-Level Modeling System-level models – describe behavior of complex systems at a high level of abstraction Test benches – manage complex data sets and test sequences It’s really software engineering!
SUAVE Tutorial: Peter Ashenden - March 1999
High-Level Modeling Support Need abstract data types (ADTs) to manage complexity – VHDL has poor encapsulation Need inheritance to classify abstractions and for re-use – object-oriented methods – VHDL has no form of inheritance Need late binding to support evolution – VHDL only has ad-hoc polymorphism subprogram overloading
SUAVE Tutorial: Peter Ashenden - March 1999
5
6
March 1999
3
SUAVE Tutorial: Peter Ashenden
High-Level Modeling Support Need type-based genericity for re-use – VHDL only has constant-based genericity Need dynamic process creation to model dynamic reactive systems – VHDL only has static process creation Need abstract communication – VHDL communication is via “hardware” signals
SUAVE Tutorial: Peter Ashenden - March 1999
SUAVE Extensions SUAVE adds – secure ADTs: private types and private parts in packages – OO features: tagged types, type extension, inheritance, class-wide polymorphic types – type generics – generic packages and subprograms – channels and message passing – process declarations and instantiation The ADT, OO and generic extensions are based on ADA-95 – integrated cleanly into VHDL SUAVE Tutorial: Peter Ashenden - March 1999
7
8
March 1999
4
SUAVE Tutorial: Peter Ashenden
Language Design Principles Simplicity of mechanism Orthogonality of mechanism – with clearly defined interactions Integration with existing – semantic mechanisms – syntax – language philosophies
SUAVE Tutorial: Peter Ashenden - March 1999
Agenda
ADTs – private types and private parts in packages OO features – inheritance, tagged types, type extension, class-wide polymorphic types Type generics Generic packages and subprograms Communication – channels and message passing Processes – declarations and instantiation SUAVE Tutorial: Peter Ashenden - March 1999
9
10
March 1999
5
SUAVE Tutorial: Peter Ashenden
Abstract Data Types (ADTs) Key mechanism for managing complexity Consists of – encapsulated data type – visible set of operations ADT user can only manipulate data with the public operations – secure, prevents inadvertent corruption of state VHDL mechanism – type and operations declared in a package – operations implemented in the package body –type details can’t be hidden! SUAVE Tutorial: Peter Ashenden - March 1999
Package Example package_quetestuesis uset.krow.stseall; constantmax size : positive := 100; _ typequeue_arrayis array(0tomax_size 1)oftest; typequeueis record head, tail : naturalrange0tomax_size 1; size : naturalrange0tomax_size; the_buffer : queue_array; end recordqueue; functionis_empty ( Q : queue )returnboolean; function : queue )_ (returnboolean; is full Q procedureadd ( Q :inoutqueue; item :intest ); procedureremove ( Q :inout :queue; itemouttest ); end packageq_eueu;stest
SUAVE Tutorial: Peter Ashenden - March 1999
11
12
March 1999
6
SUAVE Tutorial: Peter Ashenden
Package Example use.seuwk.orstteue_qall; variableinit_test_queue : test_queues.queue; if notis_full ( init_test_queue )then add ( init test_queue, next_test ); _ end if; _ t_q 42; init tes ueue.size :=
SUAVE Tutorial: Peter Ashenden - March 1999
13
Private Types/Private Parts SUAVE strengthens encapsulation for ADTs Private types in packages – ADT user knows type name, but not details – declared using reserved wordprivate Private part in package declarations – delimits publicly visible from hidden aspects – separated by reserved wordprivate – allows analyzer to know sufficient details of private types to allocate storage
SUAVE Tutorial: Peter Ashenden - March 1999
14
March 1999
7
SUAVE Tutorial: Peter Ashenden
Secure ADT Example packagetest_q ueuesis use.stset.krowall; typequeueis private; functionis empty ( Q : queue )returnboolean; _ ... private constantmax_size : positive := 100; typequeue_arrayis array(0tomax_size 1)oftest; typequeueis record head, tail : naturalrange0tomax_size 1; size : naturalrange0tomax_size; th _ q _array; e buffer : ueue end recordqueue; end packageettsq_eueu;s
SUAVE Tutorial: Peter Ashenden - March 1999
15
Limited Private Types Normal private types have predefined assignment and (in)equality operations – element-wise copy/comparison – may not be appropriate, eg for pointer-based types Alimited private type – cannot be assigned by ADT user – does not have predefined (in)equality – ADT can define them if appropriate Private type containing a pointer must say so – use reserved wordaccessin declaration – prevents use as type of signals SUAVE Tutorial: Peter Ashenden - March 1999
16
March 1999
8
SUAVE Tutorial: Peter Ashenden
Limited Private Type Example packagetest_uqueseis uses.sttek.wroall; typequeueis limited access private; constantempty_queue : queue; procedurecopy ( from_Q :inqueue; to_Q :inoutqueue ); impurefunction=( L, R :inqueue )returnboolean; impurefunction/=( L, R :inqueue )returnboolean; ... private ... end packagetest queues; _
SUAVE Tutorial: Peter Ashenden - March 1999
Limited Private Type Example packageettsues_queis ... private typequeue_element; typequeue_ptris accessqueue_element; typequeue_elementis record _ ; the test : test next_element, prev_element : queue_ptr; end recordqueue_element; typequeueis record head, tail : queue_ptr; end recordqueue; constantempty_queue : queue := queue(’null,null); end packageteseuest_qu; SUAVE Tutorial: Peter Ashenden - March 1999
17
18
March 1999
9
SUAVE Tutorial: Peter Ashenden
Limited Private Type Example usework.test queues.all; _ variabletest_queue_1, test_queue_2 : test_queues.queue; _queue_1 /= empty_queuethen iftest copy ( from_Q => test_queue_ , _ test_queue_2 ); 1 to Q => end if;
SUAVE Tutorial: Peter Ashenden - March 1999
Lightweight Packages Currently packages are design units in VHDL SUAVE allows packages to be declared in any declarative part – eg, inside entities, architectures, process, subprograms, other packages Package declaration and body must appear in the same declarative region Allows local ADTs Like class definitions in C++
SUAVE Tutorial: Peter Ashenden - March 1999
19
20
March 1999
10
SUAVE Tutorial: Peter Ashenden
Package Example architecturebehavioralofmicrocontrolleris packagewordsis typewordisrange0to2**16 1; function+( L, R :inword )returnword; end packagewords; package bodywordsis function+( L, R :inword )returnwordis begin return(L + R)mod2**16; end function+; end package bodywords; SUAVE Tutorial: Peter Ashenden - March 1999
Package Example usewords.all; signals : word; begin ... end architectureorvi;alaheb