US20080172646A1 - Array transformation in a behavioral synthesis tool - Google Patents
Array transformation in a behavioral synthesis tool Download PDFInfo
- Publication number
- US20080172646A1 US20080172646A1 US12/002,617 US261707A US2008172646A1 US 20080172646 A1 US20080172646 A1 US 20080172646A1 US 261707 A US261707 A US 261707A US 2008172646 A1 US2008172646 A1 US 2008172646A1
- Authority
- US
- United States
- Prior art keywords
- memory
- array
- memory allocation
- allocation information
- source code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
- 230000015572 biosynthetic process Effects 0.000 title claims abstract description 54
- 238000003786 synthesis reaction Methods 0.000 title claims abstract description 54
- 230000003542 behavioural effect Effects 0.000 title claims abstract description 33
- 230000009466 transformation Effects 0.000 title description 3
- 230000015654 memory Effects 0.000 claims abstract description 299
- 238000012856 packing Methods 0.000 claims abstract description 63
- 238000000034 method Methods 0.000 claims abstract description 58
- 230000008569 process Effects 0.000 claims abstract description 31
- 230000008859 change Effects 0.000 claims description 16
- 230000006399 behavior Effects 0.000 claims description 13
- 238000012546 transfer Methods 0.000 claims description 4
- 230000004044 response Effects 0.000 claims 8
- 238000003491 array Methods 0.000 abstract description 47
- 238000013461 design Methods 0.000 abstract description 25
- 238000010586 diagram Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000007334 memory performance Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000035755 proliferation Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
Definitions
- the present invention relates generally to behavioral synthesis tools for creating integrated circuits, and more particularly relates to behavioral synthesis tools that provide for improved packing of arrays to memory.
- the memory subsystem has become an important focus of electronic system design. More than three-quarters of a data-intensive system can be made up of storage components, making the memory subsystem the most crucial part of the design of an integrated circuit. Most of these systems need to be high-speed due to the large amounts of data involved and must be designed carefully to avoid a solution that is larger than expected.
- the design of an integrated circuit no longer begins with a circuit diagram. Instead, it begins with a software program that describes the behavior or functionality of a circuit.
- This software program is a source code description that defines an algorithm to be performed with limited implementation details.
- Designers direct behavioral synthesis tools to convert the source code description into a register transfer level (RTL) description.
- RTL register transfer level
- the RTL description is used to ultimately generate a netlist that includes a list of components in the circuit and the interconnections between the components. This netlist is used to create the physical integrated circuit.
- Arrays provide a powerful and convenient method for modeling the behavior of memories in source code descriptions. That is, behavioral descriptions are used to manipulate groups of data in an abstract manner using arrays. These arrays are, under the control of the designer, packed to memory. Behavioral synthesis tools automatically construct the logic to control the memory, freeing the designer to explore architectures using different memories with different characteristics (e.g., synchronous versus asynchronous, single port versus dual port), and make intelligent decisions about an appropriate implementation for a design.
- the designer After the designer designates the details of memory allocation in the source code description (using pragma statements or other directives), the designer runs the source code description through the synthesis tool.
- the synthesis tool generates a report that the designer can use to analyze the performance of the circuit. For example, the user can examine the speed and area of the circuit to determine whether the current memory allocation is acceptable. If the memory allocation is not acceptable, the designer must return to an editor, re-edit the source code description to change the details of memory allocation, and run the source code description through the synthesis tool again.
- Such a technique for modifying the memory allocation is time consuming and inefficient and gives the designer only a limited amount of options for designating how memory will be allocated.
- Methods, systems, and behavioral synthesis tools allow a designer to change the format of how an array is packed to memory during the memory packing process when converting a source code description of a circuit to an RTL description.
- the designer can write a source code description at the algorithmic level describing the behavior of the circuit to be designed.
- the designer then uses a behavioral synthesis tool to generate a number of different architectural designs using synthesis techniques.
- Each design can implement differing memory allocation by allowing the designer to change a number of different constraints such as whether to use RAMs vs. registers, which type of RAM to use, how many memories to use, whether to use on or off-chip memory, etc.
- the designer is also provided the ability to transform the layout format of the arrays in the source code description such that the designer can quickly and easily control the packing of the arrays into the chosen memories.
- These constraints can be changed either using a graphical user interface, changing constraints within the behavioral synthesis tool, or by manually manipulating the source code description.
- the behavioral synthesis tool then creates a report for each design to analyze the performance of the circuit. For example, the designer can examine and compare the speed and area of the circuits created from each of the designs to determine whether the memory performance and size are acceptable.
- a source code file having a description of the hardware is read into a database within the behavioral synthesis tool.
- the behavioral synthesis tool analyzes the source code description and generates a data structure associated with the source code description.
- the designer can then modify a number of constraints dictating the details of memory allocation such as type of memory, number of memories, memory size, etc.
- the designer can change these memory constraints interactively and dynamically during the memory packing process to control how arrays are packed into memory.
- a number of additional options for packing arrays into memory are provided by the behavioral synthesis tool to the designer so that the designer may select one of a plurality of array layout formats during the memory packing process.
- Providing the designer the ability to transform the layout of arrays dynamically allows the designer a fast, efficient method of customizing the memory allocation of the circuit to be synthesized.
- FIG. 1 is a block diagram of a system for allowing interactive memory allocation.
- FIG. 2 is a detailed diagram illustrating a design flow for creating an integrated circuit using the system of FIG. 1 .
- FIG. 3 is an illustration of directly packing an array to a memory.
- FIG. 4( a ) is an illustration of packing multiple words of an array into a single word of a memory.
- FIG. 4( b ) is another illustration of packing multiple words of an array into a single word of a memory.
- FIG. 5( a ) is an illustration of packing an array into a memory using a Little Endian format.
- FIG. 5( b ) is an illustration of packing an array into a memory using a Big Endian format.
- FIG. 6( a ) is an illustration of packing an array into memory in an interlacing format.
- FIG. 6( b ) is another illustration of packing an array into memory in an interlacing format.
- FIG. 7( a ) is an illustration of packing a single word of an array into multiple words of a memory.
- FIG. 7( b ) is another illustration of packing a single word of an array into multiple words of memory.
- FIG. 8 is an illustration of packing an array into a customized location in a memory.
- FIG. 9( a ) is an illustration of packing a single array into multiple memories.
- FIG. 9( b ) is another illustration of packing a single array into multiple memories.
- FIG. 10 is an illustration of packing multiple arrays into a single memory.
- FIG. 11 is an illustration of packing multiple arrays into a single memory with the arrays overlapping in memory usage.
- FIGS. 12( a - c ) are illustrations of using resolution modes to define default behavior and correct designer error.
- FIG. 13 shows an example of a user interface allowing the designer to modify memory resources in a behavioral synthesis tool.
- FIG. 14 is a block diagram of an embodiment of a network environment for implementing a behavioral synthesis tool.
- FIG. 15 is a block diagram of an embodiment of a system to carry out methods, systems and tools in accordance with the present invention.
- FIG. 16 is an example of applying memory allocation to a SIF.
- FIG. 1 shows a system 10 for generating an integrated circuit.
- a designer typically creates a behavioral description of an integrated circuit by generating source code 12 using a separate editor (not shown).
- the source code description may be written in any programming language capable of describing a circuit at the behavioral level, such as C, C++, VHDL, Verilog, Pascal, etc.
- a behavioral synthesis tool 14 reads in the source code description 12 and allows a designer to evaluate and modify the circuit architecture early in the design process.
- the source code description 12 is read into an intermediate database 16 that holds the behavioral description as a data structure.
- This data structure called a synthesis intermediate format (SIF)
- GUI graphical user interface
- the GUI 18 allows the designer to interactively and dynamically modify the memory allocation in the data structure. However, the designer may also modify the memory allocation by manually editing the original source code description, or modifying the SIF without the assistance of a GUI. For instance, the designer may issue commands to modify the memory allocation within the SIF. The designer may then quickly evaluate the area and latency associated with different memory architectures. Once the designer is satisfied with the architecture, the RTL code is generated as shown at 20 . Further processing is then performed on the RTL code to ultimately generate the integrated circuit.
- FIG. 2 shows a more detailed flow chart for generating an integrated circuit according to one embodiment of the invention.
- the behavioral synthesis tool reads in the source code describing the behavior of the integrated circuit as already described.
- the source code description can include a default set of constraints to establish the original memory allocation. Alternatively, the default constraints can be provided by a selected packing mode, or by the designer once the source code description is read into the behavioral synthesis tool.
- the behavioral synthesis tool 14 (see FIG. 1 ) reads the source code description into the intermediate database 16 and generates a data structure that is changeable by the designer.
- the synthesis tool performs an analysis of the source code description. For example, the synthesis tool searches for operators, signals, and variables in the source code description and generates the data structure based on these statements. Additionally, the synthesis tool searches for directives and uses the directives as defaults for the memory allocation in the data structure.
- the memory allocation information is stored in the intermediate database independently, meaning the information is not yet fully integrated into the SIF. This allows the designer to interactively change the memory allocation and control when such changes are applied to the SIF.
- the memory allocation information is stored as a set of resources for the design, wherein each resource represents a memory resource that may potentially be present in the final integrated circuit design.
- arrays in the source code description are also stored in the data structure.
- the data structure may be organized in many different ways. One possible organization is to have various fields associated with the resources and arrays stored in the data structure. For instance, in one embodiment the following fields could be associated with a resource stored in the data structure:
- the designer can interactively change the memory allocation for variables that are in the source code description. That is, the source code description includes variables representing arrays that are associated with memory storage (although in some cases arrays are not packed to memory).
- the memory allocation for variables representing the arrays is modified by allowing the designer to manipulate a number of constraints relating to memory allocation. For instance, a first constraint may allow the designer to choose from the many different memories available in circuit design. Additional constraints may vary the size and type of memory selected (e.g., dual port memory, single port memory, etc.). Thus, in process block 34 , the designer can choose which memories to use, the variables associated with those memories, the packing mode, etc.
- the designer is also provided the ability in process block 34 to transform the layout of the arrays into a variety of formats.
- the format used to pack an array to memory can have a significant impact on the overall memory performance of the circuit. Often the format used will dictate the number of reads and/or writes necessary to access a given number of words of an array or memory. Various formats can be chosen that emphasize keeping the size of the circuit within given specifications, while other formats can be chosen that emphasize the speed of the circuit (reducing the number of clock cycles/reads/writes). Specific array layout formats will be discussed at length with respect to FIGS. 3-11 .
- the designer can modify any of the memory allocation constraints discussed above (i.e. size, number, and type of memories, packing mode, formats) in a number of ways.
- the designer can use the GUI 18 shown in FIG. 1 to change constraints controlling memory allocation.
- the designer could manually change the constraints in the SIF or manually edit the source code description to include the constraint.
- the designer can perform an initial check to analyze the area and timing of the circuit (process block 36 ). This may be done, for example, by displaying an area versus latency graph that gives the designer some immediate feedback on whether the memory allocation is satisfactory. If the designer is unhappy with the area or timing, the designer can return to process block 34 to further modify the memory allocation, as shown by arrow 38 . On the other hand, if the designer is satisfied with the memory allocation, the RTL code can be generated and simulated (process blocks 40 and 42 ). Finally, an RTL synthesis tool can perform RTL synthesis (process block 44 ) and the gate level design can be verified and analyzed (process block 46 ).
- An array or memory can be characterized by the size and number of words.
- the first parameter of a memory or array is the word size, which is the number of bits read or written in a single access.
- the second parameter is the number of words a memory can store.
- Each word has a unique address under which it can be read or written, which is usually a number from 0 to the wordcount-1.
- Arrays can usually be indexed by an expression which is computed during runtime. Memories as hardware units can have additional parameters such as delays and number of ports.
- Transforming includes modifying the SIF appropriately to reflect the packing of the original array index to the actual memory address location. This packing is dependent on the ordering of the variables and the packing mode used. An appropriate offset is inserted for each array index access. This offset insertion is also known as address calculation.
- FIG. 16 shows three segments of code.
- the first code segment 160 is sample of basic code for declaring an array A and then assigning various words of the array to variables.
- array A is declared with an array length of 100 and word width of 32 bits. Subsequently, word 5 of array A is assigned to variable b and word 9 of array A is assigned to variable c.
- code segment 160 Assume for purposes of this example that the designer has read code segment 160 into a behavioral synthesis tool and now wishes to transform the format of this array such that it is only 50 words in width, and 64 bits wide.
- the designer would have to re-edit source code segment 160 to reflect the change, both when declaring the array and whenever the array is accessed, as shown in code segment 162 .
- Code segment 162 shows the declaration of array A changed to reflect the new size, but also the changes that must be made to the subsequent accesses to the array. In order to ensure the array accesses will still assign the correct word of array A after the size change, a new address must be calculated for the desired word. Depending on the changes made, this calculation could be quite difficult.
- the behavior synthesis tool of the current embodiment allows the designer to simply change a constraint to transform the layout of array A from 100 by 32 to 50 by 64. Since the source code segment 160 has already been read into the SIF, a provided GUI will display the array A along with its current size, 100 by 32. The designer then changes a size constraint for the array indicating the array should be transformed to a 50 by 64 format. Once confirmed, the constraint within the SIF for the size of array A is changed to reflect the designer's desired change, and the behavioral synthesis tool creates RTL code reflecting any changes in the constraints.
- the RTL code is created as if the code segment 162 had been originally read in. This can be accomplished by the behavioral synthesis tool by actually creating and editing the code segment 160 to reflect the functionality of code segment 162 , editing the SIF of code 160 to reflect the functionality of code segment 162 , or leave code segment 160 unchanged yet still create RTL code to reflect the functionality of code segment 162 .
- the designer could have manually added a size constraint to the source code segment 160 , such as that shown in code segment 164 , and then read in code segment 164 to the SIF.
- the size constraint within the SIF could be changed manually by the designer without the assistance of a GUI.
- Allowing a designer control over how arrays are packed to memory during the memory packing process in synthesizing an integrated circuit is desirable because the chosen architecture will have a significant impact on the performance of the memory system. For example, depending upon how the array words are accessed, it may be more effective to have the RAM word size different from the array word size. If two consecutive words from the array are accessed together, it may be efficient to pack two array words into a single RAM word. Or, conversely, if half of the array word is accessed often, it may be effective to split the array word into two RAM words.
- A word size: 16
- B word size: 32
- the RAM word size could be chosen to be, for instance, 16 or 32. If a designer chooses 32, the array A words could be zero-padded to make all A and B words the same size.
- Another solution would be to pack two array A words into a single RAM word.
- a third solution would be to choose 16 as the RAM word size, and split each array B word into two RAM words.
- a choice between the second and third formats would be dictated by word access patterns for the two arrays. Often there are numerous formats available for the same design description, each having advantages and disadvantages compared to other formats.
- FIG. 3 is an illustration of directly packing an array to a memory.
- array 50 and memory 52 are the same length (10 words) and width (4 bits). However, array 50 could also be packed to a sub-section of a larger memory.
- word 0 of array 50 is packed directly to word 0 of memory 52 , as are subsequent words 1 through 9 .
- Each array access results in one memory access. There is no address conversion and array addresses can be used directly as memory addresses. Therefore, direct packing is fairly simple and is processed by the behavioral synthesis tool quickly.
- FIG. 4( a ) is an illustration of packing multiple words of an array into a single word of a memory.
- Array 60 shown in FIG. 4( a ) has a length of 10 words and width of 4 bits.
- Array 60 is packed to a memory 62 that is 8 words in width, or twice the word width of array 60 . Therefore, words 0 and 1 of array 60 can be packed into word 0 of memory 62 . Likewise, words 2 and 3 of array 60 are packed to word 1 of memory 62 , and so on.
- FIG. 4( b ) is another illustration of packing multiple words of an array into a single word of a memory.
- Array 64 in FIG. 4( b ) has a word width of 4 bits.
- memory 66 has word width 12 , or three times the word width of array 64 . Therefore, words 0 , 1 and 2 of array 64 can be packed into word 0 of memory 66 . Likewise, words 3 , 4 and 5 of array 64 are packed to word 1 of memory 66 , and so on.
- Packing multiple array words to a single word of memory requires each array access to be transformed into a memory access, where certain address calculations and sub-selections of memory words have to be performed.
- Writing an element of the array requires reading the memory word first or the array element sharing the same memory word is not overwritten.
- a designer would therefore find this format useful if multiple array accesses can be packed to a single memory access. This may be the case when the source code description contains numerous loops that access the array elements in sequential order, or if the source code description always, or often, accesses the array words in pairs.
- FIGS. 5( a ) and 5 ( b ) are illustrations of packing an array into a memory using Endian formats.
- Array 70 in FIGS. 5( a ) and 5 ( b ) has an array length of 10 and word width of 4 bits.
- Array 70 is packed to a memory 72 with a word width of 8 bits, with two array words being packed to a single memory word, as discussed previously with respect to FIG. 4( a ).
- the format, or the word width or length of the array or memory are not important for purposes of using Endian formats.
- Endian formats like all of the formats described herein, can be used in combination with other formats to transform array layouts.
- FIG. 5( a ) is an illustration of packing an array into a memory using a “Little Endian” format. This format packs array 70 to memory 72 beginning at the least significant bit of each word of memory 72 . Therefore, memory 72 in FIG. 5( a ) shows words 0 and 1 of array 70 packed to word 0 of memory 72 starting at the least significant bit, words 2 and 3 of array 70 packed to word 1 of memory 72 starting at the least significant bit, and so on. Little Endian format is used by most Intel processors for personal computers using a Microsoft Windows platform.
- FIG. 5( b ) is an illustration of packing array 70 into memory 74 using a “Big Endian” format. This format packs array 70 to memory 74 beginning at the most significant bit of each word of memory 74 . Therefore, memory 74 in FIG. 5( b ) shows words 0 and 1 of array 70 packed to word 0 of memory 74 starting at the most significant bit, words 2 and 3 of array 70 packed to word 1 of memory 74 starting at the most significant bit, and so on. Big Endian format is used by most Motorola processors for personal computer using a Macintosh platform.
- Interlacing is a format which skips a specified number of words when reading from an array in order to pack the words to memory in a given order. A typical application would be if the odd addressed and even addressed words of the array are used in separate parts of the algorithm.
- FIG. 6( a ) is an illustration of packing an array into memory in an interlacing format.
- Array 80 can be packed in an interlacing format skipping three words for every word packed such that the even words of array 80 are packed to the first five words of memory 82 and the odd words of array 80 packed to the second five words of memory 82 .
- FIG. 6( b ) is another illustration of packing an array into memory in an interlacing format.
- only two words are skipped between each word of array 84 packed to memory 86 , and memory 86 is twice the word width of array 84 . Therefore, the first two words of array 84 to be packed to memory 86 , words 0 and 3 , are packed to the first word of the memory 86 . Likewise, words 6 and 9 of array 84 are then packed to the next word of memory 86 , and so on.
- FIG. 7( a ) is an illustration of packing a single word of an array into multiple words of a memory.
- FIG. 7( a ) shows array 90 with a width of 8 bits being packed to memory 92 with a length of 4 bits. Therefore, the array words are split so that the first half of array word 0 is packed to the first word of memory 92 , and the second half of array word 0 is packed to word 1 of memory 92 . The rest of the array words are split in similar fashion, such that array word 1 is split and the first half is stored in memory word 2 and the second half in memory word 3 , and so on.
- the array words can be split and packed to the memory words in order from high order bit to low order bit, or vice versa.
- memory words 0 and 1 each contain half of array word 0 in memory 92 .
- the halves of array word 0 can be packed to memory 92 in any order.
- the first 4 bits (AB 0 -AB 3 ) of array word 0 can be packed to memory word 0
- the last four bits (AB 4 -AB 7 ) of array word 0 can be packed to memory word 0 .
- each array access results in multiple memory accesses. This decreases the performance of the design but might be a design constraint, e.g. when only certain memory word sizes are available.
- FIG. 7( b ) is another illustration of packing a single word of an array into multiple words of memory.
- array 94 with a length of 10 words and width of 8 bits is packed onto memory 96 with a width of 6 bits. Selecting a memory word size which in not an exact multiple or devisor of the array word size results in one of the more complicated addressing conversions and slicing operations.
- the first array word, word 0 (8 bits), is packed to memory word 0 (6 bits), and the first 2 bits of memory word 1 . This leaves 4 bits of unused space in memory word 1 .
- the first 4 bits of the second array word, word 1 are packed to the remaining 4 bits of free space in memory word 1 , and the remaining 4 bits of array word 1 are packed to memory word 2 .
- This leaves 4 unused bits 98 (80 array bits packed to 6*14 84 memory bits), which may be allocated anywhere in memory 96 . In FIG. 7( b ), these bits 98 are allocated at the end of the memory 96 .
- FIG. 7( b ) The packing shown in FIG. 7( b ), like FIG. 7( a ), requires extensive calculations to address a certain array element in the memory. However, such a packing could be useful where available memories are very constrained. Because array elements are distributed over two memory elements, multiple memory accesses might be necessary for each array access.
- FIG. 8 is an illustration of packing an array into a customized location in a memory.
- Array 100 has a width of 8 bits and length of 4 words.
- Memory 102 is unspecified in length, but is larger than array 100 and has an array length of 12.
- the array 100 can be packed to any location in memory 102 large enough to be occupied by array 100 .
- array 100 is packed such that the first word of array 100 is packed to memory word 6 , and is located such that the first bit of array word 0 is packed to bit 4 of memory word 6 .
- Each subsequent word of array 100 is packed to the subsequent word of memory 102 , such that the first bit of the array word is located at bit 4 of the memory word.
- FIG. 9( a ) is an illustration of packing a single array into multiple memories.
- Array 110 is 10 words in length and 4 bits in width. There are two memories shown, 112 and 114 , each of which are 4 bits in width and 5 words in length.
- Array 110 can be packed to the memories in a variety of ways. For instance, array 110 can be packed to the memories 112 and 114 by alternately packing each array word to the first memory 112 and then the second 114 . Such is the case in FIG. 9( a ).
- Word 0 of array 110 is packed to word 0 of memory 112
- word 1 of array 110 is packed to word 0 of memory 114 .
- Word 2 of array 110 is then packed to word 1 of memory 112
- word 3 of array 110 is packed to word 1 of memory 114 . This format continues until the remainder of the words in array 110 are packed to memory.
- array 110 could also be packed such that the first 5 words of array 110 are packed sequentially into memory 112 and the second 5 words of array 110 are packed into memory 114 , as shown in FIG. 9( b ).
- Splitting an array into two separate memories increases the size of the overall circuit, but is effective in increasing the speed of the design because the two memories can be accessed independently. Thus, the designer has effectively enabled two words of array 110 to be accessed concurrently.
- FIG. 10 is an illustration of packing multiple arrays into a single memory.
- Two arrays 120 and 122 are shown with a length of 4 words and width of 8 bits.
- the memory 124 is of an indeterminate width, but larger than arrays 120 and 122 .
- the length of memory 124 is 12 words.
- Word 0 of array 120 is packed to word 2 of memory 120 , with bit 0 of the array word being located at bit 4 of word 2 of memory 124 .
- Each subsequent word of array 120 is packed to the subsequent word of memory 120 with the least significant bit of the array word located at bit 4 of the memory word.
- Array 122 is packed so that it occupies space in memory 124 immediately adjacent array 120 .
- word 0 of array 122 is packed to word 2 of memory 124 , as was word 0 of array 120 .
- word 0 of array 122 is displaced such that the least significant bit is located at bit 12 of the memory word.
- the subsequent words of array 122 are then packed to the subsequent words of memory 124 , with the least significant bit of each array word located at bit 12 of the memory word.
- a designer is thus given the alternative selection of increasing the speed of the circuit by packing one array onto multiple memories as shown in FIG. 9 , or reducing the number of memories and therefore, the size of the circuit, by packing multiple arrays onto the same memory as shown in FIG. 10 .
- FIG. 11 is an illustration of packing multiple arrays into a single memory with the arrays overlapping in memory usage.
- the arrays 130 and 132 and memory 134 are the same dimensions as those described with respect to FIG. 10 . However, in this example, arrays 130 and 132 have been packed such that the latter portions of word 0 and 1 of array 130 overlap in location with the beginning portions of words 2 and 3 of array 132 . If arrays 130 and 132 have a common lifetime, then their sections must be disjoint and the packing shown will cause memory allocation errors. However, if the arrays have dissimilar lifetimes, this configuration may be an effective way of conserving memory resources.
- FIG. 12 is an illustration of using resolution modes to set the default behavior of a design or to correct a designer error.
- the four arrays shown in FIG. 12( a ) were declared in source code read into a SIF, but only a first resolution mode was specified. Therefore, the positions of the arrays in FIG. 12( a ) were determined by a set of constraints for each array according to the first resolution mode.
- FIG. 12( b ) shows the positions of the four arrays after the designer subsequently changed constraints corresponding to array 144 causing it to overlap with array 142 . The designer can now be given the option of leaving the arrays positioned as shown in FIG.
- FIG. 13 shows an example of a user interface 150 for allowing the designer to modify memory resources interactively and dynamically.
- the user interface includes a display pane 152 that lists processes and array variables accessed within those processes. These processes and array variables represent the current memory allocation stored in the database 16 and are represented as graphical objects.
- the synthesis tool 14 When the synthesis tool 14 generates the data structure stored in database 16 , the source code directives regarding variables and memory allocation are identified and are used as default settings for memory allocation.
- a designer may choose to create the source code with no directives indicating memory allocation. In such a case, the designer interactively specifies the memory allocation via the GUI. Alternatively, the designer can include directives in the source code that are used as default settings.
- the array 154 selected in GUI 150 is a size 21 by 64, meaning it has words 64 bits in width, and length of 21 words.
- the display pane 152 provides a symbolic name of a resource associated with the variables.
- “dct_temp_rsc” is a memory resource used for the array 154 , named “dct_temp”.
- the GUI 150 shows a settings tab 156 used by the designer to change the memory allocation of the circuit using the provided constraints.
- the setting tab 156 in this example shows only one of the many constraints that can be provided for customizing the memory allocation of a circuit design.
- the array word width constraint can be changed via the input window 158 to a desired width.
- the display pane 154 will reflect the new width for array dct_temp. At this point the designer may make other changes such as the format of array dct_temp, other arrays, change the memory type, etc. Or, if he is satisfied, he can then select the “OK” button to apply the changes to the SIF.
- FIG. 14 shows an exemplary network.
- a server computer 170 may have an associated storage device 172 (internal or external to the server computer).
- the server computer 170 may be configured to perform any of the implementations of the method described above.
- the server computer 170 may be coupled to a network, shown generally at 174 .
- One or more client computers, such as those shown at 176 , 178 may be coupled to the network 174 and interface with the server computer 170 using a network protocol.
- FIG. 15 shows that a GUI or alternative means for allowing a user to alter memory allocation may be provided on a client.
- the client then interacts with a server for providing other aspects of a behavioral synthesis tool.
- the client computer transmits source code describing the behavior of a circuit.
- the source code could be an original source code or could be an updated version of previously sent source code.
- the source code is received and read into a behavior synthesis tool provided by the server.
- the source code is then represented in a SIF in process block 184 that allows memory allocation constraints to be modified by the client.
- memory allocation information such as memory allocation constraints, is transmitted to the client for display to a user.
- the client can modify the memory allocation information if they so desire in process block 184 , or approve the constraints and leave them unmodified. If the user modifies the constraints, the modifications are transmitted to the server where process block 190 updates the memory allocation in the SIF based upon the modifications, and process blocks 186 and 188 can be repeated until the user approves the current memory allocation.
- process block 192 is processed to create RTL code from the SIF containing the approved memory allocation.
- Process block 194 then shows the client receiving the RTL code from the server.
- GUI GUI
- the user interface can be modified to illustrate the variables and resources in a different way.
- the particular user interface used is not important to the invention.
- an array of a first format can be transformed into an intermediate array in a second format, and then directly packed into a memory.
- the array of the first format can be transformed as it is being packed into the memory, such that the array is then stored in memory in the desired second format.
- database 16 can be structured in a wide variety of ways. The particular data structure used is not important to the invention.
- variables that are associated with single registers in an integrated circuit may also be modified using the formats or tools described.
- any single variable or non-array data can be represented as an array and processed by embodiments of the described behavioral synthesis tool.
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Design And Manufacture Of Integrated Circuits (AREA)
- Dram (AREA)
Abstract
A behavioral synthesis tool for generating an integrated circuit design is described. The behavioral synthesis tool allows a designer to interactively allocate variables or arrays to memory resources without having to modify a source code description of the integrated circuit. The behavioral synthesis tool reads the source code description and generates a synthesis intermediate format stored in memory. The synthesis tool searches the in-memory synthesis intermediate format to find arrays for each process. The arrays are then listed in a graphical user interface (GUI). The GUI allows the designer to create memory resources, specifying the type of memory, the packing mode, etc. The designer is also provided the ability to vary the format among a plurality of formats used to pack arrays to memory during the memory packing process. Upon completion of modifying the memory allocation, the designer saves the changes and such changes are effectuated by automatically updating the synthesis intermediate format.
Description
- The present invention relates generally to behavioral synthesis tools for creating integrated circuits, and more particularly relates to behavioral synthesis tools that provide for improved packing of arrays to memory.
- With the proliferation of data-intensive applications, such as sound, image and video processing, the memory subsystem has become an important focus of electronic system design. More than three-quarters of a data-intensive system can be made up of storage components, making the memory subsystem the most crucial part of the design of an integrated circuit. Most of these systems need to be high-speed due to the large amounts of data involved and must be designed carefully to avoid a solution that is larger than expected.
- The design of an integrated circuit no longer begins with a circuit diagram. Instead, it begins with a software program that describes the behavior or functionality of a circuit. This software program is a source code description that defines an algorithm to be performed with limited implementation details. Designers direct behavioral synthesis tools to convert the source code description into a register transfer level (RTL) description. The RTL description is used to ultimately generate a netlist that includes a list of components in the circuit and the interconnections between the components. This netlist is used to create the physical integrated circuit.
- Arrays provide a powerful and convenient method for modeling the behavior of memories in source code descriptions. That is, behavioral descriptions are used to manipulate groups of data in an abstract manner using arrays. These arrays are, under the control of the designer, packed to memory. Behavioral synthesis tools automatically construct the logic to control the memory, freeing the designer to explore architectures using different memories with different characteristics (e.g., synchronous versus asynchronous, single port versus dual port), and make intelligent decisions about an appropriate implementation for a design.
- To pack arrays to a memory, the designer must specifically assign the variables representing the arrays to a memory in source code and specify the type of memory and other memory parameters. This is accomplished using a set of attributes or directives. For example, Synopsis® tools use a “pragma” statement.
- After the designer designates the details of memory allocation in the source code description (using pragma statements or other directives), the designer runs the source code description through the synthesis tool. The synthesis tool generates a report that the designer can use to analyze the performance of the circuit. For example, the user can examine the speed and area of the circuit to determine whether the current memory allocation is acceptable. If the memory allocation is not acceptable, the designer must return to an editor, re-edit the source code description to change the details of memory allocation, and run the source code description through the synthesis tool again. Such a technique for modifying the memory allocation is time consuming and inefficient and gives the designer only a limited amount of options for designating how memory will be allocated.
- It is desirable, therefore, to provide a method and synthesis tool that allows a designer to modify memory resources more quickly and simply as well as provide the designer with more advanced options for specifying how arrays will be packed to memory.
- Methods, systems, and behavioral synthesis tools are provided that allow a designer to change the format of how an array is packed to memory during the memory packing process when converting a source code description of a circuit to an RTL description. The designer can write a source code description at the algorithmic level describing the behavior of the circuit to be designed. The designer then uses a behavioral synthesis tool to generate a number of different architectural designs using synthesis techniques. Each design can implement differing memory allocation by allowing the designer to change a number of different constraints such as whether to use RAMs vs. registers, which type of RAM to use, how many memories to use, whether to use on or off-chip memory, etc. The designer is also provided the ability to transform the layout format of the arrays in the source code description such that the designer can quickly and easily control the packing of the arrays into the chosen memories. These constraints can be changed either using a graphical user interface, changing constraints within the behavioral synthesis tool, or by manually manipulating the source code description. The behavioral synthesis tool then creates a report for each design to analyze the performance of the circuit. For example, the designer can examine and compare the speed and area of the circuits created from each of the designs to determine whether the memory performance and size are acceptable.
- A source code file having a description of the hardware is read into a database within the behavioral synthesis tool. The behavioral synthesis tool analyzes the source code description and generates a data structure associated with the source code description. The designer can then modify a number of constraints dictating the details of memory allocation such as type of memory, number of memories, memory size, etc. Thus, rather than having to re-edit the source code description, the designer can change these memory constraints interactively and dynamically during the memory packing process to control how arrays are packed into memory. Once the designer is satisfied with the design, an RTL description is produced from the data structure.
- A number of additional options for packing arrays into memory are provided by the behavioral synthesis tool to the designer so that the designer may select one of a plurality of array layout formats during the memory packing process. Providing the designer the ability to transform the layout of arrays dynamically allows the designer a fast, efficient method of customizing the memory allocation of the circuit to be synthesized.
- Further features and advantages of the invention will become apparent with reference to the following detailed description and accompanying drawings.
-
FIG. 1 is a block diagram of a system for allowing interactive memory allocation. -
FIG. 2 is a detailed diagram illustrating a design flow for creating an integrated circuit using the system ofFIG. 1 . -
FIG. 3 is an illustration of directly packing an array to a memory. -
FIG. 4( a) is an illustration of packing multiple words of an array into a single word of a memory. -
FIG. 4( b) is another illustration of packing multiple words of an array into a single word of a memory. -
FIG. 5( a) is an illustration of packing an array into a memory using a Little Endian format. -
FIG. 5( b) is an illustration of packing an array into a memory using a Big Endian format. -
FIG. 6( a) is an illustration of packing an array into memory in an interlacing format. -
FIG. 6( b) is another illustration of packing an array into memory in an interlacing format. -
FIG. 7( a) is an illustration of packing a single word of an array into multiple words of a memory. -
FIG. 7( b) is another illustration of packing a single word of an array into multiple words of memory. -
FIG. 8 is an illustration of packing an array into a customized location in a memory. -
FIG. 9( a) is an illustration of packing a single array into multiple memories. -
FIG. 9( b) is another illustration of packing a single array into multiple memories. -
FIG. 10 is an illustration of packing multiple arrays into a single memory. -
FIG. 11 is an illustration of packing multiple arrays into a single memory with the arrays overlapping in memory usage. -
FIGS. 12( a-c) are illustrations of using resolution modes to define default behavior and correct designer error. -
FIG. 13 shows an example of a user interface allowing the designer to modify memory resources in a behavioral synthesis tool. -
FIG. 14 is a block diagram of an embodiment of a network environment for implementing a behavioral synthesis tool. -
FIG. 15 is a block diagram of an embodiment of a system to carry out methods, systems and tools in accordance with the present invention. -
FIG. 16 is an example of applying memory allocation to a SIF. -
FIG. 1 shows asystem 10 for generating an integrated circuit. A designer typically creates a behavioral description of an integrated circuit by generatingsource code 12 using a separate editor (not shown). The source code description may be written in any programming language capable of describing a circuit at the behavioral level, such as C, C++, VHDL, Verilog, Pascal, etc. Once thesource code description 12 is complete, abehavioral synthesis tool 14 reads in thesource code description 12 and allows a designer to evaluate and modify the circuit architecture early in the design process. In particular, thesource code description 12 is read into anintermediate database 16 that holds the behavioral description as a data structure. This data structure, called a synthesis intermediate format (SIF), is modifiable by the user through a graphical user interface (GUI) 18. TheGUI 18 allows the designer to interactively and dynamically modify the memory allocation in the data structure. However, the designer may also modify the memory allocation by manually editing the original source code description, or modifying the SIF without the assistance of a GUI. For instance, the designer may issue commands to modify the memory allocation within the SIF. The designer may then quickly evaluate the area and latency associated with different memory architectures. Once the designer is satisfied with the architecture, the RTL code is generated as shown at 20. Further processing is then performed on the RTL code to ultimately generate the integrated circuit. -
FIG. 2 shows a more detailed flow chart for generating an integrated circuit according to one embodiment of the invention. Inprocess block 30, the behavioral synthesis tool reads in the source code describing the behavior of the integrated circuit as already described. The source code description can include a default set of constraints to establish the original memory allocation. Alternatively, the default constraints can be provided by a selected packing mode, or by the designer once the source code description is read into the behavioral synthesis tool. Inprocess block 32, the behavioral synthesis tool 14 (seeFIG. 1 ) reads the source code description into theintermediate database 16 and generates a data structure that is changeable by the designer. When generating the data structure, the synthesis tool performs an analysis of the source code description. For example, the synthesis tool searches for operators, signals, and variables in the source code description and generates the data structure based on these statements. Additionally, the synthesis tool searches for directives and uses the directives as defaults for the memory allocation in the data structure. - At this point in the flow, the memory allocation information is stored in the intermediate database independently, meaning the information is not yet fully integrated into the SIF. This allows the designer to interactively change the memory allocation and control when such changes are applied to the SIF. The memory allocation information is stored as a set of resources for the design, wherein each resource represents a memory resource that may potentially be present in the final integrated circuit design. Additionally, arrays in the source code description are also stored in the data structure. The data structure may be organized in many different ways. One possible organization is to have various fields associated with the resources and arrays stored in the data structure. For instance, in one embodiment the following fields could be associated with a resource stored in the data structure:
- A unique identification for the resource
- A type of memory to be used for the resource
- A list of variables packed to the resource
- A packing mode for the resource
- A flag indicating whether the resource is external to the design
- A format for packing variables to the resource
- Likewise, in one embodiment the following fields could be associated with arrays stored in the data structure:
- A unique identification for the resource
- An array length
- An array width
- A start address in a resource
- A start bit in the resource
- A format for packing the array to the resource
- In
process block 34, the designer can interactively change the memory allocation for variables that are in the source code description. That is, the source code description includes variables representing arrays that are associated with memory storage (although in some cases arrays are not packed to memory). The memory allocation for variables representing the arrays is modified by allowing the designer to manipulate a number of constraints relating to memory allocation. For instance, a first constraint may allow the designer to choose from the many different memories available in circuit design. Additional constraints may vary the size and type of memory selected (e.g., dual port memory, single port memory, etc.). Thus, inprocess block 34, the designer can choose which memories to use, the variables associated with those memories, the packing mode, etc. - In order to give the designer more flexibility in design, the designer is also provided the ability in
process block 34 to transform the layout of the arrays into a variety of formats. The format used to pack an array to memory can have a significant impact on the overall memory performance of the circuit. Often the format used will dictate the number of reads and/or writes necessary to access a given number of words of an array or memory. Various formats can be chosen that emphasize keeping the size of the circuit within given specifications, while other formats can be chosen that emphasize the speed of the circuit (reducing the number of clock cycles/reads/writes). Specific array layout formats will be discussed at length with respect toFIGS. 3-11 . - The designer can modify any of the memory allocation constraints discussed above (i.e. size, number, and type of memories, packing mode, formats) in a number of ways. The designer can use the
GUI 18 shown inFIG. 1 to change constraints controlling memory allocation. Alternatively, the designer could manually change the constraints in the SIF or manually edit the source code description to include the constraint. - After memory is properly allocated, the designer can perform an initial check to analyze the area and timing of the circuit (process block 36). This may be done, for example, by displaying an area versus latency graph that gives the designer some immediate feedback on whether the memory allocation is satisfactory. If the designer is unhappy with the area or timing, the designer can return to process block 34 to further modify the memory allocation, as shown by
arrow 38. On the other hand, if the designer is satisfied with the memory allocation, the RTL code can be generated and simulated (process blocks 40 and 42). Finally, an RTL synthesis tool can perform RTL synthesis (process block 44) and the gate level design can be verified and analyzed (process block 46). - For each array or memory, there is a fixed data block, which is read from or written into it at the same time. This fixed data block is called a word. An array or memory can be characterized by the size and number of words. The first parameter of a memory or array is the word size, which is the number of bits read or written in a single access. The second parameter is the number of words a memory can store. Each word has a unique address under which it can be read or written, which is usually a number from 0 to the wordcount-1. Arrays can usually be indexed by an expression which is computed during runtime. Memories as hardware units can have additional parameters such as delays and number of ports.
- Further details are now given on how the memory allocation is applied to the SIF. After the designer is satisfied with the memory allocation, the designer directs the GUI to apply the memory allocation information to the SIF. Thus, at this point any changes the designer has made to the memory allocation are reflected in the database by modifying the independent set of resources and their field information. Applying this information to SIF involves several steps:
- 1. Create a memory data object representing each memory resource. This involves determining the size of the memory based on the variables packed to the memory and the size of the variables, along with the packing mode. Also, since the original variable index may get packed to a different memory address (based on the packing mode and the order of variables on the memory), offsets are computed for each array/index.
- 2. Transform all read/write accesses to any of the variables packed to the memory resource into corresponding read/write(s) to the created memory data object in
step 1. Transforming includes modifying the SIF appropriately to reflect the packing of the original array index to the actual memory address location. This packing is dependent on the ordering of the variables and the packing mode used. An appropriate offset is inserted for each array index access. This offset insertion is also known as address calculation. - Referring to
FIG. 16 , an example is given of how memory allocation is applied to the SIF.FIG. 16 shows three segments of code. Thefirst code segment 160 is sample of basic code for declaring an array A and then assigning various words of the array to variables. Insegment 160, array A is declared with an array length of 100 and word width of 32 bits. Subsequently,word 5 of array A is assigned to variable b andword 9 of array A is assigned to variable c. - Assume for purposes of this example that the designer has read
code segment 160 into a behavioral synthesis tool and now wishes to transform the format of this array such that it is only 50 words in width, and 64 bits wide. At this point using prior methods, the designer would have to re-editsource code segment 160 to reflect the change, both when declaring the array and whenever the array is accessed, as shown incode segment 162.Code segment 162 shows the declaration of array A changed to reflect the new size, but also the changes that must be made to the subsequent accesses to the array. In order to ensure the array accesses will still assign the correct word of array A after the size change, a new address must be calculated for the desired word. Depending on the changes made, this calculation could be quite difficult. Thus, manually producing this new code requires substantial editing time on the part of the designer and is error prone even for the simplest code such as that shown inFIG. 16 . Code written to describe the behavior of integrated circuits is often much more complex, and therefore the time and possibility of error rise accordingly. - However, the behavior synthesis tool of the current embodiment allows the designer to simply change a constraint to transform the layout of array A from 100 by 32 to 50 by 64. Since the
source code segment 160 has already been read into the SIF, a provided GUI will display the array A along with its current size, 100 by 32. The designer then changes a size constraint for the array indicating the array should be transformed to a 50 by 64 format. Once confirmed, the constraint within the SIF for the size of array A is changed to reflect the designer's desired change, and the behavioral synthesis tool creates RTL code reflecting any changes in the constraints. In other words, even thoughcode segment 160 was read into the SIF, due to the designer's configuration of the constraints through the GUI, the RTL code is created as if thecode segment 162 had been originally read in. This can be accomplished by the behavioral synthesis tool by actually creating and editing thecode segment 160 to reflect the functionality ofcode segment 162, editing the SIF ofcode 160 to reflect the functionality ofcode segment 162, or leavecode segment 160 unchanged yet still create RTL code to reflect the functionality ofcode segment 162. - Alternatively, in another embodiment, the designer could have manually added a size constraint to the
source code segment 160, such as that shown incode segment 164, and then read incode segment 164 to the SIF. In yet another embodiment, the size constraint within the SIF could be changed manually by the designer without the assistance of a GUI. - Allowing a designer control over how arrays are packed to memory during the memory packing process in synthesizing an integrated circuit is desirable because the chosen architecture will have a significant impact on the performance of the memory system. For example, depending upon how the array words are accessed, it may be more effective to have the RAM word size different from the array word size. If two consecutive words from the array are accessed together, it may be efficient to pack two array words into a single RAM word. Or, conversely, if half of the array word is accessed often, it may be effective to split the array word into two RAM words.
- Consider two arrays A (word size: 16) and B (word size: 32) are to be packed together. The RAM word size could be chosen to be, for instance, 16 or 32. If a designer chooses 32, the array A words could be zero-padded to make all A and B words the same size. The solution just suggested is obviously quite wasteful in terms of memory usage. Another solution would be to pack two array A words into a single RAM word. A third solution would be to choose 16 as the RAM word size, and split each array B word into two RAM words. A choice between the second and third formats would be dictated by word access patterns for the two arrays. Often there are numerous formats available for the same design description, each having advantages and disadvantages compared to other formats.
-
FIG. 3 is an illustration of directly packing an array to a memory. In this example,array 50 andmemory 52 are the same length (10 words) and width (4 bits). However,array 50 could also be packed to a sub-section of a larger memory. In order to packarray 50 tomemory 52,word 0 ofarray 50 is packed directly toword 0 ofmemory 52, as aresubsequent words 1 through 9. Each array access results in one memory access. There is no address conversion and array addresses can be used directly as memory addresses. Therefore, direct packing is fairly simple and is processed by the behavioral synthesis tool quickly. - In many cases, access to memory elements is the bottleneck of a design, because it limits the maximum parallelism of the performed functionality. One option is to increase the width of a memory word, so each memory access reads or writes multiple array words. Packing an array to a memory with larger word size is a typical transformation to increase the throughput of the memory port as an alternative to memories with multiple ports.
FIG. 4( a) is an illustration of packing multiple words of an array into a single word of a memory.Array 60 shown inFIG. 4( a) has a length of 10 words and width of 4 bits.Array 60 is packed to amemory 62 that is 8 words in width, or twice the word width ofarray 60. Therefore,words array 60 can be packed intoword 0 ofmemory 62. Likewise,words array 60 are packed toword 1 ofmemory 62, and so on. -
FIG. 4( b) is another illustration of packing multiple words of an array into a single word of a memory.Array 64 inFIG. 4( b) has a word width of 4 bits. However,memory 66 hasword width 12, or three times the word width ofarray 64. Therefore,words array 64 can be packed intoword 0 ofmemory 66. Likewise,words array 64 are packed toword 1 ofmemory 66, and so on. - Packing multiple array words to a single word of memory requires each array access to be transformed into a memory access, where certain address calculations and sub-selections of memory words have to be performed. Writing an element of the array requires reading the memory word first or the array element sharing the same memory word is not overwritten. In other words, each array read transforms into a memory read and an array write transforms into multiple memory accesses. A designer would therefore find this format useful if multiple array accesses can be packed to a single memory access. This may be the case when the source code description contains numerous loops that access the array elements in sequential order, or if the source code description always, or often, accesses the array words in pairs.
-
FIGS. 5( a) and 5(b) are illustrations of packing an array into a memory using Endian formats.Array 70 inFIGS. 5( a) and 5(b) has an array length of 10 and word width of 4 bits.Array 70 is packed to amemory 72 with a word width of 8 bits, with two array words being packed to a single memory word, as discussed previously with respect toFIG. 4( a). However, the format, or the word width or length of the array or memory, are not important for purposes of using Endian formats. Endian formats, like all of the formats described herein, can be used in combination with other formats to transform array layouts. -
FIG. 5( a) is an illustration of packing an array into a memory using a “Little Endian” format. This format packsarray 70 tomemory 72 beginning at the least significant bit of each word ofmemory 72. Therefore,memory 72 inFIG. 5( a) showswords array 70 packed toword 0 ofmemory 72 starting at the least significant bit,words array 70 packed toword 1 ofmemory 72 starting at the least significant bit, and so on. Little Endian format is used by most Intel processors for personal computers using a Microsoft Windows platform. -
FIG. 5( b) is an illustration of packingarray 70 intomemory 74 using a “Big Endian” format. This format packsarray 70 tomemory 74 beginning at the most significant bit of each word ofmemory 74. Therefore,memory 74 inFIG. 5( b) showswords array 70 packed toword 0 ofmemory 74 starting at the most significant bit,words array 70 packed toword 1 ofmemory 74 starting at the most significant bit, and so on. Big Endian format is used by most Motorola processors for personal computer using a Macintosh platform. - Interlacing is a format which skips a specified number of words when reading from an array in order to pack the words to memory in a given order. A typical application would be if the odd addressed and even addressed words of the array are used in separate parts of the algorithm.
FIG. 6( a) is an illustration of packing an array into memory in an interlacing format.Array 80 can be packed in an interlacing format skipping three words for every word packed such that the even words ofarray 80 are packed to the first five words ofmemory 82 and the odd words ofarray 80 packed to the second five words ofmemory 82. -
FIG. 6( b) is another illustration of packing an array into memory in an interlacing format. In this example, only two words are skipped between each word ofarray 84 packed tomemory 86, andmemory 86 is twice the word width ofarray 84. Therefore, the first two words ofarray 84 to be packed tomemory 86,words memory 86. Likewise,words array 84 are then packed to the next word ofmemory 86, and so on. -
FIG. 7( a) is an illustration of packing a single word of an array into multiple words of a memory.FIG. 7( a) showsarray 90 with a width of 8 bits being packed tomemory 92 with a length of 4 bits. Therefore, the array words are split so that the first half ofarray word 0 is packed to the first word ofmemory 92, and the second half ofarray word 0 is packed toword 1 ofmemory 92. The rest of the array words are split in similar fashion, such thatarray word 1 is split and the first half is stored inmemory word 2 and the second half inmemory word 3, and so on. The array words can be split and packed to the memory words in order from high order bit to low order bit, or vice versa. For instance,memory words array word 0 inmemory 92. The halves ofarray word 0 can be packed tomemory 92 in any order. The first 4 bits (AB0-AB3) ofarray word 0 can be packed tomemory word 0, or the last four bits (AB4-AB7) ofarray word 0 can be packed tomemory word 0. - In this case each array access results in multiple memory accesses. This decreases the performance of the design but might be a design constraint, e.g. when only certain memory word sizes are available.
-
FIG. 7( b) is another illustration of packing a single word of an array into multiple words of memory. InFIG. 7( b),array 94 with a length of 10 words and width of 8 bits is packed ontomemory 96 with a width of 6 bits. Selecting a memory word size which in not an exact multiple or devisor of the array word size results in one of the more complicated addressing conversions and slicing operations. The first array word, word 0 (8 bits), is packed to memory word 0 (6 bits), and the first 2 bits ofmemory word 1. This leaves 4 bits of unused space inmemory word 1. Therefore, the first 4 bits of the second array word,word 1, are packed to the remaining 4 bits of free space inmemory word 1, and the remaining 4 bits ofarray word 1 are packed tomemory word 2. This continues until all array words have been packed tomemory 96. In thiscase 14 memory words are required to hold all 80 bits ofarray 94. This leaves 4 unused bits 98 (80 array bits packed to 6*14=84 memory bits), which may be allocated anywhere inmemory 96. InFIG. 7( b), thesebits 98 are allocated at the end of thememory 96. - The packing shown in
FIG. 7( b), likeFIG. 7( a), requires extensive calculations to address a certain array element in the memory. However, such a packing could be useful where available memories are very constrained. Because array elements are distributed over two memory elements, multiple memory accesses might be necessary for each array access. -
FIG. 8 is an illustration of packing an array into a customized location in a memory.Array 100 has a width of 8 bits and length of 4 words.Memory 102 is unspecified in length, but is larger thanarray 100 and has an array length of 12. Thearray 100 can be packed to any location inmemory 102 large enough to be occupied byarray 100. InFIG. 8 ,array 100 is packed such that the first word ofarray 100 is packed tomemory word 6, and is located such that the first bit ofarray word 0 is packed tobit 4 ofmemory word 6. Each subsequent word ofarray 100 is packed to the subsequent word ofmemory 102, such that the first bit of the array word is located atbit 4 of the memory word. -
FIG. 9( a) is an illustration of packing a single array into multiple memories.Array 110 is 10 words in length and 4 bits in width. There are two memories shown, 112 and 114, each of which are 4 bits in width and 5 words in length.Array 110 can be packed to the memories in a variety of ways. For instance,array 110 can be packed to thememories first memory 112 and then the second 114. Such is the case inFIG. 9( a).Word 0 ofarray 110 is packed toword 0 ofmemory 112, andword 1 ofarray 110 is packed toword 0 ofmemory 114.Word 2 ofarray 110 is then packed toword 1 ofmemory 112, andword 3 ofarray 110 is packed toword 1 ofmemory 114. This format continues until the remainder of the words inarray 110 are packed to memory. - Alternatively,
array 110 could also be packed such that the first 5 words ofarray 110 are packed sequentially intomemory 112 and the second 5 words ofarray 110 are packed intomemory 114, as shown inFIG. 9( b). Splitting an array into two separate memories increases the size of the overall circuit, but is effective in increasing the speed of the design because the two memories can be accessed independently. Thus, the designer has effectively enabled two words ofarray 110 to be accessed concurrently. -
FIG. 10 is an illustration of packing multiple arrays into a single memory. Twoarrays memory 124 is of an indeterminate width, but larger thanarrays memory 124 is 12 words.Word 0 ofarray 120 is packed toword 2 ofmemory 120, withbit 0 of the array word being located atbit 4 ofword 2 ofmemory 124. Each subsequent word ofarray 120 is packed to the subsequent word ofmemory 120 with the least significant bit of the array word located atbit 4 of the memory word. -
Array 122 is packed so that it occupies space inmemory 124 immediatelyadjacent array 120. Thus,word 0 ofarray 122 is packed toword 2 ofmemory 124, as wasword 0 ofarray 120. However,word 0 ofarray 122 is displaced such that the least significant bit is located atbit 12 of the memory word. The subsequent words ofarray 122 are then packed to the subsequent words ofmemory 124, with the least significant bit of each array word located atbit 12 of the memory word. - A designer is thus given the alternative selection of increasing the speed of the circuit by packing one array onto multiple memories as shown in
FIG. 9 , or reducing the number of memories and therefore, the size of the circuit, by packing multiple arrays onto the same memory as shown inFIG. 10 . -
FIG. 11 is an illustration of packing multiple arrays into a single memory with the arrays overlapping in memory usage. Thearrays memory 134 are the same dimensions as those described with respect toFIG. 10 . However, in this example,arrays word array 130 overlap in location with the beginning portions ofwords array 132. Ifarrays - The formats described with respect to
FIGS. 3-11 allow a designer flexibility in adjusting the constraints that dictate an array layout format for packing the array into another array or into memory. For area-sensitive designs, it is tempting to merge all data into one memory; however this will constrain the memory accesses far more than if each array is packed to a separate memory. Greater speed through concurrency can be achieved by using multiple memories when available, with the drawback of a greater circuit size. - It is also noteworthy that the described formats can be used either in conjunction with resolution modes.
FIG. 12 is an illustration of using resolution modes to set the default behavior of a design or to correct a designer error. Assume for the purposes of example that the four arrays shown inFIG. 12( a) were declared in source code read into a SIF, but only a first resolution mode was specified. Therefore, the positions of the arrays inFIG. 12( a) were determined by a set of constraints for each array according to the first resolution mode.FIG. 12( b) then shows the positions of the four arrays after the designer subsequently changed constraints corresponding toarray 144 causing it to overlap witharray 142. The designer can now be given the option of leaving the arrays positioned as shown inFIG. 12( b) (overlapping), changing constraints to movearray memory 140 based on a newly selected resolution mode. For instance, the designer could choose to correct the problem by selecting a second resolution mode as a basis for determining a new position forarray 144, as shown inFIG. 12( c). The resolution mode can intelligently handle the task of repositioning thearray 144 in a variety of ways, such as moving the array in any direction, resizing the array, packing the array to another memory resource, etc. -
FIG. 13 shows an example of auser interface 150 for allowing the designer to modify memory resources interactively and dynamically. The user interface includes adisplay pane 152 that lists processes and array variables accessed within those processes. These processes and array variables represent the current memory allocation stored in thedatabase 16 and are represented as graphical objects. When thesynthesis tool 14 generates the data structure stored indatabase 16, the source code directives regarding variables and memory allocation are identified and are used as default settings for memory allocation. Using the GUI, a designer may choose to create the source code with no directives indicating memory allocation. In such a case, the designer interactively specifies the memory allocation via the GUI. Alternatively, the designer can include directives in the source code that are used as default settings. - For example, the
array 154 selected inGUI 150 is asize 21 by 64, meaning it haswords 64 bits in width, and length of 21 words. Thedisplay pane 152 provides a symbolic name of a resource associated with the variables. In this case, “dct_temp_rsc” is a memory resource used for thearray 154, named “dct_temp”. TheGUI 150 shows asettings tab 156 used by the designer to change the memory allocation of the circuit using the provided constraints. Thesetting tab 156 in this example shows only one of the many constraints that can be provided for customizing the memory allocation of a circuit design. Here, the array word width constraint can be changed via theinput window 158 to a desired width. Once a new width in entered, thedisplay pane 154 will reflect the new width for array dct_temp. At this point the designer may make other changes such as the format of array dct_temp, other arrays, change the memory type, etc. Or, if he is satisfied, he can then select the “OK” button to apply the changes to the SIF. - Any of the aspects of the methods, systems and behavioral synthesis tools described above may be performed in a distributed computer network.
FIG. 14 shows an exemplary network. Aserver computer 170 may have an associated storage device 172 (internal or external to the server computer). Theserver computer 170 may be configured to perform any of the implementations of the method described above. Theserver computer 170 may be coupled to a network, shown generally at 174. One or more client computers, such as those shown at 176, 178, may be coupled to thenetwork 174 and interface with theserver computer 170 using a network protocol. -
FIG. 15 shows that a GUI or alternative means for allowing a user to alter memory allocation may be provided on a client. The client then interacts with a server for providing other aspects of a behavioral synthesis tool. For instance, inprocess block 180, the client computer transmits source code describing the behavior of a circuit. The source code could be an original source code or could be an updated version of previously sent source code. Inprocess block 182, the source code is received and read into a behavior synthesis tool provided by the server. The source code is then represented in a SIF in process block 184 that allows memory allocation constraints to be modified by the client. Inprocess block 186, memory allocation information, such as memory allocation constraints, is transmitted to the client for display to a user. The client can modify the memory allocation information if they so desire inprocess block 184, or approve the constraints and leave them unmodified. If the user modifies the constraints, the modifications are transmitted to the server whereprocess block 190 updates the memory allocation in the SIF based upon the modifications, and process blocks 186 and 188 can be repeated until the user approves the current memory allocation. When the user does approve the memory allocation, process block 192 is processed to create RTL code from the SIF containing the approved memory allocation.Process block 194 then shows the client receiving the RTL code from the server. - Having illustrated and described the principles of the illustrated embodiments, it will be apparent to those skilled in the art that the embodiments can be modified in arrangement and detail without departing from such principles.
- For example, although a particular GUI was shown, the user interface can be modified to illustrate the variables and resources in a different way. The particular user interface used is not important to the invention.
- Also, the transformation of arrays from one format to another during the packing process can be accomplished in a variety of ways. For instance, an array of a first format can be transformed into an intermediate array in a second format, and then directly packed into a memory. Alternatively, the array of the first format can be transformed as it is being packed into the memory, such that the array is then stored in memory in the desired second format.
- Although the formats and methods described herein are generally illustrated in isolation for purposes of clarity, one of skill in the art will recognize that the methods and formats for transforming array layout described herein may be combined or modified. For instance, an array being packed into a customized location, such as shown in
FIG. 8 , may be packed to the customized location in either of the Endian formats shown inFIG. 5 , or packed in an interlacing format as shown inFIGS. 6( a) and 6(b). - Additionally, the data structure stored in
database 16 can be structured in a wide variety of ways. The particular data structure used is not important to the invention. - Moreover, although the description focuses on arrays, variables that are associated with single registers in an integrated circuit may also be modified using the formats or tools described. Furthermore, any single variable or non-array data can be represented as an array and processed by embodiments of the described behavioral synthesis tool.
- Although a particular data structure is illustrated, those skilled in the art recognize that a wide variety of data structures may be used.
- In view of the many possible embodiments to which the principles of our invention may be applied, it should be recognized that the illustrated embodiment is only a preferred example of the invention and should not be taken as a limitation on the scope of the invention. Rather, the scope of the invention is defined by the following claims. We therefore claim as our invention all that comes within the scope of these claims.
Claims (21)
1.-51. (canceled)
52. A method of interactively allocating memory in a behavioral synthesis tool, comprising:
analyzing a source code description describing behavior of an integrated circuit, the source code description including one or more array variables;
representing the source code description in an intermediate format, the intermediate format including memory allocation information for the one or more array variables; and
allowing a user to change the memory allocation information for at least one of the one or more array variables while the source code description is represented in the intermediate format and before a register-transfer-level (RTL) description of the integrated circuit is generated using the memory allocation information.
53. The method of claim 52 , wherein the method further comprises providing a graphical user interface through which the user can indicate desired changes to the memory allocation information.
54. The method of claim 52 , further comprising modifying the memory allocation information in the intermediate format in response to changes input from the user.
55. The method of claim 52 , further comprising modifying the source code description in response to changes input from the user.
56. The method of claim 52 , wherein the memory allocation information for one of the one or more array variables includes an array length, and wherein the method further comprises changing the array length of the one of the one or more array variables in response to input from the user.
57. The method of claim 52 , wherein the memory allocation information for one of the one or more array variables includes an array width, and wherein the method further comprises changing the array width of the one of the one or more array variables in response to input from the user.
58. The method of claim 52 , wherein the memory allocation information for one of the one or more array variables includes a memory type, and wherein the method further comprises changing the memory type for the one of the one or more array variables in response to input from the user.
59. The method of claim 52 , wherein the memory allocation information for one of the one or more array variables includes a memory packing format, and wherein the method further comprises changing the memory packing format for the one of the one or more array variables in response to input from the user.
60. The method of claim 52 , further comprising displaying an area versus latency graph for at least one of the one or more array variables using current memory allocation information and before the RTL description of the integrated circuit is generated using the memory allocation information.
61. The method of claim 52 , further comprising generating an RTL description of the integrated circuit using the memory allocation information.
62. A system, comprising:
means for representing a source code description describing behavior of an integrated circuit in an intermediate format, the source code description including one or more array variables, and the intermediate format including memory allocation information for the one or more array variables; and
means for allowing a user to change the memory allocation information for at least one of the one or more array variables while the source code description is represented in the intermediate format and before a register-transfer-level (RTL) description of the integrated circuit is generated using the memory allocation information.
63. The system of claim 62 , further comprising means for modifying the memory allocation information in the intermediate format in response to changes input from the user.
64. The system of claim 62 , further comprising means for modifying the source code description in response to changes input from the user.
65. A synthesis system, comprising:
a memory storing an intermediate format representation of a source code description, the source code description and the intermediate format representation describing behavior of an integrated circuit and including one or more array variables; and
a graphical user interface that allows a user to modify memory allocation information for at least one of the one or more array variables before a register-transfer-level (RTL) description of the integrated circuit is generated using the memory allocation information.
66. The synthesis system of claim 65 , wherein the graphical user interface displays a list of processes associated with the source code description and array variables accessed with the processes.
67. The synthesis system of claim 65 , wherein the graphical user interface allows a user to modify an array length of at least one of the one or more array variables.
68. The synthesis system of claim 65 , wherein the graphical user interface allows a user to modify a memory type to allocated to at least one of the one or more array variables.
69. The synthesis system of claim 65 , wherein the graphical user interface allows a user to modify a memory packing format of at least one of the one or more array variables.
70. The synthesis system of claim 65 , further comprising a display configured to display an area versus latency graph for at least one of the one or more array variables using current memory allocation information and before the RTL description of the integrated circuit is generated using the memory allocation information.
71. The synthesis system of claim 65 , further comprising an RTL generator configured to generate an RTL description of the integrated circuit using the memory allocation information.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/002,617 US20080172646A1 (en) | 2002-03-08 | 2007-12-17 | Array transformation in a behavioral synthesis tool |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US36267902P | 2002-03-08 | 2002-03-08 | |
US10/383,274 US7310787B2 (en) | 2002-03-08 | 2003-03-07 | Array transformation in a behavioral synthesis tool |
US12/002,617 US20080172646A1 (en) | 2002-03-08 | 2007-12-17 | Array transformation in a behavioral synthesis tool |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/383,274 Continuation US7310787B2 (en) | 2002-03-08 | 2003-03-07 | Array transformation in a behavioral synthesis tool |
Publications (1)
Publication Number | Publication Date |
---|---|
US20080172646A1 true US20080172646A1 (en) | 2008-07-17 |
Family
ID=27805210
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/383,274 Expired - Lifetime US7310787B2 (en) | 2002-03-08 | 2003-03-07 | Array transformation in a behavioral synthesis tool |
US12/002,617 Abandoned US20080172646A1 (en) | 2002-03-08 | 2007-12-17 | Array transformation in a behavioral synthesis tool |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US10/383,274 Expired - Lifetime US7310787B2 (en) | 2002-03-08 | 2003-03-07 | Array transformation in a behavioral synthesis tool |
Country Status (5)
Country | Link |
---|---|
US (2) | US7310787B2 (en) |
EP (1) | EP1488367A4 (en) |
JP (3) | JP2005520238A (en) |
AU (1) | AU2003224667A1 (en) |
WO (1) | WO2003077184A1 (en) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070186205A1 (en) * | 2006-02-09 | 2007-08-09 | Henry Yu | Managing and controlling the use of hardware resources on integrated circuits |
US7831938B2 (en) | 2000-12-21 | 2010-11-09 | Mentor Graphics Corporation | Interactive interface resource allocation in a behavioral synthesis tool |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7310787B2 (en) * | 2002-03-08 | 2007-12-18 | Shiv Prakash | Array transformation in a behavioral synthesis tool |
US7210116B2 (en) * | 2003-06-27 | 2007-04-24 | Robert Zeidman | Method and apparatus for synthesizing a hardware system from a software description |
JP2005173648A (en) * | 2003-12-05 | 2005-06-30 | Matsushita Electric Ind Co Ltd | Method and device for high-level synthesis |
JP2005284577A (en) * | 2004-03-29 | 2005-10-13 | Matsushita Electric Ind Co Ltd | Compiler |
US7412684B2 (en) * | 2004-05-28 | 2008-08-12 | Peter Pius Gutberlet | Loop manipulation in a behavioral synthesis tool |
US7315993B2 (en) * | 2004-11-30 | 2008-01-01 | Lsi Logic Corporation | Verification of RRAM tiling netlist |
US8136062B2 (en) * | 2008-08-28 | 2012-03-13 | International Business Machines Corporation | Hierarchy reassembler for 1×N VLSI design |
US8132134B2 (en) * | 2008-08-28 | 2012-03-06 | International Business Machines Corporation | Closed-loop 1×N VLSI design system |
US8122399B2 (en) | 2008-08-28 | 2012-02-21 | International Business Machines Corporation | Compiler for closed-loop 1×N VLSI design |
US8156458B2 (en) * | 2008-08-29 | 2012-04-10 | International Business Machines Corporation | Uniquification and parent-child constructs for 1xN VLSI design |
US8141016B2 (en) * | 2008-08-29 | 2012-03-20 | International Business Machines Corporation | Integrated design for manufacturing for 1×N VLSI design |
US7966598B2 (en) * | 2008-08-29 | 2011-06-21 | International Business Machines Corporation | Top level hierarchy wiring via 1×N compiler |
US20100107130A1 (en) * | 2008-10-23 | 2010-04-29 | International Business Machines Corporation | 1xn block builder for 1xn vlsi design |
US8780114B1 (en) * | 2009-08-31 | 2014-07-15 | The Mathworks, Inc. | Interactive memory map |
US8352899B1 (en) * | 2010-08-20 | 2013-01-08 | Altera Corporation | Method to modify an integrated circuit (IC) design |
US9058860B2 (en) * | 2012-03-29 | 2015-06-16 | Memoir Systems, Inc. | Methods and apparatus for synthesizing multi-port memory circuits |
JP5979966B2 (en) * | 2012-05-10 | 2016-08-31 | 三菱電機株式会社 | Circuit design support apparatus, circuit design support method, and program |
JP6091140B2 (en) * | 2012-05-11 | 2017-03-08 | 三菱電機株式会社 | Information processing apparatus, information processing method, and program |
JP5842255B2 (en) * | 2013-12-12 | 2016-01-13 | 国立大学法人東京工業大学 | Apparatus and method for generating logic circuit from logic circuit description in programming language |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360356B1 (en) * | 1998-01-30 | 2002-03-19 | Tera Systems, Inc. | Creating optimized physical implementations from high-level descriptions of electronic design using placement-based information |
US20020133788A1 (en) * | 2000-10-16 | 2002-09-19 | Waters Simon Joshua | Structured algorithmic programming language approach to system design |
US6587995B1 (en) * | 2000-04-19 | 2003-07-01 | Koninklijke Philips Electronics N.V. | Enhanced programmable core model with integrated graphical debugging functionality |
US6611952B1 (en) * | 2000-12-21 | 2003-08-26 | Shiv Prakash | Interactive memory allocation in a behavioral synthesis tool |
US6691301B2 (en) * | 2001-01-29 | 2004-02-10 | Celoxica Ltd. | System, method and article of manufacture for signal constructs in a programming language capable of programming hardware architectures |
US6978430B2 (en) * | 1999-05-17 | 2005-12-20 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits |
US7134100B2 (en) * | 2002-07-29 | 2006-11-07 | Nec Usa, Inc. | Method and apparatus for efficient register-transfer level (RTL) power estimation |
US7275233B2 (en) * | 1999-05-17 | 2007-09-25 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits |
US7302670B2 (en) * | 2000-12-21 | 2007-11-27 | Bryan Darrell Bowyer | Interactive interface resource allocation in a behavioral synthesis tool |
US7310787B2 (en) * | 2002-03-08 | 2007-12-18 | Shiv Prakash | Array transformation in a behavioral synthesis tool |
Family Cites Families (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3624616A (en) * | 1969-12-04 | 1971-11-30 | Burroughs Corp | Dynamic allocation of multidimensional array memory space |
US4527249A (en) * | 1982-10-22 | 1985-07-02 | Control Data Corporation | Simulator system for logic design validation |
US5353243A (en) * | 1989-05-31 | 1994-10-04 | Synopsys Inc. | Hardware modeling system and method of use |
US5870308A (en) * | 1990-04-06 | 1999-02-09 | Lsi Logic Corporation | Method and system for creating and validating low-level description of electronic design |
US5555201A (en) * | 1990-04-06 | 1996-09-10 | Lsi Logic Corporation | Method and system for creating and validating low level description of electronic design from higher level, behavior-oriented description, including interactive system for hierarchical display of control and dataflow information |
US5222030A (en) * | 1990-04-06 | 1993-06-22 | Lsi Logic Corporation | Methodology for deriving executable low-level structural descriptions and valid physical implementations of circuits and systems from high-level semantic specifications and descriptions thereof |
US5428740A (en) * | 1990-10-18 | 1995-06-27 | Ventana Systems, Inc. | Applying successive data group operations to an active data group |
JPH05101141A (en) * | 1991-08-13 | 1993-04-23 | Toshiba Corp | High-level composition device |
US5404319A (en) * | 1993-02-11 | 1995-04-04 | Analog, Inc. | Translation of behavioral modeling properties into an analog hardware description language |
EP0660268A3 (en) * | 1993-10-15 | 1996-01-31 | Cadence Design Systems | Electronic model generation process. |
US6044211A (en) * | 1994-03-14 | 2000-03-28 | C.A.E. Plus, Inc. | Method for graphically representing a digital device as a behavioral description with data and control flow elements, and for converting the behavioral description to a structural description |
US5623419A (en) * | 1994-04-28 | 1997-04-22 | Cadence Design Systems, Inc. | Modeling of multi-disciplinary signals |
US5541850A (en) * | 1994-05-17 | 1996-07-30 | Vlsi Technology, Inc. | Method and apparatus for forming an integrated circuit including a memory structure |
US5764951A (en) * | 1995-05-12 | 1998-06-09 | Synopsys, Inc. | Methods for automatically pipelining loops |
US6053948A (en) * | 1995-06-07 | 2000-04-25 | Synopsys, Inc. | Method and apparatus using a memory model |
US5727187A (en) * | 1995-08-31 | 1998-03-10 | Unisys Corporation | Method of using logical names in post-synthesis electronic design automation systems |
US5870588A (en) * | 1995-10-23 | 1999-02-09 | Interuniversitair Micro-Elektronica Centrum(Imec Vzw) | Design environment and a design method for hardware/software co-design |
US5673198A (en) * | 1996-03-29 | 1997-09-30 | Xilinx, Inc. | Concurrent electronic circuit design and implementation |
US5847969A (en) * | 1996-05-01 | 1998-12-08 | Hewlett-Packard Co. | Integrated circuit design system and method for generating a regular structure embedded in a standard cell control block |
US5912819A (en) * | 1996-12-03 | 1999-06-15 | Motorola, Inc. | Method for designing an architectural system |
US6708144B1 (en) * | 1997-01-27 | 2004-03-16 | Unisys Corporation | Spreadsheet driven I/O buffer synthesis process |
US6195786B1 (en) * | 1997-12-23 | 2001-02-27 | Nec Usa, Inc. | Constrained register sharing technique for low power VLSI design |
US6314552B1 (en) * | 1998-05-18 | 2001-11-06 | Lev A. Markov | Electronic design creation through architectural exploration |
US6305006B1 (en) * | 1998-05-18 | 2001-10-16 | Mentor Graphics Corporation | Generating candidate architectures for an architectural exploration based electronic design creation process |
US6917909B1 (en) * | 1998-05-18 | 2005-07-12 | Lev A. Markov | Facilitating guidance provision for an architectural exploration based design creation process |
US6480985B1 (en) * | 1998-08-26 | 2002-11-12 | Mentor Graphics Corporation | Method and apparatus for graphically presenting an integrated circuit design |
US6477683B1 (en) * | 1999-02-05 | 2002-11-05 | Tensilica, Inc. | Automated processor generation system for designing a configurable processor and method for the same |
US6467075B1 (en) * | 2000-03-24 | 2002-10-15 | Nec Corporation | Resolution of dynamic memory allocation/deallocation and pointers |
US6769081B1 (en) * | 2000-08-30 | 2004-07-27 | Sun Microsystems, Inc. | Reconfigurable built-in self-test engine for testing a reconfigurable memory |
GB2367225B (en) | 2000-09-26 | 2002-08-07 | Oracle Corp | User interface |
US6711729B1 (en) * | 2000-12-05 | 2004-03-23 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits using automatic reallocation techniques |
US6957418B2 (en) | 2001-01-23 | 2005-10-18 | Altia, Inc. | System and method of designing, testing, and employing graphical computer code |
US6574708B2 (en) * | 2001-05-18 | 2003-06-03 | Broadcom Corporation | Source controlled cache allocation |
US6477689B1 (en) * | 2001-06-13 | 2002-11-05 | The Boeing Company | Architectural structure of a process netlist design tool |
JP4007483B2 (en) * | 2001-07-16 | 2007-11-14 | シャープ株式会社 | High level synthesis apparatus and high level synthesis method |
-
2003
- 2003-03-07 US US10/383,274 patent/US7310787B2/en not_active Expired - Lifetime
- 2003-03-07 EP EP03721348A patent/EP1488367A4/en not_active Ceased
- 2003-03-07 JP JP2003575326A patent/JP2005520238A/en active Pending
- 2003-03-07 AU AU2003224667A patent/AU2003224667A1/en not_active Abandoned
- 2003-03-07 WO PCT/US2003/007241 patent/WO2003077184A1/en active Application Filing
-
2007
- 2007-12-17 US US12/002,617 patent/US20080172646A1/en not_active Abandoned
-
2009
- 2009-02-05 JP JP2009024400A patent/JP4833303B2/en not_active Expired - Lifetime
-
2010
- 2010-02-26 JP JP2010041194A patent/JP2010118081A/en active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6360356B1 (en) * | 1998-01-30 | 2002-03-19 | Tera Systems, Inc. | Creating optimized physical implementations from high-level descriptions of electronic design using placement-based information |
US6978430B2 (en) * | 1999-05-17 | 2005-12-20 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits |
US7275233B2 (en) * | 1999-05-17 | 2007-09-25 | Synplicity, Inc. | Methods and apparatuses for designing integrated circuits |
US6587995B1 (en) * | 2000-04-19 | 2003-07-01 | Koninklijke Philips Electronics N.V. | Enhanced programmable core model with integrated graphical debugging functionality |
US20020133788A1 (en) * | 2000-10-16 | 2002-09-19 | Waters Simon Joshua | Structured algorithmic programming language approach to system design |
US6701501B2 (en) * | 2000-10-16 | 2004-03-02 | Simon Joshua Waters | Structured algorithmic programming language approach to system design |
US6611952B1 (en) * | 2000-12-21 | 2003-08-26 | Shiv Prakash | Interactive memory allocation in a behavioral synthesis tool |
US7302670B2 (en) * | 2000-12-21 | 2007-11-27 | Bryan Darrell Bowyer | Interactive interface resource allocation in a behavioral synthesis tool |
US6691301B2 (en) * | 2001-01-29 | 2004-02-10 | Celoxica Ltd. | System, method and article of manufacture for signal constructs in a programming language capable of programming hardware architectures |
US7310787B2 (en) * | 2002-03-08 | 2007-12-18 | Shiv Prakash | Array transformation in a behavioral synthesis tool |
US7134100B2 (en) * | 2002-07-29 | 2006-11-07 | Nec Usa, Inc. | Method and apparatus for efficient register-transfer level (RTL) power estimation |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7831938B2 (en) | 2000-12-21 | 2010-11-09 | Mentor Graphics Corporation | Interactive interface resource allocation in a behavioral synthesis tool |
US20070186205A1 (en) * | 2006-02-09 | 2007-08-09 | Henry Yu | Managing and controlling the use of hardware resources on integrated circuits |
US7735050B2 (en) | 2006-02-09 | 2010-06-08 | Henry Yu | Managing and controlling the use of hardware resources on integrated circuits |
US20100318954A1 (en) * | 2006-02-09 | 2010-12-16 | Henry Yu | Managing and controlling the use of hardware resources on integrated circuits |
US8726204B2 (en) | 2006-02-09 | 2014-05-13 | Mentor Graphics Corporation | Managing and controlling the use of hardware resources on integrated circuits |
US9747398B2 (en) | 2006-02-09 | 2017-08-29 | Mentor Graphics Corporation | Managing and controlling the use of hardware resources on integrated circuits |
Also Published As
Publication number | Publication date |
---|---|
AU2003224667A1 (en) | 2003-09-22 |
US20030172055A1 (en) | 2003-09-11 |
EP1488367A4 (en) | 2005-05-11 |
JP2010118081A (en) | 2010-05-27 |
JP2009093682A (en) | 2009-04-30 |
JP2005520238A (en) | 2005-07-07 |
US7310787B2 (en) | 2007-12-18 |
JP4833303B2 (en) | 2011-12-07 |
WO2003077184A1 (en) | 2003-09-18 |
EP1488367A1 (en) | 2004-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20080172646A1 (en) | Array transformation in a behavioral synthesis tool | |
US7712050B2 (en) | Hierarchical presentation techniques for a design tool | |
US6611952B1 (en) | Interactive memory allocation in a behavioral synthesis tool | |
US6496972B1 (en) | Method and system for circuit design top level and block optimization | |
US7831938B2 (en) | Interactive interface resource allocation in a behavioral synthesis tool | |
US6678644B1 (en) | Integrated circuit models having associated timing exception information therewith for use with electronic design automation | |
US7143388B1 (en) | Method of transforming software language constructs to functional hardware equivalents | |
US6438731B1 (en) | Integrated circuit models having associated timing exception information therewith for use in circuit design optimizations | |
Schmit et al. | Synthesis of application-specific memory designs | |
US20070028197A1 (en) | Method and apparatus for auto-generation of shift register file for high-level synthesis compiler | |
US6687894B2 (en) | High-level synthesis method, high-level synthesis apparatus, method for producing logic circuit using the high-level synthesis method for logic circuit design, and recording medium | |
EP0847022A2 (en) | Method for designing an architectural system | |
US7318213B2 (en) | Apparatus, method and program for behavioral synthesis including loop processing | |
US6305006B1 (en) | Generating candidate architectures for an architectural exploration based electronic design creation process | |
JP4083491B2 (en) | Module-to-module interface automatic synthesis apparatus, synthesis method, program, and portable storage medium | |
US6314552B1 (en) | Electronic design creation through architectural exploration | |
Khare et al. | High-level synthesis with synchronous and RAMBUS DRAMs | |
JP2013235474A (en) | Circuit design support device, circuit design support method and program | |
JP2835567B2 (en) | Backtracking method and backtracking method for simulator that verifies target operation in time series | |
JP2001043251A (en) | Device and method for high-order synthesis and recording medium used for the same | |
JP2008204341A (en) | Interface composite device | |
JP2007323206A (en) | Behavioral synthesis apparatus and method, simulation apparatus and method, and design apparatus | |
JP3246462B2 (en) | Function synthesizing method using C language circuit model and recording medium storing the program | |
Rodrigues et al. | On Pipelining Sequences of Data-Dependent Loops. | |
US8205186B1 (en) | Incremental modification of instrumentation logic |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: MENTOR GRAPHICS CORPORATION, OREGON Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:PRAKASH, SHIV;BOWYER, BRYAN DARRELL;GUTBERLET, PETER PIUS;REEL/FRAME:020860/0319 Effective date: 20030506 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |