Transcript Document
ECEN475 Introduction to VLSI System Design Verilog HDL ECEN 475 3.1 HDLs Hardware Description Languages Widely used in logic design Verilog and VHDL Describe hardware using code Document logic functions Simulate logic before building Synthesize code into gates and layout Requires a library of standard cells ECEN 475 2.2 Taste of Verilog Module name Module ports module Add_half ( sum, c_out, a, b ); input a, b; Declaration of port modes output sum, c_out; wire c_out_bar; Declaration of internal signal xor (sum, a, b); nand (c_out_bar, a, b); not (c_out, c_out_bar); endmodule Verilog keywords ECEN 475 Instantiation of primitive gates a b sum c_out_bar c_out 2.3 Taste of Verilog module Add_full ( sum, c_out, a, b, c_in ); input a, b, c_in; output sum, c_out; Adder_half (s1, c1, a, b); Adder_half (sum, c2, s1, c_in); OR (c_out, c1, c2); endmodule ECEN 475 2.4 Behavioral Description module Add_half ( sum, c_out, a, b ); input a, b; output sum, c_out; a Add_half reg sum, c_out; always @ ( a or b ) b begin sum = a ^ b; // Exclusive or c_out = a & b; // And end endmodule ECEN 475 sum c_out 2.5 Continuous Assignment module Add_half ( sum, c_out, a, b ); input a, b; output sum, c_out; assign sum = a ^ b; // Exclusive or assign c_out = a & b; // And endmodule ECEN 475 2.6 Example of Flip-flop module Flip_flop ( q, data_in, clk, rst ); input data_in, clk, rst; output q; reg q; always @ ( posedge clk ) begin if ( rst == 1) q = 0; else q = data_in; end endmodule ECEN 475 rst data_in q clk Declaration of synchronous behavior Procedural statement 2.7 Gate Delay and (yout, x1, x2); // default, zero gate delay and #3 (yout, x1, x2); // 3 units delay for all transitions and #(2,3) G1(yout, x1, x2); // rising, falling delay and #(2,3) G1(yout, x1, x2), G2(yout2, x3, x4); // Multiple instances ECEN 475 2.8 Time Scales Time scale directive: ‘ timescale <time_unit>/<time_precision> time_unit -> physical unit of measure, time scale of delay time_precision -> time resolution/minimum step size during simulation time_unit time_precision ECEN 475 Unit/precision Delay specification Simulator time Delay value in step simulation 1ns / 100ps #4 0.1ns 4.0ns 100ns / ns #4 1ns 400ns 10ns / 100ps #4.629 0.1ns 46.3ns 2.9 Net Delay …… wire #2 y_tran; and #3 (y_tran, x1, x2); buf #1 (buf_out, y_tran); and #3 (y_inertial, x1, x2); …… x1 2 4 6 8 10 2 4 6 8 10 2 4 6 8 10 2 4 6 8 10 2 4 6 8 10 x2 y_inertial x1 y_tran x2 buf_out y_tran y_inertial buf_out ECEN 475 2.10 Structural vs. Behavioral Descriptions module my_module(…); … assign …; // continuous assignment and (…); // instantiation of primitive adder_16 M(…); // instantiation of module always @(…) begin … end initial begin … end endmodule ECEN 475 Structural, no order Behavior, in order in each procedure 2.11 Behavioral Statements initial | always single_statement; | begin block_of_statements; end initial Activated from tsim = 0 Executed once Initialize a simulation always Activated from tsim = 0 Executed cyclically Continue till simulation terminates ECEN 475 2.12 Example of Behavioral Statement module clock1 ( clk ); parameter half_cycle = 50; parameter max_time = 1000; output clk; reg clk; initial clk = 0; always begin #half_cycle clk = ~clk; end initial #max_time $finish; endmodule ECEN 475 clk 50 100 150 200 tsim 2.13 Assignment Continuous assignment Values are assigned to net variables due to some input variable changes “assign …=… “ Procedural assignment Values are assigned to register variables when certain statement is executed in a behavioral description Procedural assignment, “=“ ECEN 475 2.14 Example module mux4_PCA(a, b, c, d, select, y_out); input a, b, c, d; input [1:0] select; output y_out; reg y_out; always @(select or a or b or c or d) begin Value of ‘a’ is assigned to if (select == 0) y_out=a; y_out at this time else if (select == 1) y_out=b; else if (select == 2) y_out=c; else if (select == 3) y_out=d; else y_out=1’bx; end endmodule ECEN 475 2.15 Blocking and Non-blocking Assignment initial begin a = 1; b = 0; a = b; // a = 0; b = a; // b = 0; end initial begin a = 1; b = 0; a <= b; // a = 0; b <= a; // b = 1; end ECEN 475 Blocking assignment “=“ Statement order matters A statement has to be executed before next statement Non-blocking assignment “<=“ Concurrent assignment If there are multiple non- blocking assignments to same variable in same behavior, latter overwrites previous 2.16 Delay Control Operator (#) initial begin #0 in1 = 0; in2 = 1; #10 in3 = 1; #40 in4 = 0; in5 = 1; #60 in3 = 0; end ECEN 475 2.17 Event Control Operator (@) … @ ( eventA or eventB ) begin … Event -> identifier or expression When “@” is reached Activity flow is suspended end The event is monitored Other processes keep going posedge: 0->1, 0->x, x->1 negedge: 1->0, 1->x, x->0 ECEN 475 2.18 Intra-assignment Delay: Blocking Assignment // B = 0 at time 0 // B = 1 at time 4 … #5 A = B; // A = 1 C = D; … A = #5 B; // A = 0 C = D; … A = @(enable) B; C = D; … A = @(named_event) B; C= D; … ECEN 475 If timing control operator(#,@) on LHS Blocking delay RHS evaluated at (#,@) Assignment at (#,@) If timing control operator(#,@) on RHS Intra-assignment delay RHS evaluated immediately Assignment at (#,@) 2.19 Activity Flow Control ( if … else ) if ( A == B ) P = d; if ( B < C ); if ( a >= b ) begin … end if ( A < B ) P = d; else P = k; Syntax: if ( expression ) statement [ else statement ] Value of expression 0, x or z => false Non-zero number => true if ( A > B ) P = d; else if ( A < B ) P = k; else P = Q; ECEN 475 2.20 Conditional Operator ( ? … : ) always @ ( posedge clock ) yout = ( sel ) ? a + b : a – b; Conditional operator can be applied in • either continuous assignments • or behavioral descriptions ECEN 475 2.21 The case Statement module mux4 ( a, b, c, d, select, yout ); input a, b, c, d; input [1:0] select; output yout; reg yout; always @( a or b or c or d or select ) begin case ( select ) 0: yout = a; 1: yout = b; 2: yout = c; 3: yout = d; default yout = 1`bx; endcase endmodule ECEN 475 Case items are examined in order Exact match between case expression and case item casez – treats “z” as don’t cares casex – treats both “x” and “z” as don’t cares 2.22 Switch Level NAND Gate module nand_2 ( Y, A, B ); output Y; input A, B; supply0 GND; supply1 PWR; wire w; pmos ( Y, PWR, A ); pmos ( Y, PWR, B ); nmos ( Y, w, A ); nmos ( w, GND, B ); endmodule ECEN 475 Vdd B A Y A B 2.23