Downloaded and integrated latest wiki documentation from the geda website.
[geda-gaf/peter-b.git] / docs / wiki / geda_vams_netlister_readme.html
blob5da308c92bec1b74ab15497504f16faf40ec0092
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
4 lang="en" dir="ltr">
5 <head>
6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7 <title>geda:vams_netlister_readme</title>
8 <meta name="generator" content="DokuWiki Release rc2007-05-24" />
9 <meta name="robots" content="index,follow" />
10 <meta name="date" content="2007-05-24T22:27:24-0400" />
11 <meta name="keywords" content="geda,vams_netlister_readme" />
12 <link rel="search" type="application/opensearchdescription+xml" href="http://geda.seul.org/wiki/lib/exe/opensearch.php" title="geda Wiki" />
13 <link rel="start" href="http://geda.seul.org/wiki/" />
14 <link rel="contents" href="http://geda.seul.org/wiki/geda:vams_netlister_readme?do=index" title="Index" />
15 <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="http://geda.seul.org/wiki/feed.php" />
16 <link rel="alternate" type="application/rss+xml" title="Current Namespace" href="http://geda.seul.org/wiki/feed.php?mode=list&ns=geda" />
17 <link rel="alternate" type="text/html" title="Plain HTML" href="http://geda.seul.org/wiki/_export/xhtml/geda:vams_netlister_readme" />
18 <link rel="alternate" type="text/plain" title="Wiki Markup" href="http://geda.seul.org/wiki/_export/raw/geda:vams_netlister_readme" />
19 <link rel="stylesheet" media="all" type="text/css" href="lib/exe/css" />
20 <link rel="stylesheet" media="screen" type="text/css" href="lib/exe/001css" />
21 <link rel="stylesheet" media="print" type="text/css" href="lib/exe/002css" />
22 </head>
23 <body>
24 <div class="dokuwiki export">
25 <div class="toc">
26 <div class="tocheader toctoggle" id="toc__header">Table of Contents</div>
27 <div id="toc__inside">
29 <ul class="toc">
30 <li class="level1"><div class="li"><span class="li"><a href="#vams_netlister_readme" class="toc">VAMS netlister README</a></span></div>
31 <ul class="toc">
32 <li class="level2"><div class="li"><span class="li"><a href="#vams_netlister" class="toc">VAMS netlister</a></span></div></li>
33 <li class="level2"><div class="li"><span class="li"><a href="#vams_netlister_syntax_architecture" class="toc">VAMS netlister syntax architecture</a></span></div></li>
34 <li class="level2"><div class="li"><span class="li"><a href="#vams_netlister_syntax_entity" class="toc">VAMS netlister syntax entity</a></span></div></li></ul>
35 </li></ul>
36 </div>
37 </div>
41 <h1><a name="vams_netlister_readme" id="vams_netlister_readme">VAMS netlister README</a></h1>
42 <div class="level1">
44 </div>
45 <!-- SECTION "VAMS netlister README" [1-36] -->
46 <h2><a name="vams_netlister" id="vams_netlister">VAMS netlister</a></h2>
47 <div class="level2">
48 <pre class="code">date: 10 october 2000
49 gEDA: gnetlist vams mode
50 first unrevised vams mode documentation
53 Written by: Martin Lehmann
54 -------------------------------------------------------------------------
57 VHDL-AMS support for the gEDA gnetlist tool
58 -------------------------------------------
60 CONTENT:
62 1. functionality
63 1. ARCHITECTURE generation
64 2. ENTITY generation
65 3. automatisate gnetlist calls
67 2. implementation
68 1. the vams mode of gEDA gnetlist
69 1. scheme
70 1. settings and new definition
71 2. gnet-vams.scm
72 1. routines main structure
73 3. helpfully setting in gEDA gschem environment
75 2. new c-code
76 1. routines
77 2. code-adaptation
79 2. automatic generating gnetlist calls in gEDA gschem
80 1. generated gEDA gnetlist calls
81 2. scheme
82 1. generate_netlist.scm
83 2. settings
85 3. new c-code
86 1. routines
87 2. code-adaptation
90 The purpose of our endevour, is that gEDA gnelist completly
91 supportted VHDL-AMS (VHDL Analog and Mixed-Signal) netlist
92 generation.
94 The VHDL-AMS netlist support mode is called vams.
97 1. FUNCTIONALITY
99 gEDA gnetlist in vams mode allow it to generate a VHDL-AMS
100 ARCHITECTURE or an ENTIY declaration. Which of both tasks is
101 performed, dependends on the generate-mode variable. This variable
102 is defined in the gnetlist command or will be set default.
104 If generate-mode=1 (default) gnetlist creates a netlist as an
105 VHDL-AMS ARCHITECTURE of the current schematic. Otherwise
106 (generate-mode=2), it creates an VHDL-AMS ENTITY declaration of the
107 selected component (this task needs information from gEDA gschem,
108 see below).
110 Now follows a stepwise discription of the program run in both
111 submodes.
113 We presuppose that you are familiar with the structure of gEDA
114 gnetlist usage (otherwise try gnetlist -help) and that you have
115 ever seen an VHDL-AMS ARCHITECTURE with its belonging ENTITY. If
116 you does not then the following distription will be seems very
117 strange to you. Maybe the syntax files (syntax_entity.txt,
118 syntax_architeture.txt) can helps you further.
120 ==================================================================
122 1.1. ARCHITECTURE GENERATION
125 We suppose generate-mode is equal to 1, from this it follows that
126 vams creates a netlist as an ARCHITECTURE (saved to
127 &lt;value-of-toplevel-attribute-entity&gt;_arc.&lt;output-fileextension&gt;).
130 ARCHITECTURE &lt;architecture-identifier&gt; OF &lt;entity-identifier&gt; IS
132 The architecture-identifier we are getting from the toplevel
133 attribute architecture, which we have introduced. If it is not
134 defined, we are setting architecture-identifier default
135 (default_architecture). The same have we doing with the
136 entity-identifier (toplevel attribute entity, default_entity).
139 {&lt;subnet-object&gt; &lt;subnet-name&gt; : subnet-kind;}
141 In the signal declaration part all subnets of the schematic will be
142 declarated. A subnet declaration consists of an net-object, a
143 net-name and a net-kind. All subnets are connected to various
144 components pins. If this pins have all the same port-object and the
145 same port-kind it is ok, but if one of them different, the net is
146 faulty, and will be not declarated. Moreover, if the subnet-object
147 a quantity, then it will be checked, whether the subnet consists
148 exactly one output pin (port-mode), else the subnet is faulty too.
149 The three net attributes (object, kind, mode) we are getting from
150 the pin attribs, port_kind, port_object and port_mode (which we
151 have introduced newly) of a component pin.
154 BEGIN
156 Ok. it&#039;s only marks the start of the architecture body.
159 {&lt;label&gt; : ENTITY &lt;entity&gt; [(&lt;architecture&gt;)]
160 [GENERIC MAP (&lt;set generic&gt; =&gt; &lt;generic-value&gt;
161 {; &lt;set-generic=&gt; &lt;generic-value&gt;})]
162 PORT MAP ( &lt;pin-name&gt; =&gt; &lt;subnet-name&gt;{; &lt;.. =&gt; ..&gt;});}
164 We only support component instantiation statements, like this
165 above, because we generate simple VHDL-AMS netlists. The label of
166 an instance is defined from the uref of the instanciated
167 component. Watch out, this label must be unique,it is not checked
168 anywhere. The entity variable is not the same as the
169 entity-identifier, it is the value of the device attribute which on
170 its part identifies the precompiled ENTITY of this special
171 component. Similar is the architecture variable belonging to the
172 instanciated components ARCHITECTURE (note: one ENTITY can have more
173 ARCHITECTURES), hence we are getting it from the component
174 attribute ARCHITECTURE (newly introduced).
176 All generics of the generic-list are component parameters, which
177 are different from its default values (set in its ENTITY
178 declaration). How can we distinguish them? All defined generics
179 are attached to the component and looks like :
181 &lt;attribute-name&gt;=?&lt;default-value&gt; &lt;- default, not in
182 generic-list
184 And if you want to change a parameter, you only must delete the
185 ?-character and replace the default-value with your wanted value,
186 like this :
188 &lt;attribute-name&gt;=&lt;new-value&gt; &lt;- element of generic list
190 If you do it this way, the new assigned value and its attribute-name
191 will be appear in the GENERIC MAP (set-generic=attribute-name and
192 generic-value=new-value).
194 The PORT MAP consists of all pins of a component and which nets
195 them connected to. The pin-name is getting from the pin# attribute
196 of the pin and the subnet-name means the value of the label
197 attribute of a net (mostly default named), which the pin is
198 connected to. If the pin directly wired to a PORT component (=
199 component, which device attribute =PORT), then we assign the uref
200 of this component to subnet-name.
203 END ARCHITECTURE &lt;architecture-identifier&gt;;
205 I think, this line needs no more explanation. The
206 architecture-identifier is the same like in the first line of
207 ARCHITECTURE declaration. Hence, the ARCHITECTURE part ends here.
209 ==================================================================
211 1.2. ENTITY GENERATION
214 Now, we suppose generate-mode is equal to 2, from this it follows
215 that vams creates an ENTITY declaration of a component (save to
216 &lt;component-device&gt;.vhdl). If there no component selected (empty
217 top-attribs list) then it will be created an toplevel ENTITY of the
218 current schematic (save to
219 &lt;value-of-toplevel-attribute-entity&gt;.vhdl).
222 LIBRARY &lt;library-identifier&gt;{,&lt;library-identifier&gt;};
223 USE &lt;package-identidier&gt;{,&lt;package-identifier&gt;};
225 Well, the context clause part is not very ingenious. All libraries
226 and packages you needs for your simulation you must insert staticly
227 (a library contents precompiled ENTITIES, ARCHITECTURES and
228 PACKAGES, which are needed from base components [base of the
229 hierachical netlist] of your schematic. a package contents
230 predefined types, constants, ...). We are searching for a better
231 usability of this part.
234 ENTITY &lt;entity-identifier&gt; IS
235 [genric_clause]
236 [port_clause]
237 END ENTITY;
239 If you want generate a toplevel ENTITY of your current schematic
240 then the entity-identifier is defined from the toplevel attribute
241 entity of the schematic-file. Moreover, there are no generic_clause
242 and no port_clause.
244 In case of an component based ENTITY declaration, the
245 entity-identifier is getting from the device attribute of the
246 selected component (this attribute is included in top-attribs list,
247 which is defined in the automatic generated gnetlist command .. more
248 about this, later).
251 generic_clause :=
252 GENERIC ( &lt;generic-identifier&gt; : REAL := &lt;default-value&gt;
253 {;&lt;generic-identifier&gt; : REAL := &lt;default-value&gt;});
255 All needed generic-identifiers and it default-values are getting
256 from the top-attribs list. Note: all attached attributes of a
257 component appears in the generic_clause, only special attributes,
258 like uref, source and architecture, are taked out. The values of
259 this attributes are taked from the top-attribs list, too, but it
260 does not matter whether the value starts with a ?-character or not
261 (?-character always will be deleted, if it exist in front of a
262 value).
265 port_clause :=
266 PORT (&lt;port-kind&gt; &lt;port-identifier&gt; : [&lt;port-mode&gt;] &lt;port-type&gt;
267 {;&lt;port-kind&gt; &lt;port-identifier&gt; : [&lt;port-mode&gt;] &lt;port-type&gt;});
269 All variables of this clause are grabbed from the symbol of the
270 selected component. Port-kind corresponds with the value of the
271 port_kind attribute of the pin, which pin# attribute value is equal
272 to port-identifier. Just as corresponds port-type with the the
273 value of the pin attribute port_type and port-mode with the value
274 of port_mode.
276 ===================================================================
278 1.3. AUTOMATISATING gnetlist CALLS
280 Because it is very arduous to type the whole gnetlist command,
281 which all its parameters, per hand into the terminal, we are
282 implement an automatisation of this process in gEDA gschem. This
283 makes it possible to create a VHDL-AMS ARCHITECTURE or ENTITY
284 whitout any commandline actions. The only thing you must do, is to
285 use one of the following hotkeys:
287 &lt;g e&gt; for generating an ENTITY
288 &lt;g n&gt; for genarating an ARCHITECTURE.
290 NOTE to &lt;g e&gt; - hotkey : If one component of the schematic
291 selected then the ENTITY generation
292 will be applied to this component !!
294 ===================================================================
296 2. IMPLEMENTATION
298 At this section it will be explained the basic concept of the
299 implementation, which is splited in two sections. The first one
300 aimed to the gnelist implementation and the second to the gschem
301 implementation.
304 2.1. THE VAMS MODE OF gEDA gnetlist
306 To realize gnetlist VHDL-AMS support, it was necessary to create
307 new scheme and c stuff.
310 2.1.1. SCHEME
312 The scheme implementation contents two parts. On one hand the new
313 file gnet-vams.scm, which realize the VHDL-AMS-code generation, and
314 on the other hand some settings in rc-files.
317 2.1.1.1. SETTINGS AND NEW DEFINITIONS
319 The following lines insert in your gschemrc, or wherever you want,
320 but it must be loaded at gnetlist startup.
322 - load two modules, which we needs in our new implementation.
324 (define-module (ice-9 ls) :use-module (ice-9 common-list)
325 :use-module (ice-9 string-fun))
327 - load main file for VHDL-AMS support, which contents the
328 startup procedure vams.
330 (load &quot;&lt;path_of_gnet-vams.scm&gt;/gnet-vams.scm&quot;)
333 2.1.1.2. gnet-vams.scm
335 This file contents all necessary scheme-functions to generate
336 VHDL-AMS-code. Especially, the main procedure vams, which can be
337 execute from the gnetlist command.
339 For example :
341 gnetlist -g vams schematic_filename.sch
346 2.1.2.1. ROUTINES MAIN STRUCTURE
348 the mainly functions structure looks like:
350 - (vams output-filename)
352 ARCHITECTURE generation
354 - (vams:write-secondary-unit architecture entity output-port)
356 - (vams:write-architecture-declarative-part output-port)
357 - (vams:write-signal-declarations output-port)
359 - (vams:write-architecture-statement-part packages output-port)
360 - (vams:write-generic-map output-port package)
361 - (vams:write-port-map package output-port)
363 ENTITY declaraction
365 - (vams:write-primary-unit entity port-list generic-list output-port)
367 - (vams:write-context-clause output-port)
369 - (vams:write-generic-clause generic-list output-port)
370 - (vams:write-generic-list generic-list output-port)
372 - (vams:write-port-clause port-list output-port)
373 - (vams:write-port-list port-list output-port)
376 2.1.1.3 HELPFULLY SETTING IN THE gEDA gschem ENVIRONMENT
378 This settings are not absolutly necessary, but they makes work
379 easier.
381 - set in .gEDA/gschemrc or wherever you want, but place it
382 right.
384 (attribute-promotion &quot;enable&quot;)
385 (promote-invisible &quot;enable&quot;)
386 (enforce-hierarchy &quot;disabled&quot;)
388 (attribute-name &quot;port_object&quot;)
389 (attribute-name &quot;port_type&quot;)
390 (attribute-name &quot;port_mode&quot;)
391 (attribute-name &quot;entity&quot;)
392 (attribute-name &quot;architecture&quot;)
395 2.1.2. NEW C - CODE
397 To got all informations, which we needed for currently netlist
398 generation, we must implemented two new c - functions.
401 2.1.2.1 NEW ROUTINES (saved in vams_misc.c)
404 SCM vams_get_package_attributes(SCM scm_uref)
406 The first function gets all attribute names (not its values) of a
407 component. This routine requires the name a component (package),
408 especially the uref of it, and returns a list of all attribute
409 names which are attached to this package.
411 We needs this functionality to produce a currectly
412 VHDL-AMS GENERIC MAP.
415 char* vams_get_attribs_list
416 (OBJECT *object, SCM *list, OBJECT **return_found)
418 It exists only for the support of the first function.
421 2.1.2.2. CODE ADAPTATION
423 To place this new functions at gnetlist scheme&#039;s disposal, you must
424 perform the following actions.
426 (1) gnetlist/src/g_register.c
428 gh_new_procedure1_0
429 (&quot;gnetlist:vams-get-package-attributes&quot;,
430 vams_get_package_attributes);
433 (2) gnetlist/include/prototype.h
435 SCM vams_get_package_attributes(SCM scm_uref);
438 (3) edit gnetlist/src/Makefile.in or directly in Makefile
440 (if you have edited Makefile.in you must run make config of
441 course)
443 - add &quot;vams_misc.c&quot; to gnetlist_SOURCES - variable
444 - add &quot;vams_misc.o&quot; to gnetlist_OBJECTS - variable
446 (4) copy vams_misc.c to gEDA/gnetlist/src/
448 (5) compile your code newly
450 ===================================================================
452 2.2. AUTOMATIC GENERATING gnetlist CALLS IN gEDA gschem
454 To realize this new feature it was necessary to put more
455 information from the schematic to the scheme world of gEDA gschem.
456 Concretly, we needs the filename of the current schematic, because
457 gEDA gnetlist required it, and the attached attributes of a
458 selected component for creating an VHDL-AMS ENTITY. Hence, the
459 gnetlist command is mutated to an unidirectional interface between
460 the world of gschem scheme and the world of gnetlist scheme.
462 There are three important things, which transfer through this
463 interface:
465 (1) the source-file, which contents the complett filename
466 (with path) of the current schematic.
468 (2) the top-attribs list, which contents all attached
469 attributes of the selected component.
471 (3) the generate-mode, which is defined by the users actions.
474 2.2.1. STRUCTURE OF gEDA gnetlist CALLS FROM COMMANDLINE OR FROM gEDA
475 gschem.
477 typical commandline call :
479 gnetlist [-o &lt;output-filename&gt;]
480 -g vams
481 &lt;schematic-file&gt;
483 There are nothing to explain. The top-attribs list and the
484 generate-mode variable are default defined (&#039;() and 1).
487 calls from gEDA gschem (3 possible variations) :
490 Note: vhdl-path is a predefined variable, which is set in
491 generate_netlist.scm first times. You can it simple redefine
492 in your local gschemrc file, which is loading everytimes you
493 starts gEDA gschem.
496 (1) hot-key-stroke: - g n (generate netlist)
498 --&gt; generates a netlist of the current schematic.
501 gnetlist -o &lt;vhdl-path&gt;/&lt;target-file&gt;
502 -g vams
503 &lt;source-file&gt;
505 The source-file variable is equate to the complett
506 path+filename of the current schematic, which we get with
507 help of a self coded c function. If you cut out the filename
508 of the source-file variable (source-file without path) then
509 you are getting the target-file.generate-mode and
510 top-attribs are default again.
512 (2) hot-key-stroke: - g e (generate-entity)
513 and no component is selected.
515 --&gt; generates an toplevel ENTITY of the current
516 schematic.
519 gnetlist -c &lt;scheme-comm&gt;
520 -o &lt;vhdl-path&gt;/&lt;target-file&gt;
521 -g vams
522 &lt;source-file&gt;
524 scheme-comm=&quot;(define top-attribs &#039;&lt;top-attribs&gt;)
525 (define generate-mode &#039;2)&quot;
528 Source-file needs no comment, because it is the same as in
529 (1). To get all attributes of a selected component, we are
530 must write a new c function again. The values, which we get
531 from this new function are saved in top-attribs. The sense
532 of the scheme-comm command is to put top-attribs and
533 generate-mode from the gschem to the gnetlist environment.
534 At last, the target-file consists of the pure basefilename
535 of the source-file and an .vhdl extention.
537 (3) hot-key-stroke: - g e (generate-entity)
538 and only one component is selected.
540 --&gt; generates an ENTITY of the selected schematic.
543 commandline is the same as in (2).
546 Differences: The target-file is different, but it does not
547 matter, because gnetlist generate an new output-filename in
548 in this case (&lt;device-name-of-selected-component&gt;.vhdl,
549 normally).But one fact is very important: the top-attribs
550 variable includes all attached attributes of the selected
551 component now.
553 2.2.2. SCHEME
555 The gnetlist command is generating from two scheme functions, which
556 are saved in generate_netlist.scm. This functions starts if the
557 gschem user is typing one of the specified hot-keys ([g e] starts
558 generate-entity and [g n] starts generate-netlis). Both routines
559 puts the whole gnetlist command together and execute it. The syntax
560 you see above.
563 2.2.2.1. generate_netlist.scm
566 2.2.2.2. SETTINGS
568 If you want use the new feature then you must do some entries in one
569 of your gEDA gschem rc-files
571 necessary defines:
573 - in system-gschemrc
575 (&quot;g&quot; . gnetlist-keymap)
577 Edit your global-keymap and if &quot;g&quot; always defined then find
578 out an other free hot-key-stroke.
580 Note: the documentation supports the &quot;g&quot; - key only.
583 - in one of the gschem startup files
585 (define gnetlist-keymap
586 &#039;((&quot;n&quot; . generate-netlist)
587 (&quot;e&quot; . generate-entity)))
590 loads :
592 (load &quot;/home/fliser3/.gEDA/generate_netlist.scm&quot;)
595 2.2.3. NEW C-CODE
597 The c-code makes it possible to get directly informations from the
598 gschem tool, which is necessary for the online execution of
599 gnetlist.
602 2.2.3.1. ROUTINES
604 It exists two new c-functions. Both are put down in
605 misc_for_gnetlist.c.
608 SCM get_selected_filename(gpointer data,
609 guint callback_action,
610 GtkWidget *widget)
612 This function returns the whole filename of the current schematic,
613 which is picked from the w_current-&gt;page_current-&gt;page_filename
614 string.
617 SCM get_selected_component_attributes(gpointer data,
618 guint callback_action,
619 GtkWidget *widget)
621 How the name is saying, this functions returns all attributes of
622 the selected component. It is realized with a simple while loop
623 over all objects of the schematic, which picked out all elements
624 where the selected flag is set.
627 2.2.3.2. CODE-ADAPTATION
629 Here are some actions you must conclude to makes the software
630 runable.
632 (1) new lines in /gschem/src/g_register.c
634 gh_new_procedure0_0 (&quot;get-selected-filename&quot;,g_get_selected_filename);
637 (2) new lines in /gschem/include/prototype.h
639 SCM g_get_selected_filename();
642 (3) copy the file misc_for_gnetlist.c to gschem/src
644 (4) add in file /gschem/src/Makefile.in or directly in Makefile.
646 (if you have edited Makefile.in you must run make config of
647 course)
649 - add &quot;misc_for_gnetlist.c&quot; to gschem_SOURCES - variable
650 - add &quot;misc_for_gnetlist.o&quot; to gschem_OBJECTS - variable
652 (5) add new lines in /gschem/src/g_key.c
654 SCM g_get_selected_filename(void)
656 return (get_selected_filename(window_current, 0, NULL));
660 (6) compile your changed c-code newly
661 </pre>
663 </div>
664 <!-- SECTION "VAMS netlister" [37-20220] -->
665 <h2><a name="vams_netlister_syntax_architecture" id="vams_netlister_syntax_architecture">VAMS netlister syntax architecture</a></h2>
666 <div class="level2">
667 <pre class="code">ARCHITECTURE &lt;architecture-identifier&gt; OF &lt;entity-identifier&gt; IS
669 {&lt;subnet-object&gt; &lt;subnet-name&gt; : subnet-kind;}
671 BEGIN
673 {&lt;label&gt; : ENTITY &lt;entity&gt; [(&lt;architecture&gt;)]
674 [GENERIC MAP (&lt;set-generic&gt; =&gt; &lt;generic-value&gt;
675 {; &lt;set-generic=&gt; &lt;generic-value&gt;})]
676 PORT MAP ( &lt;pin-name&gt; =&gt; &lt;subnet-name&gt;{; &lt;.. =&gt; ..&gt;});}
678 END ARCHITECTURE &lt;architecture-identifier&gt;;
679 </pre>
681 </div>
682 <!-- SECTION "VAMS netlister syntax architecture" [20221-20667] -->
683 <h2><a name="vams_netlister_syntax_entity" id="vams_netlister_syntax_entity">VAMS netlister syntax entity</a></h2>
684 <div class="level2">
685 <pre class="code">LIBRARY &lt;library-identifier&gt;{,&lt;library-identifier&gt;};
686 USE &lt;package-identidier&gt;{,&lt;package-identifier&gt;};
688 ENTITY &lt;entity-identifier&gt; IS
689 [GENERIC ( &lt;generic-identifier&gt; : REAL := &lt;default-value&gt;
690 {;&lt;generic-identifier&gt; : REAL := &lt;default-value&gt;}); ]
691 [PORT (&lt;port-kind&gt; &lt;port-identifier&gt; : [&lt;port-mode&gt;] &lt;port-type&gt;
692 {;&lt;port-kind&gt; &lt;port-identifier&gt; : [&lt;port-mode&gt;] &lt;port-type&gt;});]
693 END ENTITY;
694 </pre>
696 </div>
697 <!-- SECTION "VAMS netlister syntax entity" [20668-] --></div>
698 </body>
699 </html>