This website uses cookies. By using this site, you consent to the use of cookies. For more information, please take a look at our Privacy Policy.
Home > FPGA Technical Tutorials > FPGAs: World Class Designs > “Traditional” Design Flows > HDL-BASED DESIGN FLOWS

TABLE OF CONTENTS

Xilinx FPGA FPGA Forum

HDL-BASED DESIGN FLOWS

FONT SIZE : AAA

Advent of HDL-based Flows

Toward the end of the 1980s, as designs grew in size and complexity,  s chematic-based ASIC flows began to run out of steam. Visualizing, capturing, debugging, understanding, and maintaining a design at the gate level of  abstraction became increasingly difficult and inefficient when juggling 5,000 or  more gates and reams of schematic pages. In addition to the fact that capturing  a large design at the gate level of abstraction is prone to error, it is extremely  time-consuming. Thus, some EDA vendors started to develop design tools and  flows based on the use of hardware description languages , or HDLs.   

The idea behind a hardware description language is, perhaps not surprisingly, that you can use it to describe hardware, in particular the electronic portions (components and wires) of ICs and printed circuit boards. (The HDL may  also be used to provide limited representations of the cables and connectors  linking circuit boards together.)   

In the early days of electronics, almost anyone who created an EDA tool  created his or her own HDL to go with it. Some of these were analog HDLs in  that they were intended to represent circuits in the analog domain, while others were focused on representing digital functionality. For the purposes of this  book, we are interested in HDLs only in the context of designing digital ICs in  the form of ASICs and FPGAs.   

Some of the more popular digital HDLs are introduced later in this chapter.  For the nonce, however, let’s focus more on how a generic digital HDL is used  as part of a design flow. The first thing to note is that the functionality of a digital  circuit can be represented at different levels of abstraction and that different HDLs  support these levels of abstraction to a greater or lesser extent ( Figure 5-14 ).

Different levels of abstractionpng

The lowest level of abstraction for a digital HDL would be the switch  level , which refers to the ability to describe the circuit as a netlist of transistor  switches.   

A slightly higher level of abstraction would be the gate level , which refers  to the ability to describe the circuit as a netlist of primitive logic gates and functions. Thus, the early gate-level netlist formats generated by schematic capture  packages as discussed in the previous section were in fact rudimentary HDLs.

The next level of HDL sophistication is the ability to support functional  representations , which covers a range of constructs. At the lower end is the  capability to describe a function using Boolean equations. For example, assuming we had already declared a set of signals called Y, SELECT, DATA-A, and  DATA-B, we could capture the functionality of a simple 2:1 multiplexer using  the following Boolean equation:

Y =(SELECT & DATA-A) (!SELECT & DATA-B);

Note that this is a generic syntax that does not favor any particular HDL and is  used only for the purposes of this example.

The functional level of abstraction also encompasses register transfer level  (RTL) representations. The term RTL covers a multitude of manifestations, but  the easiest way to wrap one’s brain around the underlying concept is to consider a design formed from a collection of registers linked by combinational  logic. These registers are often controlled by a common clock signal, so assuming that we have already declared two signals called CLOCK and CONTROL,  along with a set of registers called REGA, REGB, REGC, and REGD, then an  RTL-type statement might look something like the following:

when CLOCK rises if CONTROL == “1” 

then REGA= REGB & REGC; else REGA= REGB REGD;  

end if;  

end when;

In this case, symbols like when , rises , if , then , else , and the like are keywords  whose semantics are defined by the owners of the HDL. Once again, this is a  generic syntax that does not favor any particular HDL and is used only for the  purposes of this example.

The highest level of abstraction sported by traditional HDLs is known as  behavioral , which refers to the ability to describe the behavior of a circuit  using abstract constructs like loops and processes. This also encompasses using  algorithmic elements like adders and multipliers in equations; for example:

Y= (DATA-A DATA-B) * DATA-C;

We should note that there is also a system level of abstraction (not shown in   Figure 5-14 ) that features constructs intended for system-level design applications, but we’ll worry about this level a little later.   

Many of the early digital HDLs supported only structural representations  in the form of switch or gate-level netlists. Others such as ABEL, CUPL, and  PALASM were used to capture the required functionality for PLD devices.  These languages supported different levels of functional abstraction, such as  Boolean equations, text-based truth tables, and text-based finite state machine  (FSM) descriptions.   

The next generation of HDLs, which were predominantly targeted toward  logic simulation, supported more sophisticated levels of abstraction such as  RTL and some behavioral constructs. It was these HDLs that formed the core  of the first true HDL-based design flows.

A Simple (early) HDL-based ASIC Flow

The key feature of HDL-based ASIC design flows is their use of logic synthesis  technology, which began to appear on the market around the mid-1980s. These  tools could accept an RTL representation of a design along with a set of timing constraints. In this case, the timing constraints were presented in a side-file  containing statements along the lines of “ the maximum delay from input X to  output Y should be no greater than N nanoseconds ” (the actual format would be  a little drier and more boring).   

The logic synthesis application automatically converted the RTL representation into a mixture of registers and Boolean equations, performed a variety  of minimizations and optimizations (including optimizing for area and timing),  and then generated a gate-level netlist that would (or at least, should) meet the  original timing constraints ( Figure 5-15 ).

Simple HDL-based ASIC flowpng

—Technology Trade-offs—

● There were a number of advantages to this new type of flow. First the productivity of the design engineers rose dramatically because it was much  easier to specify, understand, discuss, and debug the required functionality  of the design at the RTL level of abstraction as opposed to working with  reams of gate-level schematics.  

● Also, logic simulators could run designs described in RTL much more  quickly than their gate-level counterparts.

● One slight glitch was that logic simulators could work with designs specified at high levels of abstraction that included behavioral constructs, but  early synthesis tools could only accept functional representations up to the  level of RTL. Thus, design engineers were obliged to work with a synthesizable subset of their HDL of choice.

Once the synthesis tool had generated a gate-level netlist, the flow became very  similar to the schematic-based ASIC flows discussed in the previous chapter.  The gate-level netlist could be simulated to ensure its functional validity, and  it could also be used to perform timing analysis based on estimated values for  tracks and other circuit elements. The netlist could then be used to drive the  place-and-route software, following which a more accurate timing analysis  could be performed using extracted resistance and linefeed capacitance values.

A Simple (early) HDL-based FPGA Flow

It took some time for HDL-based flows to flourish within the ASIC community. Meanwhile, design engineers were still coming to grips with the concept  of FPGAs. Thus, it wasn’t until the very early 1990s that HDL-based flows  featuring logic synthesis technology became fully available in the FPGA world  ( Figure 5-16 ).   

As before, once the synthesis tool had generated a gate-level netlist, the  flow became very similar to the schematic-based FPGA flows discussed in the  previous chapter. The gate-level netlist could be simulated to ensure its functional validity, and it could also be used to perform timing analysis based on  estimated values for tracks and other circuit elements. The netlist could then be used to drive the FPGA’s mapping, packing, and place-and-route software,  following which a more accurate timing report could be generated using realworld (physical) values.

Simple HDL-based FPGA flowpng

Architecturally Aware FPGA Flows

The main problem besetting the original HDL-based FPGA flows was that their  logic synthesis technologies were derived from the ASIC world. Thus, these  tools “ thought ” in terms of primitive logic gates and registers. In turn, this  meant that they output gate-level netlists, and it was left to the FPGA vendor to  perform the mapping, packing, and place-and-route functions.   

Sometime around 1994, synthesis tools were equipped with knowledge  about different FPGA architectures. This meant that they could perform mapping—and some level of packing—functions internally and output a LUT/CLB level netlist. This netlist would subsequently be passed to the FPGA vendor’s  place-and-route software. The main advantage of this approach was that these  synthesis tools had a better idea about timing estimations and area utilization,  which allowed them to generate a better quality of results (QoR). In real terms,  FPGA designs generated by architecturally aware synthesis tools were 15 to  20 percent faster than their counterparts created using traditional (gate-level)  synthesis offerings.

Logic versus Physically Aware Synthesis

We’re jumping a little bit ahead of ourselves here, but this is as good a place  as any to briefly introduce this topic. The original logic synthesis tools were designed for use with the multimicron ASIC technologies of the mid-1980s.  In these devices, the delays associated with the logic gates far outweighed the  delays associated with the tracks connecting those gates together. In addition  to being relatively small in terms of gate-count (by today’s standards), these  designs featured relatively low clock frequencies and correspondingly loose  design constraints. The combination of all of these factors meant that early  logic synthesis tools could employ relatively simple algorithms to estimate the  track delays, but that these estimations would be close enough to the real (postplace-and-route) values that the device would work.   

Over the years, ASIC designs increased in size (number of gates) and complexity. At the same time, the dimensions of the structures on the silicon chip  were shrinking with two important results:

● Delay effects became more complex in general.  

● The delays associated with tracks began to outweigh the delays associated  with gates.

By the mid-1990s, ASIC designs were orders of magnitude larger—and their  delay effects were significantly more sophisticated—than those for which the  original logic synthesis tools had been designed. The result was that the estimated delays used by the logic synthesis tool had little relation to the final  post-place-and-route delays. In turn, this meant that achieving timing closure  (tweaking the design to make it achieve its original performance goals) became  increasingly difficult and time-consuming.   

For this reason, ASIC flows started to see the use of physically aware synthesis somewhere around 1996. For the moment, we need only note that, during  the course of performing its machinations, the physically aware synthesis engine  makes initial placement decisions for the logic gates and functions. Based on  these placements, the tool can generate more accurate timing estimations.  

Ultimately, the physically aware synthesis tool outputs a placed (but not  routed) gate-level netlist. The ASIC’s physical implementation (place-and-route)  tools use this initial placement information as a starting point from which to perform local (fine-grained) placement optimizations followed by detailed routing.  The result is that the estimated delays used by the physically aware synthesis  application more closely correspond to the post-place-and-route delays. In turn,  this means that achieving timing closure becomes a less taxing process.

But what of FPGAs? Well, these devices were also increasing in size  and complexity throughout the 1990s. By the end of the millennium, FPGA   designers were running into significant problems with regard to timing closure. Thus, around 2000, EDA vendors started to provide FPGA-centric, physically aware synthesis offerings that could output a mapped, packed, and placed  LUT/CLB-level netlist. In this case, the FPGA’s physical implementation  (place-and-route) tools use this initial placement information as a starting point  from which to perform local (fine-grained) placement optimizations f ollowed  by detailed routing.

FAQ

Do FPGA designers still use graphical design entry?  

When the first HDL-based flows appeared on the scene, many folks assumed that  graphical design entry and visualization tools, such as schematic capture systems, were poised to exit the stage forever. Indeed, for some time, many design  engineers prided themselves on using text editors like VI (from Visual Interface)  or EMACS as their only design entry mechanism. But a picture tells a thousand  words, as they say, and graphical entry techniques remain popular at a variety  of levels. For example, it is extremely common to use a block-level schematic  editor to capture the design as a collection of high-level blocks that are connected together. The system might then be used to automatically create a skeleton  HDL framework with all of the block names and inputs and outputs declared.  Alternatively, the user might create a skeleton framework in HDL, and the system  might use this to create a block-level schematic automatically.  

From the user’s viewpoint, “ pushing ” down into one of these schematic blocks  might automatically open an HDL editor. This could be a pure text-and-command–based editor like VI, or it might be a more sophisticated HDL-specific editor  featuring the ability to show language keywords in different colors, automatically  complete statements, and so forth. Furthermore, when pushing down into a schematic block, modern design systems often give you a choice between entering and viewing the contents of that  block as another, lower-level block-level schematic, raw HDL code, a graphical  state diagram (used to represent an FSM), a graphical flow-chart, and so forth. In the  case of the graphical representations like state diagrams and flowcharts, these can  subsequently be used to generate their RTL equivalents automatically ( Figure 5-17 ).

Mixed-level design capture environmentpng

Furthermore, it is common to have a tabular file containing information relating to the device’s external inputs and outputs. In this case, both the top-level  block diagram and the tabular file will (hopefully) be directly linked to the same  data and will simply provide different views of that data. Making a change in any  view will update the central data and be reflected immediately in all of the views.

A Plethora of HDLs  

Life would be so simple if there were only a single HDL to worry about, but  no one said that living was going to be easy. As previously noted, in the early  days of digital IC electronics design (circa the 1970s), anyone who created an  HDL-based design tool typically felt moved to create his or her own language  to accompany it. Not surprisingly, the result was a morass of confusion (you  had to be there to fully appreciate the dreadfulness of the situation). What was  needed was an industry-standard HDL that could be used by multiple EDA  tools and vendors, but where was such a gem to be found?

Verilog HDL   

Sometime around the mid-1980s, Phil Moorby (one of the original members of  the team that created the famous HILO logic simulator) designed a new HDL  called Verilog. In 1985, the company he was working for, Gateway Design  Automation, introduced this language to the market along with an accompanying logic simulator called Verilog-XL.   

One very cool concept that accompanied Verilog and Verilog-XL was the  Verilog programming language interface (PLI). The more generic name for this  sort of thing is application programming interface (API). An API is a library  of software functions that allow external software programs to pass data into  an application and access data from that application. Thus, the Verilog PLI is an  API that allows users to extend the functionality of the Verilog language and  simulator.   

As one simple example, let’s assume that an engineer is designing a circuit that makes use of an existing module to perform a mathematical function  such as a fast Fourier transform (FFT). A Verilog representation of this function might take a long time to simulate, which would be a pain if all the engineer really wanted to do was verify the new portion of the circuit. In this case,  the engineer might create a model of this function in the C programming language, which would simulate, say, 1,000 times faster than its Verilog equivalent. This model would incorporate PLI constructs, allowing it to be linked into  the simulation environment. The model could subsequently be accessed from  the Verilog description of the rest of the circuit by means of a PLI call providing a bidirectional link to pass data back and forth between the main circuit  (represented in Verilog) and the FFT (captured in C).  

Yet one more very useful feature associated with Verilog and Verilog-XL  was the ability to have timing information specified in an external text file  known as a standard delay format (SDF) file. This allowed tools like postplace-and-route timing analysis packages to generate SDF files that could be  used by the simulator to provide more accurate results.

As a language, the original Verilog was reasonably strong at the structural  (switch and gate) level of abstraction (especially with regard to delay modeling  capability); it was very strong at the functional (Boolean equation and RTL)  level of abstraction; and it supported some behavioral (algorithmic) constructs  ( Figure 5-18 ).

Levels of abstraction (Verilog)png

In 1989, Gateway Design Automation along with Verilog (the HDL) and  Verilog-XL (the simulator) were acquired by Cadence Design Systems. The  most likely scenario at that time was for Verilog to remain as just another proprietary HDL. However, with a move that took the industry by surprise, Cadence  put the Verilog HDL, Verilog PLI, and Verilog SDF specifications into the public domain in 1990.   

This was a very daring move because it meant that anybody could develop  a Verilog simulator, thereby becoming a potential competitor to Cadence. The  reason for Cadence’s largesse was that the VHDL language (introduced later in  this section) was starting to gain a significant following. The upside of placing  Verilog in the public domain was that a wide variety of companies developing  HDL-based tools, such as logic synthesis applications, now felt comfortable  using Verilog as their language of choice.  

—Technology Trade-offs—  

● Having a single design representation that could be used by simulation, synthesis, and other tools made everyone’s life much easier. It is important to  remember, however, that Verilog was originally conceived with simulation in mind; applications like synthesis were something of an afterthought. This  means that when creating a Verilog representation to be used for both simulation and synthesis, one is restricted to using a synthesizable subset of the  language (which is loosely defined as whatever collection of language constructs your particular logic synthesis package understands and supports).

The formal definition of Verilog is encapsulated in a document known as the  language reference manual (LRM), which details the syntax and semantics  of the language. In this context, the term syntax refers to the grammar of the  language—such as the ordering of the words and symbols in relation to each  other—while the term semantics refers to the underlying meaning of the words  and symbols and the relationships between the things they denote.   

In an ideal world, an LRM would define things so rigorously that  there would be no chance of any misinterpretation. In the real world, however,  there were some ambiguities with respect to the Verilog LRM. Admittedly,  these were c orner-case conditions along the lines of “ if a control signal on this  register goes inactive at the same time as the clock signal triggers, which signal will be evaluated by the simulator first? ” But the result was that different  Verilog simulators might generate different results, which is always somewhat  disconcerting to the end user.   

Verilog quickly became very popular. The problem was that different companies started to extend the language in different directions. In order to curtail  this sort of thing, a nonprofit body called Open Verilog International (OVI)  was established in 1991. With representatives from all of the major EDA vendors of the time, OVI’s mandate was to manage and standardize Verilog HDL  and the Verilog PLI.   

The popularity of Verilog continued to rise exponentially, with the result  that OVI eventually asked the IEEE to form a working committee to establish Verilog as an IEEE standard. Known as IEEE 1364, this committee was  formed in 1993. May 1995 saw the first official IEEE Verilog release, which  is formally known as IEEE 1364–1995, and whose unofficial designation has  come to be Verilog 95.

Minor modifications were made to this standard in 2001; hence, it is often  referred to as the Verilog 2001 (or Verilog 2K1) release. At the time of this writing, the IEEE 1364 committee is working feverishly on a forthcoming Verilog  2005 offering, while the design world holds its breath in dread anticipation (see  also the section on “ Superlog and System-Verilog ” later in this chapter).

VHDL and VITAL

In 1980, the U.S. Department of Defense (DoD) launched the very high speed  integrated circuit (VHSIC) program, whose primary objective was to advance  the state of the art in digital IC technology. This program sought to address,  among other things, the fact that it was difficult to reproduce ICs (and circuit  boards) over the long life cycles of military equipment because the function of the parts wasn’t documented in a rigorous fashion. Furthermore, different  components forming a system were often designed and verified using diverse  and incompatible simulation languages and design tools.   

To address these issues, a project to develop a new hardware description  language called VHSIC HDL (or VHDL for short) was launched in 1981. One  unique feature of this process was that industry was involved from a very early  stage. In 1983, a team comprising Intermetrics, IBM, and Texas Instruments was  awarded a contract to develop VHDL, the first official release of which occurred  in 1985.   

Also of interest is the fact that in order to encourage acceptance by the  industry, the DoD subsequently donated all rights to the VHDL language definition to the IEEE in 1986. After making some modifications to address a few  known problems, VHDL was released as official standard IEEE 1076 in 1987.  The language was further extended in a 1993 release and again in 1999.  

—Technology Trade-offs—  

● As a language, VHDL is very strong at the functional (Boolean equation  and RTL) and behavioral (algorithmic) levels of abstraction, and supports  some system-level design constructs. However, VHDL is a little weak  when it comes to the structural (switch and gate) level of abstraction, especially with regard to its delay modeling capability.   

It quickly became apparent that VHDL had insufficient timing accuracy to be  used as a sign-off simulator. For this reason, the VITAL initiative was launched  at the Design Automation Conference (DAC) in 1992. VHDL Initiative toward  ASIC Libraries (VITAL) was an effort to enhance VHDL’s capabilities for  modeling timing in ASIC and FPGA design environments. The result encompassed both a library of ASIC/FPGA primitive functions and an associated  method for back-annotating delay information into these library models, where  this delay mechanism was based on the same underlying tabular format used  by Verilog ( Figure 5-19 ).

Mixed-language Designs

Once upon a time, it was fairly common for an entire design to be captured  using a single HDL (Verilog or VHDL). As designs increased in size and complexity, however, it became more common for different portions of the design  to be created by different teams. These teams might be based in different companies or even reside in different countries, and it was not uncommon for the  different groups to be using different design languages.   

Another consideration was the increasing use of legacy design blocks or  third-party IP, where the latter refers to a design team purchasing a predefined  function from an external supplier. As a general rule of thumb related to  Murphy’s Law, if you were using one language, then the IP you wanted was  probably available only in the other language.

Levels of abstraction (Verilog versus VHDL)png

The early 1990s saw a period known as the HDL Wars, in which the   proponents of one language (Verilog or VHDL) stridently predicted the imminent demise of the other … but the years passed and both languages retained  strong followings. The result was that EDA vendors began to support mixedlanguage design environments featuring logic simulators, logic synthesis applications, and other tools that could work with designs composed from a mixture  of Verilog and VHDL blocks (or modules, depending on your language roots).

UDL/I   

As previously noted, Verilog was originally designed with simulation in mind.  Similarly, VHDL was created as a design documentation and specification  language that took simulation into account. As a result, one can use both of  these languages to describe constructs that can be simulated, but not synthesized. To address these problems, the Japan Electronic Industry Development  Association (JEIDA) introduced its own HDL, the unified design language for  integrated circuits (UDL/I) in 1990.   

The key advantage of UDL/I was that it was designed from the ground up  with both simulation and synthesis in mind. The UDL/I environment includes  a simulator and a synthesis tool and is available for free (including the source  code). However, by the time UDL/I arrived on the scene, Verilog and VHDL already held the high ground, and UDL/I has never really managed to attract  much interest outside of Japan.

Superlog and SystemVerilog

In 1997, things started to get complicated because that’s when a company  called Co-Design Automation was formed. Working away furiously, the folks  at Co-Design developed a “ Verilog on steroids ” called Superlog.   

Superlog was an amazing beast that combined the simplicity of Verilog  with the power of the C programming language. It also included things like  temporal logic, sophisticated design verification capabilities, a dynamic API,  and the concept of assertions that are key to the formal verification strategy  known as model checking. (VHDL already had a simple assert construct, but  the original Verilog had nothing to boast about in this area.)   The two main problems with Superlog were  

● it was essentially another proprietary language, and  

● it was so much more sophisticated than Verilog 95 (and later Verilog 2001)  that getting other EDA vendors to enhance their tools to support it would  have been a major feat.  

Meanwhile, while everyone was scratching their heads wondering what the  future held, the OVI group linked up with their equivalent VHDL organization  called VHDL International to form a new body called Accellera. The mission  of this new organization was to focus on identifying new standards and formats, to develop these standards and formats, and to foster the adoption of new  methodologies based on these standards and formats.   

In the summer of 2002, Accellera released the specification for a hybrid  language called SystemVerilog 3.0 (don’t even ask me about 1.0 and 2.0). The  great advantage to this language was that it was an incremental enhancement  to the existing Verilog, rather than the death-defying leap represented by a fullup Superlog implementation. Actually, SystemVerilog 3.0 featured many of  Superlog’s language constructs donated by Co-Design. It included things like  the assertion and extended synthesis capabilities that everyone wanted and,  being an Accellera standard, it was well placed to quickly gain widespread  adoption.   

The current state of play (at the time of this writing) is that Co-Design was  acquired by Synopsys in the fall of 2002. Synopsys maintained the policy of  donating language constructs from Superlog to SystemVerilog, but no one  is really talking about Superlog as an independent language anymore. After  a little pushing and pulling, all of the mainstream EDA vendors officially  endorsed SystemVerilog and augmented their tools to accept various subsets of  the language, depending on their particular application areas and requirements.  System-Verilog 3.1 hit the streets in the summer of 2003, followed by a 3.1a  release (to add a few enhancements and fix some annoying problems) around the beginning of 2004. Meanwhile, the IEEE determined to release the next  version of Verilog in 2005. To avert a potential schism between Verilog 2005  and SystemVerilog, Accellera promised to donate their SystemVerilog copyright to the IEEE by the summer of 2004. SystemVerilog was formally adopted  as IEEE Standard 1800–2005. At the time of writing, the IEEE is working on  the next major version of the standard, expected as 1800–2008. They are also  extending the APIs to include assertions, coverage, and other aspects of the  language.   

Speaking of which … there is another aspect to SystemVerilog, the full  potential of which has not yet been realized. This is the Direct Programming  Interface (DPI). In fact, the concept behind this is incredibly simple. Since processes in Verilog look very much like procedure calls in C, why not make them  able to call each other directly without having to go through a massive interface as was the case with the Verilog PLI? The resulting interface is extremely  fast (although hidden dangers can lie there) and means that SystemVerilog now  plays nicely with other languages, such as SystemC. In effect, that means that  the SystemVerilog language has become more extensible.   

SystemC   

And then we have SystemC, which some design engineers love and others hate  with a passion. SystemC—discussed in more detail in Chapter 6—can be used  to describe designs at the RTL level of abstraction. These descriptions can subsequently be simulated 5 to 10 times faster than their Verilog or VHDL counterparts, and synthesis tools are available to convert the SystemC RTL into  gate-level netlists.

—Technology Trade-offs—  

● One big argument for SystemC is that it provides a more natural environment for hardware/software codesign and co-verification.  

● One big argument against it is that the majority of design engineers are  very familiar with Verilog or VHDL, but are not familiar with the objectoriented aspects of SystemC.  

● Another consideration is that the majority of today’s synthesis offerings represent hundreds of engineer years of development in translating Verilog or  VHDL into gate-level netlists. By comparison, there are far fewer SystemCbased synthesis tools, and those that are available tend to be somewhat less  sophisticated than their more traditional counterparts.  

In reality, SystemC is more applicable to a system-level versus an RTL design  environment. Having said this, SystemC seems to be gaining a lot of momentum in Asia and Europe, and the debate on SystemC versus SystemVerilog versus VHDL will doubtless be with us for quite some time.

Points to Ponder

Sad to relate, the majority of designs described in RTL are almost unintelligible to another designer. In an ideal world, the RTL description of a design  should read like a book, starting with a “ table of contents ” (an explanation of  the design’s structure), having a logical flow partitioned into “ chapters ” (logical breaks in the design), and having lots of “ commentary ” (comments explaining the structure and operation of the design).   

It’s also important to note that coding style can impact performance (this  typically affects FPGAs more than ASICs). One reason for this is that, although  they might be logically equivalent, different RTL statements can yield different  results. Also, tools are part of the equation because different tools can yield different results.   

The various FPGA vendors and EDA vendors are in a position to provide  their customers with reams of information on particular coding styles and considerations with regard to their chips and tools, respectively. However, the following points are reasonably generic and will apply to most situations.   

Serial versus Parallel Multiplexers   

When creating RTL code, it is useful to understand what your synthesis tool  is going to do in certain circumstances. For example, every time you use an  if-then-else statement, the result will be a 2:1 multiplexer. This becomes interesting in the case of nested if-then-else statements, which will be synthesized  into a priority structure. For example, assume that we have already declared  signals Y, A, B, C, D, and SEL (for select) and that we use them to create a  nested if-then-else ( Figure 5-20 ).

Synthesizing nested if-then-else statementspng

Synthesizing a case statementpng

As before, the syntax used here is a generic one that doesn’t really reflect any  of the mainstream languages. In this case, the innermost if-then-else will be the  fastest path, while the outermost if-then-else will be the critical signal (in terms of  timing). Having said this, in some FPGAs all of the paths through this structure  will be faster than using a case statement. Speaking of which, a case statement  implementation of the above will result in a 4:1 multiplexer, in which all of the  timing paths associated with the inputs will be (relatively) equal ( Figure 5-21 ).   

Beware of Latch Inference   

Generally speaking, it’s a good idea to avoid the use of latches in FPGA designs  unless you really need them. One other thing to watch out for: If you use an ifthen-else statement, but neglect to complete the “ else ” portion, then most synthesis tools will infer a latch.

Use Constants Wisely   

Adders are the most used of the more complex operators in a typical design.  In certain cases, ASIC designers sometimes employ special versions using  c ombinations of half-adders and full-adders. This may work very efficiently in  the case of a gate array device, for example, but it will typically result in a very  bad FPGA implementation.   When using an adder with constants, a little thought goes a long way. For  example, “ A + 2 ” can be implemented more efficiently as “ A + 1 with carry-in, ”  while “ A - 2 ” would be better implemented as “ A -1 with carry-in. ”   Similarly, when using multipliers, “ A * 2 ” can be implemented much more  efficiently as “ A SHL 1 ” (which translates to “ A shifted left by one bit ” ), while   “ A * 3 ” would be better implemented as “ (A SHL 1) + A. ”   In fact, a little algebra also goes a long way in FPGAs. For example, replacing   “ A * 9 ” with “ (A SHL 3) + A ” results in at least a 40-percent reduction in area.

Consider Resource Sharing  

Resource sharing is an optimization technique that uses a single functional block  (such as an adder or comparator) to implement several operators in the HDL code. If you do not use resource sharing, then each RTL operation is built using  its own logic. This results in better performance, but it uses more logic gates,  which equates to silicon real estate. If you do decide to use resource sharing, the  result will be to reduce the gate-count, but you will typically take a hit in performance. For example, consider the statement illustrated in Figure 5-22 . Note that  frequency values shown in this figure are of interest only for the purposes of this  comparison, because these values will vary according to the particular FPGA  architecture, and they will change as new process nodes come online.

The following operators can be shared with other instances of the same  operator or with related operators on the same line:   For example, a operator can be shared with instances of other operators or  with – operators, while a * operator can be shared only with other * operators.   

If nothing else, it’s a good idea to check whether your synthesis application  has resource sharing enabled or disabled by default. And one final point is that  resource sharing in ASICs can alleviate routing congestion, but it may actually  cause routing problems in FPGAs.

Last But Not Least   

Internal tri-state buses are slow in most FPGAs and should be avoided unless  you are 100-percent confident that you know what you’re doing. If at all possible, use tri-state buffers only at the top-most level of the design. If you do wish to use internal tri-state buffers, then in the case of FPGA families that don’t  support these gates, the majority of today’s synthesis tools provide automatic  tri-state-to-multiplexer conversion (this basically involves converting the tristate buffers specified in the RTL into corresponding LUT/CLB-based logic).   

Also, bidirectional buffers can cause timing loop problems, so if you use  them, make sure that any false paths are clearly marked.










  • XCR3960-7BG492C

    Manufacturer:Xilinx

  • Xilinx BGA
  • Product Categories:

    Lifecycle:Any -

    RoHS: -

  • XC3S4000-4FG676I

    Manufacturer:Xilinx

  • FPGA Spartan-3 Family 4M Gates 62208 Cells 630MHz 90nm Technology 1.2V 676-Pin FBGA
  • Product Categories: FPGAs (Field Programmable Gate Array)

    Lifecycle:Active Active

    RoHS:

  • XC3S4000-4FGG900I

    Manufacturer:Xilinx

  • FPGA Spartan-3 Family 4M Gates 62208 Cells 630MHz 90nm Technology 1.2V 900-Pin FBGA
  • Product Categories: Voltage regulator tube

    Lifecycle:Active Active

    RoHS:

  • XC4020XLA-09PQG160I

    Manufacturer:Xilinx

  • FPGA XC4000XLA Family 20K Gates 1862 Cells 227MHz 0.35um Technology 3.3V 160-Pin PQFP
  • Product Categories:

    Lifecycle:Obsolete -

    RoHS:

  • XC29009VH

    Manufacturer:Xilinx

  • Xilinx BGA
  • Product Categories:

    Lifecycle:Any -

    RoHS: -

Need Help?

Support

If you have any questions about the product and related issues, Please contact us.