CHAPTER 6
SYNTHESIS OF VHDL CODE
Synthesizing VHDL code is the process of realizing the VHDL description using the prim- itive logic cells from the target device’s library. In Chapters 4 and 5, we discussed how to derive a conceptual diagram from VHDL statements. The conceptual diagram can be considered as the first step in realizing the code. The diagram is refined further during synthesis. The synthesis process involves complex algorithms and a large amount of data, and computers are needed to facilitate the process. Although today’s synthesis software appears to be sophisticiited and capable, there are fundamental limitations. Understanding the capability and limitation of synthesis software will help us better utilize this tool and derive more efficient designs. This chapter explains the realization of VHDL operators and data types, provides an in-depth overview on the synthesis process, and discusses the timing issue involved in synthesis,
6.1 FUNDAMENTAL LIMITATIONS OF EDA SOFTWARE
Developing a large digital circuit is a complicated process and involves many difficult tasks. We have to deal with complex algorithms and procedures and handle a large amount of data. Computers are used to facilitate the process. As computers become more powerful, we may ask if it is possible to develop a suite of software and completely automate the synthesis process. The ideal scenario is that human designers would only need to develop a high-level behavioral description and IIDA software would perform the synthesis and placement and routing and automatically derive the optimal circuit implementation. The is unfortunately not possible. The limitation comes from the theoretical study of computational algorithms.
PT£ Hntdwcirc Deiign I/xiiig l'ffDL: Codiiigyor £®ciency, f'ort‹ibifify and Scalability. By Peng P. Chu 125
Copyright O 2006 John Wiley & Sons, Inc.
Although this book does not cover EDA algorithms, it will be helpful to know the capability
and limitation of EDA software tools so that they can be used effectively.
For the purposes of discussion, we can separate an EDA software tool into a core and a shell. The core is the algorithms that perform the transformation or optimization, and the shelf wraps the algorithm, including data conversion, memory and file management and user interface. Although the shell is important, the core algorithms ultimately determine the quality and efficiency of the software tool. The problems encountered in EDA are not unique. In fact, they are formulated and transformed into optimization problems in other fields, especially in the study of graph theory. This section provides a layperson’s overview of computability and computation complexity, which helps us understand the fundamental limitation of EDA software.
8.1.1 Computablllty
Computabiliry concerns whether a problem can be solved by a computer algorithm. If an algorithm exists, the problem is computable (or decidable). Otherwise, the problem is uncomputable (or undecidable). As example of an uncomputable problem is the “halting problem.” Some programs, such as a compiler, take another program as input and check certain properties (e.g., syntax) of that program. The halting problem asks whether we can develop a program that takes any program and its input and determines whether computation of that program will eventually halt (e.g., no infinite loop). It can be proven mathematically that no such program can be developed, and thus the halting problem is uncomputable. Informally speaking, any attempt to examine the “meaning” of a program is uncomputable. Equivalence checking discussed in Section 1.5.3 essentially compares whether two pro- grams perform the same function, which goes further than the halting problem. Therefore, equivalence checking is uncomputable; i.e., it is not possible to develop an EDA tool that determines the equivalence of ‹my two descriptions. However, it is possible to use some clever techniques to determine the equivalence of some descriptions, which are coded fol- lowing certain guidelines. Thus, while equivalence checking cannot guarantee to work all
of the time, it can be useful some of the time.
6.1.2 Computatlon complexity
If a problem is computable, an algorithm can be derived to solve the problem. The compu- tation complexity concerns the efficiency of an algorithm. The computation complexity can be further divided into tune complexity, which is a measure of the time needed to complete the computation, and spoce complexity, which is a measure of hardware resources, such as memory, needed to complete the computation. Since most statements on time complexity can be applied to space complexity as well, in the remaining section we focus on time
BJp•O notation The computation time of an algorithm depends on the size of the input as well as on the type of processor, programming language, compiler and even personal coding style. It is difficult to determine the exact time needed to complete execution of an algorithm. To characterize an algorithm, we normally focus on the impact of input size and try to filter out the effect of the “interferences" on measurement. Instead of determining the exact function for computation time, we usually consider only the order of this function.
The order is defined as follows. Given two functions, /(ii) and p(n), we say that ,/(ri) is O(p(n)) (pronounced as jf(n) is big-O of p(n) or y (n) is of order p(n)) if two constants,
Table 6.1 Scaling of some commonly used big-O functions
Input size
ri
n
log n Big-O function
n log ri n
n
2"
2 2 ys lps 2ys 4 ys 8 ys 4 ys
4 4 jzs 2ys 8 ys 16 ys 64 ys 16 ys
8 8 ys 3 ys 24 ys 64 ys 512 ys 256 ys
16 16 ys 4 ys 64 ys 256 ys 4ms ddms
32 32ys Sys 160 ys lms 33ms 7lmin
48 48 ys 5.5 ys 268 ys 2 ms lllms 9 years
64 64 ys 6 jzs 384 jis 4ms 262 ms 600,000 years
n9 and c, can be found to satisfy
/(ri) < cp(n) for any n, = » =
The p(ri) function is normally a simple function, such as n, ri log n, 3 Nr 2". For
example, all the following functions are O(ri'):
• 600n' + 1000000
The purpose of big-O notation is twofold. First, it drops the less important, secondary terms since the highest-order term becomes the dominant factor as n becomes large. Second, it concentrates on the rate of change and ignores the constant coefficient in a function. After removing the constant coefficients and lower-order terms, we eliminate the effect of coding style, instruction set and hardware speed, and can concentrate on the effectiveness of an algorithm. Big-O notation is essentially a scaling factor or growth rate, indicating the resources needed as input size increases.
Commonly encountered orders are O(1), O(log n), O(n), O(n log n), O(n'), O( 3)
and O(2“). O(n) indicates the linear growth rate, in which the required computation resources increase in proportion to the input size. O(1) means that the required computation resources are constant and do not depend on input size. O(log n) indicates the logarithmic growth rate, which changes rather slowly. For a problem with O(1) or O(log ri), the input
size has very little impact on the resources. O(n') and O( 3) have faster growth rates and
the required computation resources become more significant as the input size increases. All of the orders discussed so far are considered as being of polynomial order since they have the form of O(n‘), where k is a constant. On the other hand, O(2‘) indicates the exponential growth rate and the computation time increases geometrically. Note that an increment of 1 in input size doubles the computation time. O(2") grows faster than does any polynomial order.
An example using these functions is shown in Table 6.1, which lists the required compu- tation times of algorithms of varying computation complexity. For comparison, we assume that it takes 2 ps for an O(n) algorithm to perform a computation of input size 2. The table shows the required times as the input size increases from 2 to 64 under different big-O functions.
One example of O(2") complexity is the exhaustive testing of a combinational cir- cuit. One way to test a combinational circuit is to apply all possible input combinations exhaustively and examine their output responses. For a circuit with ii inputs, there are
2" possible input combinations. If we assume that the testing equipment can check 1 mil-
lion patterns per second, exhaustively testing a 64-bitcircuit takes about 600,000 years (i.e.,
10 .60 60.2‹. ) to complete. Thus, although simple and straightforward, this method is not practical in reality.
Intractable arid trsctBbfe problems In most problems, if a polynomial order (O( k)) algorithm can be found, the exponent k is normally very small (say, 1, 2, or 3). Even though the growth rate is much worse than the linear rate, we can tolerate applying the algorithm to problems with nontrivial input sizes. We call these problems traceable. On the other hand, computation theory has shown that a polynomial-order solution cannot be found or is “unlikely” to be found for some problems. The only existing solutions are the algorithms
with nonpolynomial order, such as o(pn) we call these problems intractable. As we have
seen in Table 6.1, the computation time for the O(2") algorithm simply grows too fast and the algorithm is not practical even for a moderate-sized n. Improvement in hardware speed will not change the situation significantly.
The situation is not completely hopeless for an intractable problem. An intractable problem usually means that it takes O(2") computation time to find the optimal answer for cup given input. It is frequently possible to find a polynomial-order algorithm, based on some smart tactics and heuristics (an educated guess), that permits us to obtain a valid, suboptimal answer or the optimal solution for some input patterns.
Sy
CHƯƠNG 6TỔNG HỢP CỦA VHDL MÃTổng hợp VHDL mã là quá trình của việc thực hiện mô tả VHDL bằng cách sử dụng các tế bào logic prim-itive từ thư viện của điện thoại mục tiêu. Trong chương 4 và 5, chúng tôi đã thảo luận làm thế nào để rút ra một sơ đồ khái niệm từ VHDL báo cáo. Sơ đồ khái niệm có thể được coi là bước đầu tiên trong việc thực hiện mã. Biểu đồ là tinh tế hơn nữa trong tổng hợp. Quá trình tổng hợp bao gồm các thuật toán phức tạp và một số tiền lớn của dữ liệu, và máy tính là cần thiết để tạo thuận lợi cho quá trình. Mặc dù ngày nay tổng hợp phần mềm dường như là sophisticiited và có khả năng, có những hạn chế cơ bản. Tìm hiểu về các khả năng và giới hạn của phần mềm tổng hợp sẽ giúp chúng tôi tốt hơn sử dụng công cụ này và lấy được thiết kế hiệu quả hơn. Chương này giải thích việc thực hiện các nhà khai thác VHDL và loại dữ liệu, cung cấp một tổng quan chi tiết về quá trình tổng hợp, và thảo luận về vấn đề thời gian tham gia trong tổng hợp,6.1 CƠ BẢN GIỚI HẠN CỦA PHẦN MỀM THIẾT KẾ VI MẠCHPhát triển một mạch kỹ thuật số lớn là một quá trình phức tạp và liên quan đến việc nhiều nhiệm vụ khó khăn. Chúng ta phải đối phó với các thuật toán phức tạp và thủ tục và xử lý một lượng lớn dữ liệu. Máy tính được sử dụng để tạo thuận lợi cho quá trình. Khi máy tính trở nên mạnh mẽ hơn, chúng tôi có thể yêu cầu nếu nó có thể phát triển một bộ phần mềm và hoàn toàn tự động quá trình tổng hợp. Các kịch bản lý tưởng là nhà thiết kế của con người sẽ chỉ cần để phát triển một mô tả hành vi cao cấp và phần mềm IIDA nào thực hiện tổng hợp và vị trí và định tuyến và tự động lấy được thực hiện tối ưu mạch. Các là tiếc là không thể. Giới hạn đến từ nghiên cứu lý thuyết của giải thuật tính toán.PT£ Hntdwcirc Deiign tôi / xiiig l'ffDL: Codiiigyor £® ciency, f'ort‹ibifify và khả năng mở rộng. Bởi Peng P. Chu 125Bản quyền O 2006 John Wiley & Sons, Inc Mặc dù cuốn sách này không áp dụng thuật toán thiết kế vi mạch, nó sẽ rất hữu ích để biết khả năngvà các giới hạn của phần mềm thiết kế vi mạch công cụ để cho họ có thể được sử dụng có hiệu quả.Cho các mục đích của cuộc thảo luận, chúng tôi có thể chia một công cụ phần mềm thiết kế vi mạch thành một lõi và vỏ. Cốt lõi là các thuật toán thực hiện chuyển đổi hoặc tối ưu hóa, và kệ kết thúc tốt đẹp các thuật toán, bao gồm dữ liệu chuyển đổi, bộ nhớ và tập tin quản lý và người sử dụng giao diện. Mặc dù vỏ là quan trọng, các thuật toán lõi cuối cùng xác định chất lượng và hiệu quả của công cụ phần mềm. Những vấn đề gặp phải trong thiết kế vi mạch không phải là duy nhất. Trong thực tế, họ đang xây dựng và chuyển thành vấn đề tối ưu hóa trong các lĩnh vực khác, đặc biệt là trong nghiên cứu về lý thuyết đồ thị. Phần này cung cấp tổng quan của một layperson computability và tính toán phức tạp, giúp chúng ta hiểu hạn chế cơ bản của phần mềm thiết kế vi mạch.8.1.1 ComputabllltyComputabiliry mối quan tâm cho dù một vấn đề có thể được giải quyết bằng một thuật toán máy tính. Nếu một giải thuật tồn tại, vấn đề là computable (hoặc decidable). Nếu không, vấn đề là uncomputable (hoặc undecidable). Như ví dụ về một vấn đề uncomputable là "vấn đề halting." Một số chương trình, chẳng hạn như một trình biên dịch, có một chương trình khác như đầu vào và kiểm tra các thuộc tính nhất định (ví dụ như, cú pháp) chương trình đó. Vấn đề halting yêu cầu cho dù chúng tôi có thể phát triển một chương trình mà mất bất kỳ chương trình và đầu vào của nó và quyết định cho dù các tính toán của chương trình đó sẽ ngăn chặn cuối cùng (ví dụ, là không có vòng lặp vô hạn). Nó có thể được chứng minh toán học rằng không có chương trình như vậy có thể được phát triển, và do đó vấn đề halting là uncomputable. Nói chung, bất kỳ nỗ lực để kiểm tra ý nghĩa"" của một chương trình là uncomputable. Tương đương kiểm tra thảo luận trong phần 1.5.3 cơ bản so sánh cho dù hai pro-gam thực hiện các chức năng tương tự, mà đi xa hơn vấn đề halting. Do đó, kiểm tra tương đương là uncomputable; tức là, nó không phải là không thể phát triển một công cụ thiết kế vi mạch sẽ xác định sự tương đương của mô tả hai ‹my. Tuy nhiên, nó có thể sử dụng một số kỹ thuật thông minh để xác định sự tương đương của một số mô tả là mã hoá fol-lowing nguyên tắc nhất định. Vì vậy, trong khi tương đương kiểm tra không thể đảm bảo để làm việc tất cảthời gian, nó có thể hữu ích một số thời gian.6.1.2 Computatlon phức tạpNếu một vấn đề là computable, một thuật toán có thể được bắt nguồn để giải quyết vấn đề. Sự phức tạp compu-tation liên quan đến hiệu quả của một thuật toán. Sự phức tạp tính toán có thể được chia một phần vào sự phức tạp giai điệu, là một thước đo thời gian cần thiết để hoàn thành những tính toán, và phức tạp spoce, là một thước đo của tài nguyên phần cứng, chẳng hạn như bộ nhớ, cần thiết để hoàn thành những tính toán. Kể từ khi hầu hết những lời về độ phức tạp thời gian có thể được áp dụng cho space phức tạp là tốt, trong phần còn lại, chúng tôi tập trung vào thời gianBJp•O ký hiệu thời gian tính toán của một thuật toán phụ thuộc vào kích thước của các đầu vào cũng như trên loại bộ vi xử lý, lập trình ngôn ngữ, trình biên dịch và thậm chí cá nhân phong cách mã hóa. Nó rất khó để xác định thời gian chính xác cần thiết để hoàn thành thực hiện một thuật toán. Để mô tả một thuật toán, chúng tôi thường tập trung vào tác động của đầu vào kích thước và cố gắng để lọc ra các hiệu ứng của nhiễu"" về đo lường. Thay vì việc xác định các chức năng chính xác cho tính toán thời gian, chúng tôi thường xem xét chỉ thứ tự của các chức năng này.Thứ tự được định nghĩa như sau. Chúng tôi cung cấp hai chức năng, /(ii) và p(n), nói rằng, /(ri) là O(p(n)) (phát âm như jf(n) là lớn-O của p(n) hoặc y (n) là của đơn đặt hàng p(n)) nếu hai hằng số, Bảng 6.1 tỷ lệ của một số chức năng O lớn thường được sử dụngNhập kích thướcri n đăng n Big-O chức năngn đăng nhập ri n n 2"2 2 ys lps 2ys 4 ys 8 ys 4 ys4 4 jzs 2ys 8 ys 16 ys 64 ys 16 ys8 8 ys 3 ys 24 ys 64 ys 512 ys 256 ys16 16 ys 4 ys 64 ys 256 ys chiếc ddms32 32ys Sys 160 ys lms 33ms 7lmin48 48 ys 5.5 ys 268 ys 2 ms lllms 9 tuổi64 64 ys 6 jzs 384 jis chiếc 262 ms 600.000 nămN9 và c, có thể được tìm thấy để đáp ứng/(ri) < cp(n) cho bất kỳ n =» =Chức năng p(ri) thường là một chức năng đơn giản, chẳng hạn như n, ri log n, 3 Nr 2". ChoVí dụ, tất cả các chức năng sau đây là O(ri'): • 600n' + 1000000Mục đích của ký hiệu O lớn là gấp đôi. Đầu tiên, nó giảm các điều khoản ít quan trọng, Trung học kể từ khi thuật ngữ trật tự cao nhất sẽ trở thành các yếu tố chi phối như n trở thành lớn. Thứ hai, nó tập trung vào tốc độ thay đổi và bỏ qua hệ số liên tục trong một chức năng. Sau khi loại bỏ các hệ số liên tục và thấp hơn-đặt hàng điều khoản, chúng tôi loại bỏ ảnh hưởng của mã hóa phong cách, tập lệnh và phần cứng tăng tốc độ, và có thể tập trung vào hiệu quả của một thuật toán. Kí hiệu O lớn là cơ bản một tỉ lệ yếu tố hoặc tăng trưởng tỷ lệ, chỉ ra các nguồn lực cần thiết như làm tăng kích thước đầu vào.Đơn đặt hàng thường gặp là O(1), O (log n), O(n), O (n log n), O(n'), O (3)và O(2"). O(n) chỉ ra tốc độ tăng trưởng tuyến tính, trong đó các nguồn tài nguyên tính toán yêu cầu tăng tỷ lệ kích thước đầu vào. O(1) có nghĩa là các nguồn tài nguyên tính toán yêu cầu liên tục và không phụ thuộc vào kích thước đầu vào. O (log n) chỉ ra tốc độ tăng trưởng lôgarít, mà thay đổi khá chậm. Cho một vấn đề với O(1) hoặc O(log ri), các đầu vàoKích thước có tác động rất ít tài nguyên. O(n') và O (3) có tốc độ tăng trưởng nhanh hơn vàCác nguồn tài nguyên yêu cầu tính toán trở thành quan trọng hơn là làm tăng kích thước đầu vào. Tất cả các đơn đặt hàng thảo luận cho đến nay được coi là của đa thức kể từ khi họ có hình thức O(n'), k là một hằng số. Mặt khác, O(2') chỉ ra tốc độ tăng trưởng hàm mũ và tính toán thời gian làm tăng geometrically. Lưu ý rằng gia số 1 trong đầu vào kích thước tăng gấp đôi thời gian tính toán. O(2") phát triển nhanh hơn bất kỳ thứ tự đa thức.Một ví dụ bằng cách sử dụng các chức năng này được thể hiện trong bảng 6.1, trong đó liệt kê lần yêu cầu compu-tation của các thuật toán khác nhau tính toán phức tạp. Để so sánh, chúng tôi giả định rằng phải mất 2 ps cho một thuật toán O(n) để thực hiện một tính toán đầu vào kích thước 2. Bảng này cho thấy các yêu cầu lần khi kích thước đầu vào tăng từ 2 đến 64 theo chức năng O lớn khác nhau.Một ví dụ về O(2") phức tạp là thử nghiệm đầy đủ của một luận cir-cuit. Một cách để kiểm tra một mạch luận là để áp dụng tất cả các tổ hợp đầu vào exhaustively và kiểm tra phản ứng sản lượng của họ. Đối với một vi mạch với ii đầu vào, có 2" có thể kết hợp đầu vào. Nếu chúng ta giả định rằng thiết bị phân tích có thể kiểm tra 1 mil-sư tử các mô hình mỗi giây, exhaustively thử nghiệm 64 bitcircuit mất khoảng 600.000 năm (tức là,10.60 60.2‹. ) để hoàn thành. Vì vậy, mặc dù đơn giản và đơn giản, phương pháp này là không thực tế trong thực tế.Intractable khô cằn trsctBbfe các vấn đề trong hầu hết các vấn đề, nếu một thuật toán đa thức đặt hàng (O (k)) có thể được tìm thấy, số mũ k là bình thường rất nhỏ (nói, 1, 2 hoặc 3). Mặc dù tốc độ tăng trưởng là nhiều tồi tệ hơn mức tuyến tính, chúng tôi có thể chịu được áp dụng các thuật toán cho các vấn đề với kích thước đầu vào nontrivial. Chúng tôi gọi những vấn đề này theo dõi. Mặt khác, tính toán lý thuyết đã chứng minh rằng một giải pháp đa thức thứ tự không thể được tìm thấy hoặc là "không" để được tìm thấy cho một số vấn đề. Các giải pháp hiện tại chỉ là các thuật toánvới thứ tự nonpolynomial, chẳng hạn như o(pn) chúng tôi gọi các vấn đề intractable. Khi chúng tôi cónhìn thấy trong bảng 6,1, tính toán thời gian cho các thuật toán O(2") chỉ đơn giản là phát triển quá nhanh và các thuật toán là không thực tế thậm chí cho một cải tiến n. có kích thước trung bình trong phần cứng tốc độ sẽ không thay đổi tình hình một cách đáng kể.Tình hình không phải là hoàn toàn tuyệt vọng cho một vấn đề intractable. Một vấn đề intractable thường có nghĩa là phải mất O(2") tính toán thời gian để tìm câu trả lời tối ưu cho giải vô địch cho đầu vào. Nó là thường xuyên có thể tìm thấy một thuật toán đa thức-trật tự, dựa trên một số chiến thuật thông minh và chẩn đoán (một chương trình giáo dục đoán), mà cho phép chúng tôi để có được một câu trả lời hợp lệ, suboptimal hoặc các giải pháp tối ưu cho một số mô hình đầu vào.Sy
đang được dịch, vui lòng đợi..