Cadence Design System: Brief Introduction Cadence Design Systems Inc. is an American electronic design automation (EDA) software and engineering services company, founded in 1988 by the merger of SDA Systems and ECAD,Inc. The company produces software for designing integrated circuits also known as chips, systems on chip(or SoCs) and printed circuit boards. Cadence's product offerings are targeted at various types of design and verification tasks which include: Virtuoso Platform - Tools for designing full-custom integrated circuits; includes schematic entry, behavioral modeling (Verilog-AMS), circuit simulation, custom layout, physical verification, extraction and back-annotation. Used mainly for analog, mixed-signal, RF, and standard-cell designs, but also memory and FPGA designs. Encounter Platform - Tools for creation of digital integrated circuits. This includes floorplanning, synthesis, test, and place and route. Typically a digital design starts from Verilog netlists. Incisive –Tools Platform verification of Includes formal RTL including verification, formal Verilog, for simulation and functional VHDL and System equivalence C based checking, hardware models. acceleration, and emulation. Palladium series - Accelerators and emulators for hardware and software co-verification and system-level verification. Design IP: Cadence provides design IP targeting areas including memory (DRAM), covering DDR1, DDR2, DDR3, DDR4, LPDDR2, LPDDR3, LPDDR4, and Wide I/O; storage (nonvolatile memory), covering NVM Express and NAND Flash controller and PHY; and highperformance interface protocols such as PCI Express Gen3, 40/100G Ethernet, and USB 2 and USB 3. Verification IP (VIP) Cadence provides the broadest set of commercial VIP available with over 30 protocols in its VIP Portfolio. They include AMBA, PCI Express, USB, SATA, OCP, SAS, MIPI and many others. Cadence VIP also provides the unique Compliance Management System verification. (CMS) to automate protocol compliance Integration Optimized IP (Design IP) Cadence offers Vertically Integrated IP, inclusive of Digital Controller, Serdes Layer, and Device Driver. Protocols supported include USB, DDR, PCI-Express, 10G-40G Ethernet, and On Chip Bus Fabric. Allegro Platform - Tools for co-design of integrated circuits, packages, and PCBs. OrCAD/PSpice - Tools for smaller design teams and individual PCB designers. Sigrity technologies - Tools for signal and power verification for system-level signoff verification and interface compliance. In addition to EDA software, Cadence provides contracted methodology and design services as well as silicon design IP, and has a program aimed at making it easier for other EDA software to interoperate with the company's tools. FIGURE 1: CADENCE LIBRARY MANAGER WINDOW The left column is a list of the current libraries. From these libraries analogLib is of most importance. This library contains all the components used during vlsi circuit design and it will be used the most. Left click on analog Lib in the library browser. Left click on nmos4 to display the cell views of the nmos transistor design. You should be able to see several different cell views. The cell views contain the following information: Symbol - contains the symbol representation of the schematic. CdsSpice, HspiceS, Spectre, spectreS–contain spice information for the element. Feel free to look at any of the cell views. To do this, click center and hold on the cell view and choose read or you can double click on the particular cell view of interest. A window will open showing the contents of that particular window. In different cells, you may encounter the following cell views: abstract- contains an abstract representation of the layout for use by Cadence place and route software. extracted- contains layout connectivity for use by verification programs. layout- contains the silicon-level representations of the transistors and wiring. schematic- contains the logical design of the device. behavioral– contains the VHDL description of the cell GENERATING NETLIST IN CADENCE The generate netlist in cadence the following steps need to be done. 1. Create a directory in the LINUX environment 2. Invoke cadence license. 3. Invoke the library. 4. Create .g files to write the program and then save it. 5. Run rc compiler to get inside the tool 6. Do few of the steps like synthesize to mapped and generic. 7. Write the command to generate netlist. 8. Type exit to come out of the tool. 9. The netlist file will be in the LINUX command window. The final Netlist file look the one given below. FIGURE 2: CADENCE NETLIST FILE Although Cadence can provide netlist information at gate-level in a text format, the license cost of cadence is very high. On the other hand, we have used Xilinx Student version software, which is available for free. The ngc file produced by Xilinx is then converted into edif file format and finally run through various programs as described above to give the gate-level information. The steps are shown in the flow chart and described below. XILINX: BRIEF INTRODUCTION Xilinx, Inc. is an American technology company, primarily a supplier of programmable logic devices. It is known for inventing the field programmable gate array (FPGA) and as the first semiconductor company with a fabless manufacturing model. XILINX ISETM Design Tools Xilinx ISETM is the design tool provided by Xilinx. Xilinx provides a free version of this tool called Web packTM which would be virtually identical for our purposes. There are four fundamental steps in all digital logic design. These consist of: 1. Design – The schematic or code that describes the circuit. 2. Synthesis – The intermediate conversion of human readable circuit description to FPGA code (EDIF) format. It involves syntax checking and combining of all the separate design files into a single file. 3. Place & Route– Where the layout of the circuit is finalized. This is the translation of the EDIF into logic gates on the FPGA. 4. Program – The FPGA is updated to reflect the design through the use of programming (.bit) files. Test bench simulation is in the second step. As its name implies, it is used for testing the design by simulating the result of driving the inputs and observing the outputs to verify your design. ISE has the capability to do a variety of different design methodologies including: Schematic Capture, Finite State Machine and Hardware Descriptive Language (VHDL or Verilog), although ISE has its own simulation engine. An example in Xilinx using Verilog code We have taken a random example, where a full adder and 2 multiplexer are used to show the 3 types of LUT (look up table) configuration. LUTs can be of 2, 3, 4 input configuration with 1 output. In this example the three inputs x, y and z are given to a full adder. The output sum of the full adder is connected to one of the multiplexer. The signal reset acts as a select line for both the multiplexer. When select is 0 the multiplexer will give the output as sum otherwise the output will be 0. Like the carry output of the full adder is connected to the other multiplexer. If reset is 0 then it will give output as carry, otherwise 0. X and Y are AND ed and X, Y and Z are ORed. CODE: module main(x,y,z,rst,q,out,out1,out2,out3); inputx,y,z,rst,q; output out,out1,out2,out3; wires,c; f_adder f_addr1(x,y,z,s,c); mux1 mux_sum(rst,s,out); mux1 mux_carry(rst,c,out1); and(out2,y,x); or(out3,x,y,z); endmodule modulef_adder( input a, input b, inputcin, output sum, output carry); assign sum = a ^ b ^ cin; assign carry = ((a ^ b)&cin) | (a & b); endmodule module mux1(rst,q1,mux_out); input rst,q1; outputmux_out; regmux_out; always @(rst or q1) begin if(rst==1'b1) mux_out<= 0; else mux_out<= q1; end endmodule The Verilog code can be written in Xilinx is shown in the figure below. FIGURE 3: VERILOG CODE After the code is Synthesized, we get two schematic views of the circuit. Namely, 1. RTL schematic 2. Technology schematic RTL SCHEMATIC VIEW OF THE EXAMPLE The block we see in the below screenshot is a result of the Verilog code as given in the example. Here, q, rst, x,y, z are the inputs to the block and out, out1, out2, out3 are output of the block. FIGURE 4: FIRST RTL SCHEMATIC VIEW FOR THE ABOVE VERILOG CODE When we double click on it, we get the inside view of block as shown below: The below screenshot contains one full-adder block, two multiplexers, one two-input AND gate and a 3-input OR gate. The figure 5 is also showing the inter-connections between various blocks. FIGURE 5: INSIDE VIEW OF RTL SCHEMATIC Now double click on the full-adder block, we get the inside view of the full adder as shown in the next screenshot. Here a , b and cin are inputs to the circuit and carry and sum are outputs. FIGURE 6: INSIDE VIEW OF THE FULL ADDER BLOCK FIGURE 7: INSIDE VIEW OF THE MUX_CARRY FIGURE 8: INSIDE VIEW OF THE MUX_SUM XILINX store all RTL schematic information in a file with file extension of .ngr TECHNOLOGY SCHEMATIC VIEW OF THE EXAMPLE FIGURE 9: FIRST TECHNOLOGY SCHEMATIC VIEW OF THE EXAMPLE When we double click on it, we get the inside view of the LUT (Look Up-Table) as shown below: FIGURE 10: INSIDE VIEW OF THE TECHNOLOGY SCHEMATIC In the above diagram, there are four LUTS. 1. LUT4_4114 2. LUT4_5440 3. LUT2_8 4. LUT3_FE LUT4 refers that there are 4 inputs to the LUT. Similarly, LUT2 and LUT3 refers there are 2 and 3 inputs the LUTs respectively. The Initials of the LUTs’ i.e. 4114, 5440, 8 and FE are the values that we get from the truth table for the respective LUTs. Taking the example of LUT4_4114 I3 I2 I1 I0 0 INIT 0 0 0 0 0 4 0 0 0 1 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 4 TABLE NO. 1: TRUTH-TABLE OF LUT4_4114 Output (O) is readfrom bottom of the table. That means first 4 comes for the combination. 1100 1101 1110 1111 0 0 1 0 Double-clicking on the LUT4_4114 will give the inside view of the LUT as shown in Figure 9. FIGURE 11: INSIDE VIEW OF THE LUT4_4114 FIGURE 12: INSIDE VIEW OF THE LUT4_5440 FIGURE 13: INSIDE VIEW OF THE LUT2_8 FIGURE 14: INSIDE VIEW OF LUT3_FE The technology Schematic view information of the example is stored by the XILINX in a file with the extension of .ngc Now, .ngc file format is not in the text file format. To make it in a readable text format, we need to convert the file format into EDIF file extension. We have to note that XILINX student edition does not provide any Gate-Level information unlike Cadence. ABOUT THE EDIF FILE EDIF (Electronic Design Interchange Format) is a vendor-neutral format in which to store Electronic netlists and schematics. It was one of the first attempts to establish a neutral data exchange format for the electronic design automation (EDA) industry. The goal was to establish a common format from which the proprietary formats of the EDA systems could be derived. When customers needed to transfer data from one system to another, it was necessary to write translators from one format to other. As the number of formats (N) multiplied, the translator issue became an N-squared problem. The expectation was that with EDIF the number of translators could be reduced to the number of involved systems. The general format of EDIF involves using parentheses to delimit data definitions, and in this way it superficially resembles Lisp. The basic tokens of EDIF 2.0.0 were keywords (like library, cell, instance, etc.), strings (delimited with double quotes), integer numbers, symbolic constants (e.g. GENERIC, TIE, RIPPER for cell types) and "Identifiers", which are reference labels formed from a very restricted set of characters. EDIF 3.0.0 and 4.0.0 dropped the symbolic constants entirely, using keywords instead. So, the syntax of EDIF has a fairly simple foundation. STEPS TO GENERATE EDIF FILE 1. Open command prompt 2. Change directories and go to the folder where the ngc file is present. 3. Write the following code as shown in the screenshot below and press enter. FIGURE 15: COMMAND PROMPT VIEW TO MAKE EDIF FILE FROM NGC FILE EDIF file of the above example:(edif main (edifVersion 2 0 0) (edifLevel 0) (keywordMap (keywordLevel 0)) (status (written (timestamp 2013 7 26 10 49 39) (program "Xilinx ngc2edif" (version "K.31")) (author "Xilinx. Inc ") (comment "This EDIF netlist is to be used within supported synthesis tools") (comment "for determining resource/timing estimates of the design component") (comment "represented by this netlist.") (comment "Command line: main.ngcmain.edf "))) (external UNISIMS (edifLevel 0) (technology (numberDefinition)) (cell LUT2 (cellType GENERIC) (view view_1 (viewType NETLIST) (interface (port I0 (direction INPUT) ) (port I1 (direction INPUT) ) (port O (direction OUTPUT) ) (property TYPE (string "LUT2") (owner "Xilinx")) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "8") (owner "Xilinx")) ) ) ) Port I0 and port I1, which are highlighted are inputs to the LUT2. Port O is output of LUT2. cell LUT3 (cellType GENERIC) (view view_1 (viewType NETLIST) (interface (port I0 (direction INPUT) ) (port I1 (direction INPUT) ) (port I2 (direction INPUT) ) (port O (direction OUTPUT) ) (property TYPE (string "LUT3") (owner "Xilinx")) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "FE") (owner "Xilinx")) ) ) ) Similarly, port I0, port I1 and port I2 are input ports to the LUT3 and port O is the output of LUT3. (instance out21 (viewRef view_1 (cellRef LUT2 (libraryRef UNISIMS))) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "8") (owner "Xilinx")) ) (instance out31 (viewRef view_1 (cellRef LUT3 (libraryRef UNISIMS))) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "FE") (owner "Xilinx")) ) Here, instance out21 is LUT2 and INIT which we get from truth-table of LUT is “8”. Again, instance out31 is LUT3 and INIT is “FE”. (instance (rename mux_carry_mux_out1 "mux_carry/mux_out1") (viewRef view_1 (cellRef LUT4 (libraryRef UNISIMS))) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "5440") (owner "Xilinx")) ) Here, instance mux_carry_mux_out1has been renamed to"mux_carry/mux_out1". The Cell Type of this instance is LUT4 and INIT string is “5440”. (instance (rename mux_sum_mux_out1 "mux_sum/mux_out1") (viewRef view_1 (cellRef LUT4 (libraryRef UNISIMS))) (property XSTLIB (boolean (true)) (owner "Xilinx")) (property INIT (string "4114") (owner "Xilinx")) Similarly, instance mux_carry_mux_out1has been renamed to "mux_sum/mux_out1". The Cell Type of this instance is LUT4 and INIT string is “4110”. (net X (joined (portRef X) (portRef I (instanceRef X_IBUF_renamed_1)) ) ) Input X is joined to input I of instance X_IBUF_renamed_1. net X_IBUF (joined (portRef I1 (instanceRef out21)) (portRef I1 (instanceRef out31)) (portRef I3 (instanceRef mux_carry_mux_out1)) (portRef I3 (instanceRef mux_sum_mux_out1)) (portRef O (instanceRef X_IBUF_renamed_1)) Here, output of Buffer X_IBUF port O is joined to port I1 of instance out21. It is also joined to port I1 of instance out31, port I3 of instance mux_carry_mux_out1, and port I3 of instance mux_sum_mux_out1. (net Y_IBUF (joined (portRef I0 (instanceRef out21)) (portRef I0 (instanceRef out31)) (portRef I1 (instanceRef mux_carry_mux_out1)) (portRef I1 (instanceRef mux_sum_mux_out1)) (portRef O (instanceRef Y_IBUF_renamed_2)) ) ) Here, output of Buffer Y_IBUF port O is joined to port I1 of instance out21. It is also joined to port I1 of instance out31, port I1 of instance mux_carry_mux_out1, and port I1 of instance mux_sum_mux_out1. Edif file contains many things which are not required. So, to extract the required information we run the file through a program written using Java language. We have to extract the instance name, cell type and INIT string. And also the information regarding the LUTs interlinked/inter-connection. We have developed a tool using Edif Parser. EXTRACTED DATA FROM EDIF FILE: #LUTSTART out21 LUT2 8 #LUTEND #LUTSTART out31 LUT3 FE #LUTEND #LUTSTART mux_carry-mux_out1 LUT4 5440 #LUTEND #LUTSTART mux_sum-mux_out1 LUT4 4114 #LUTEND The above file is processed through our software to generate the required Gate-Level information. The Gate-Level Information is stored in files with “pla” format. The steps are to generate pla file is shown below: 1. Open command prompt 2. Run the tool with EDIF file name as argument 3. PLA files will be created inside “output” sub-directory of the current path FIGURE 16: SCREENSHOT 1 FIGURE 17: SCREENSHOT 2 OUTPUT PLA FILE: #.model out21 #.model mux_carry-mux_out1 .i 2 .i 4 .o 1 .o 1 .ilb I0 I1 .ilb I0 I1 I2 I3 .ob O0 .ob O0 .p 4 .p 1 0111 1 11 1 1011 1 .e #.model out31 #.model mux_sum-mux_out1 .i 3 .i 4 .o 1 .o 1 .ilb I0 I1 I2 .ilb I0 I1 I2 I3 .ob O0 .ob O0 .p 7 001 1 .p 4 0011 1 0101 1 010 1 1001 1 011 1 1111 1 100 1 .e 101 1 110 1 111 1 .e BLIF –Berkeley Logic Interchange Format Specifying the Model: The goal of BLIF is to describe a logic-level hierarchical circuit in textual form. Every BLIF file begins with the model declaration section. This model description is used to refer to the current circuit in other BLIF files. A model is a flattened hierarchical circuit. A blif file can contain many models and references to models described in other blif files. A model is declared as follows: .model <decl-model-name> .inputs <decl-input-list> .outputs <decl-output-list> .clock <decl-clock-list> <command> . . <command> .end For the same circuit, as described in Fig. 1 for the PLA format, 1. Note the number of inputs, it is 4. (a,b,c,d) {Specified by “.inputs”} 2. Note the number of outputs, it is 2. (f, f1) {Specified by “.outputs”} So, in the Blif file, we write: .model example .inputs a,b,c,d .outputs f,f1 Naming the inputs and outputs 3. We define the names of the wires in the input. For the above circuit it is a, b, c, d 4. We define the names of wires in the output. For the above circuit it is f, f1 5. In the blif format we can specify each gate in the network by using the command “.names”. For example, the gate 1 in the above circuit is written as .names a b p 11 1 What does this mean? The output p is high when the inputs a,b are both high. In fact, this represents an AND gate in the circuit. Similarly for Gate 2 in the above circuit, we write .names c d q 11 1 The output p is high when the inputs c,d are both high. This represents an AND gate in the circuit as well. The advantage is that for very large circuits specifying the truth table is very difficult. Imagine specifying the truth table for circuit of 128 inputs and 5 outputs. Under such cases using blif format would be easier. Blif formats also support sequential elements like latches. .model example .inputs a,b,c,d .outputs f,f1 .names a b p 11 1 .names c d q 11 1 .names p q f 1- 1 -11 .names p q f1 11 6.The end of the file is specified using the notation “.end”. .model example .inputs a,b,c,d .outputs f,f1 .names a b p 11 1 .names c d q 11 1 .names p q f 1– 1 -11 .names p q f1 11 1 .end The LUT information we have is fetch into a program which intern calls another program and produce the following output in the form of BLIF file: .model out21 .inputs I0 I1 .outputs O0 .default_input_arrival 0 0 .names I0 I1 O0 11 1 .end .model out31 .inputs I0 I1 I2 .outputs O0 .default_input_arrival 0 0 .names I0 I1 I2 O0 001 1 010 1 011 1 100 1 101 1 110 1 111 1 .end .model mux_carry-mux_out1 .inputs I0 I1 I2 I3 .outputs O0 .default_input_arrival 0 0 .names I0 I1 I2 I3 O0 0110 1 1010 1 1100 1 1110 1 .end .model mux_sum-mux_out1 .inputs I0 I1 I2 I3 .outputs O0 .default_input_arrival 0 0 .names I0 I1 I2 I3 O0 0010 1 0100 1 1000 1 1110 1 .end
© Copyright 2024 ExpyDoc