cs6710 tool suite verilog is the key tool
play

CS6710 Tool Suite Verilog is the Key Tool Verilog-XL Behavioral - PDF document

CS6710 Tool Suite Verilog is the Key Tool Verilog-XL Behavioral Verilog is synthesized into Structural Verilog Synopsys Behavioral Synthesis Structural Verilog represents net-lists Verilog Structural From Behavioral Cadence


  1. CS6710 Tool Suite Verilog is the Key Tool Verilog-XL � Behavioral Verilog is synthesized into Structural Verilog Synopsys Behavioral Synthesis � Structural Verilog represents net-lists Verilog Structural � From Behavioral Cadence Verilog � From Schematics SOC Your � From makeMem Library Encounter � High-level (Synthesizer will flatten these) Circuit Verilog-XL CSI Layout � Verilog-XL is used for testing all designs Cadence Cadence � Behavioral & Structural & Schematic & High-level LVS AutoRouter Virtuoso Composer Layout-XL Layout Schematic Verilog has a Split Personality Verilog as HDL (AHT) � Hardware Description Language (HDL) � “C-like hardware description language.” � Reliably & Readably � But what does C have to do with hardware? � Create hardware � Marketing hype cast into vital tools � Document hardware � Verilog is ill-suited to its use. � The wire-list function fits into HDL � Verbose � Testbench creation language � Feels to me like I are “tricking it” � Create external test environment � Good engineers � Time & Voltage � Use only a subset of the language. � Files & messages � Keep Learning. � Are these two tasks � Try before they buy. � Related? � Demo today. � Compatible? Synthesis Quick Review Module name (args…); begin input …; // define inputs This lecture is only about output …; // define outputs synthesis... wire … ; // internal wires reg …; // internal regs, possibly output // the parts of the module body are // executed concurrently <continuous assignments> <always blocks> endmodule 1

  2. Quick Review Procedural Control Statements � Continuous assignments to wire vars � Conditional Statement � assign variable = exp; � if ( <expression> ) <statement> � Result in combinational logic � if ( <expression> ) <statement> � Procedural assignment to reg vars else <statement> � Always inside procedural blocks (always � “else” is always associated with the closest blocks in particular for synthesis) previous if that lacks an else. � blocking � You can use begin-end blocks to make it more clear � variable = exp; � if (index >0) � non-blocking if (rega > regb) � variable <= exp; result = rega; � Can result in combinational or sequential else result = regb; logic Multi-Way Decisions Verilog Description Styles � Verilog supports a variety of description � Standard if-else-if syntax styles � Structural � explicit structure of the circuit If ( <expression> ) � e.g., each logic gate instantiated and connected <statement> to others else if ( <expression> ) � Behavioral <statement> � program describes input/output behavior of circuit else if ( <expression> ) � many structural implementations could have <statement> same behavior else <statement> � e.g., different implementation of one Boolean function Synthesis: Data Types Synthesis: Data Types � Possible Values: � Register declarations � 0: logic 0, false � reg a; \\ a scalar register � 1: logic 1, true � reg [3:0] b; \\ a 4-bit vector register � Z: High impedance � output g; \\ an output can be a reg � Digital Hardware reg g; � The domain of Verilog � output reg g; \\ Verilog 2001 syntax � Either logic (gates) � Wire declarations � Or storage (registers & latches) � Verilog has two relevant data types � wire d; \\ a scalar wire � wire � wire [3:0] e; \\ a 4-bit vector wire � reg � output f; \\ an output can be a wire 2

  3. Parameters Synthesis: Assign Statement � The assign statement creates � Used to define constants combinational logic � parameter size = 16, foo = 8; � assign LHS = expression ; � wire [size-1:0] bus; \\ defines a 15:0 bus � LHS can only be wire type � expression can contain either wire or reg type mixed with operators � wire a,c; reg b;output out; assign a = b & c; assign out = ~(a & b); \\ output as wire � wire [15:0] sum, a, b; wire cin, cout; assign {cout,sum} = a + b + cin; Synthesis: Basic Operators Synthesis: Operand Length � Bit-Wise Logical � When operands are of unequal bit length, � ~ (not), & (and), | (or), ^ (xor), ^~ or ~^ (xnor) the shorter operator is zero-filled in the � Simple Arithmetic Operators most significant bit position � Binary: +, - wire [3:0] sum, a, b; wire cin, cout, d, e, f, g; � Unary: - � Negative numbers stored as 2’s complement assign sum = f & a; � Relational Operators assign sum = f | a; � <, >, <=, >=, ==, != assign sum = {d, e, f, g} & a; � Logical Operators assign sum = {4{f}} | b; assign sum = {4{f == g}} & (a + b); � ! (not), && (and), || (or) assign sum[0] = g & a[2]; assign a = (b > ‘b0110) && (c <= 4’d5); assign sum[2:0] = {3{g}} & a[3:1]; assign a = (b > ‘b0110) && !(c > 4’d5); Synthesis: More Operators Synthesis: Operand Length � Concatenation � Operator length is set to the longest member � {a,b} {4{a==b}} { a,b,4’b1001,{4{a==b}} } (both RHS & LHS are considered). Be careful. � Shift (logical shift) wire [3:0] sum, a, b; wire cin, cout, d, e, f, g; � << left shift wire[4:0]sum1; � >> right shift assign a = b >> 2; // shift right 2, division by 4 assign {cout,sum} = a + b + cin; assign a = b << 1; // shift left 1, multiply by 2 assign {cout,sum} = a + b + {4’b0,cin}; � Arithmetic assign sum1 = a + b; assign a = b * c; // multiply b times c assign sum = (a + b) >> 1; // what is wrong? assign a = b * ‘d2; // multiply b times constant (=2) assign a = b / ‘b10; // divide by 2 (constant only) assign a = b % ‘h3; // b modulo 3 (constant only) 3

  4. Synthesis: Extra Operators Synthesis: Assign Statement � The assign statement is sufficient to � Funky Conditional create all combinational logic � cond_exp ? true_expr : false_expr � What about this: wire [3:0] a,b,c; wire d; assign a = (b == c) ? (c + ‘d1): ‘o5; // good luck assign a = ~(b & c); assign c = ~(d & a); � Reduction Logical � Named for impact on your recreational time � Unary operators that perform bit-wise operations on a single operand, reduce it to one bit � &, ~&, |, ~|, ^, ~^, ^~ assign d = &a || ~^b ^ ^~c; Simple Behavioral Module Simple Structural Module // Behavioral model of NAND gate // Structural Module for NAND gate module NAND (out, in1, in2); module NAND (out, in1, in2); output out; output out; input in1, in2; input in1, in2; assign out = ~(in1 & in2); wire w1; endmodule // call existing modules by name // module-name ID ( signal-list ); AND2 u1(w1, in1, in2); INV u2(out,w1); endmodule Simple Structural Module Procedural Assignment // Structural Module for NAND gate � Assigns values to register types module NAND (out, in1, in2); � They do not have a duration output out; � The register holds the value until the next input in1, in2; procedural assignment to that variable wire w1; � The occur only within procedural blocks // call existing modules by name � initial and always // module-name ID ( signal-list ); � initial is NOT supported for synthesis! // can connect ports by name... � They are triggered when the flow of AND2 u1(.Q(w1), .A(in1), .B(in2)); execution reaches them INV u2(.A(w1), .Q(out)); endmodule 4

  5. Always Blocks Synthesis: Always Statement � The always statement creates… � When is an always block executed? � always @sensitivity LHS = expression ; � always � @sensitivity controls when � LHS can only be reg type � Starts at time 0 � expression can contain either wire or reg type mixed with � always @(a or b or c) operators � Logic � Whenever there is a change on a, b, or c reg c, b; wire a; � Used to describe combinational logic always @(a, b) c = ~(a & b); � always @(posedge foo) always @* c = ~(a & b); � Storage � Whenever foo goes from low to high reg Q; wire clk; � Used to describe sequential logic always @(posedge clk) Q <= D; � always @(negedge bar) � Whenever bar goes from high to low Procedural NAND gate Procedural NAND gate // Procedural model of NAND gate // Procedural model of NAND gate module NAND (out, in1, in2); module NAND (out, in1, in2); output out; output out; reg out; reg out; input in1, in2; input in1, in2; // always executes when in1 or in2 // always executes when in1 or in2 // change value // change value always @(in1 or in2) always @(in1 or in2) begin begin out <= ~(in1 & in2); out = ~(in1 & in2); end end endmodule Is out combinational? endmodule Synthesis: NAND gate Procedural Assignments � Assigns values to reg types input in1, in2; � Only useable inside a procedural block Usually reg n1, n2; // is this a flip-flop? synthesizes to a register wire n3,n4; � But, under the right conditions, can also result in combinational circuits � Blocking procedural assignment always @(in1 or in2) n1 = ~(in1 & in2); always @* n2 = ~(in1 & in2); � LHS = timing-control exp a = #10 1; assign n3 = ~(in1 & in2); � Must be executed before any assignments that nand u1(n4, in1, in2); follow (timing control is optional) � Assignments proceed in order even if no timing is � Notice always block for combinational logic given � Full sensitivity list, but @* works � Non-Blocking procedural assignment � Can then use the always goodies � LHS <= timing-control exp b <= 2; � Is this a good coding style? � Evaluated simultaneously when block starts � Assignment occurs at the end of the (optional) time-control 5

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend