Download presentation
Presentation is loading. Please wait.
Published byCandice Tyler Modified over 9 years ago
1
Digital System Design Verilog ® HDL Behavioral Modeling Maziar Goudarzi
2
Objectives of this Topic initial and always blocks The concept of multiple flows of control Practice simple examples Procedural assignment vs. Continuous assignment Conditional statements – if, case, casex, casez Loop statements – while, for, repeat, forever 2010DSD2
3
Introduction The move toward higher abstractions – Gate-level modeling Netlist of gates – Dataflow modeling Boolean function assigned to a net – Now, behavioral modeling A sequential algorithm (quite similar to software) that determines the value(s) of variable(s) 2010DSD3
4
Structured Procedures Two basic structured procedure statements always initial – All behavioral statements appear only inside these blocks – Each always or initial block has a separate activity flow (multithreading, concurrency) – Start from simulation time 0 – No nesting 2010DSD4
5
Structured Procedures: initial statement Starts at time 0 Executes only once during a simulation Multiple initial blocks, execute in parallel – All start at time 0 – Each finishes independently Syntax: initial begin // behavioral statements end 2010DSD5
6
Structured Procedures: initial statement (cont’d) module stimulus; reg x, y, a, b, m; initial m= 1’b0; initial begin #5 a=1’b1; #25 b=1’b0; end initial begin #10 x=1’b0; #25 y=1’b1; end initial #50 $finish; endmodule 2010DSD6 Example:
7
Initializing variables Ordinary style, using initial block reg clock; initial clock = 0; Combined declaration and initialization reg clock = 0; // RHS must be constant module adder ( output reg [7:0] sum = 0, output reg co = 0, input [7:0] a, b, input ci);... endmodule 72010DSD
8
Structured Procedures: always statement Start at time 0 Execute the statements in a looping fashion Example 2010DSD8
9
Procedural Assignments Assignments inside initial and always To update values of “register” data types – The value remains unchanged until another procedural assignment updates it – Compare to continuous assignment (Dataflow Modeling, previous chapter) 2010DSD9
10
Procedural Assignments (cont’d) Syntax = – can be reg, integer, real, time A bit-select of the above (e.g., addr[0] ) A part-select of the above (e.g., addr[31:16] ) A concatenation of any of the above – is the same as introduced in dataflow modeling – What happens if the widths do not match? LHS wider than RHS => RHS is zero-extended RHS wider than LHS => RHS is truncated (Least significant part is kept) 2010DSD10
11
Behavioral Modeling Statements: Conditional Statements Just the same as if-else in C Syntax: if ( ) true_statement; else false_statement; if ( ) true_statement1; else if ( ) true_statement2; else if ( ) true_statement3; else default_statement; True is 1 or non-zero False is 0 or ambiguous ( x or z ) More than one statement: begin end 2010DSD11
12
Behavioral Modeling Statements: Multiway Branching Similar to switch-case statement in C Syntax: case ( ) alternative1: statement1; alternative2: statement2;... default: default_statement; // optional endcase Notes: – is compared to the alternatives in the order specified. – Default statement is optional 2010DSD12
13
Multiway Branching (cont’d) Examples: To be provided in the class Now, you write a 4-to-1 multiplexer. 2010DSD13
14
Multiway Branching (cont’d) The case statements compare and alternatives bit-for-bit – x and z values should match 2010DSD14 module demultiplexer1_to_4(out0, out1, out2, out3, in, s1, s0); output out0, out1, out2, out3; input in, s1, s0; always @(s1 or s0 or in) case( {s1, s0} ) 2’b00: begin... end 2’b01: begin... end 2’b10: begin... end 2’b11: begin... end 2’bx0, 2’bx1, 2’bxz, 2’bxx, 2’b0x, 2’b1x, 2’bzx: begin... end 2’bz0, 2’bz1, 2’bzz, 2’b0z, 2’b1z: begin... end default: $display(“Unspecified control signals”); endcase endmodule
15
Multiway Branching (cont’d) casex and casez keywords – casez treats all z values as “don’t care” – casex treats all x and z values as “don’t care” Example: To be provided in the class 2010DSD15
16
Behavioral Modeling Statements: Loops Loops in Verilog – while, for, repeat, forever The while loop syntax: while ( ) statement; 2010DSD16
17
while Loop Example To be provided in the class 2010DSD17
18
Loops (cont’d) The for loop – Similar to C – Syntax: for( init_expr; cond_expr; change_expr) statement; – Example: Provided in the class 2010DSD18
19
Loops (cont’d) The repeat loop – Syntax: repeat( number_of_iterations ) statement; – The number_of_iterations expression is evaluated only when the loop is first encountered integer count; initial begin count = 0; repeat(128) begin $display("Count = %d", count); count = count + 1; end 201019
20
Loops (cont’d) The forever loop – Syntax: forever statement; – Equivalent to while(1) 2010DSD20
21
Have your learned this topic What is behavioral modeling What are the Verilog constructs for behavioral modeling Statements used in behavioral modeling – Conditional – Multiway branching – Loops 2010DSD21
22
Objectives of This Topic Internal operations of Event-Driven simulators Behavioral Modeling (cont’d) – Blocking vs. non-blocking assignments – Race condition – Timing control by delays, events, and level – Other features 2010DSD22
23
Two Types of Simulators Oblivious Simulators – Evaluate outputs repetitively at predefined time intervals Event Driven Simulators – Evaluate outputs only when an event occurs on the inputs 2010DSD23
24
Internal Operations of Event-Driven Simulators Event Transaction The simulation cycle 2010DSD24
25
Blocking Procedural Assignments The two types of procedural assignments – Blocking assignments – Non-blocking assignments Blocking assignments – are executed in order (sequentially) – Example: reg x, y, z; reg [15:0] reg_a, reg_b; integer count; initial begin x=0; y=1; z=1; count=0; reg_a= 16’b0; reg_b = reg_a; #15 reg_a[2] = 1’b1; #10 reg_b[15:13] = {x, y, z}; count = count + 1; end 2010DSD25 All executed at time 0 All executed at time 25 executed at time 15
26
Non-Blocking Procedural Assignments Non-blocking assignments – Processing of the next statements is not blocked for this one – Transactions created sequentially (in order), but executed after all blocking assignments in the corresponding simulation cycle – Syntax: – Example: reg x, y, z; reg [15:0] reg_a, reg_b; integer count; initial begin x=0; y=1; z=1; count=0; reg_a= 16’b0; reg_b = reg_a; reg_a[2] <= #15 1’b1; reg_b[15:13] <= #10 {x, y, z}; count <= count + 1; end 2010 All executed at time 0 Scheduled to run at time 15 Scheduled to run at time 10
27
Non-Blocking Assignments (cont’d) Application of non-blocking assignments – Used to model concurrent data transfers – Example: Write behavioral statements to swap values of two variables always @(posedge clock) begin reg1 <= #1 in1; reg2 <= @(negedge clock) in2 ^ in3; reg3 <= #1 reg1; end 2010DSD27 The old value of reg1 is used
28
Race Condition When the final result of simulating two (or more) concurrent processes depends on their order of execution Example: always @(posedge clock) b = a; always @(posedge clock) a = b; Solution: always @(posedge clock) b <= a; always @(posedge clock) a <= b; 2010DSD28 always @(posedge clock) begin temp_b = b; temp_a = a; b = temp_a; a = temp_b; end
29
Race Condition (cont’d) Recommendation – Concurrent data transfers => race condition – Use non-blocking assignments for concurrent data transfers – Example: pipeline modelling – Disadvantage: Lower simulation performance Higher memory usage in the simulator 2010DSD29
30
Timing Controls in Behavioral Modeling
31
Introduction No timing controls No advance in simulation time Three methods of timing control – delay-based – event-based – level-sensitive 2010DSD31
32
Delay-based Timing Controls Delay Duration between encountering and executing a statement Delay symbol: # Delay specification syntax: #5 #(1:2:3) 2010DSD32
33
Delay-based Timing Controls (cont’d) Types of delay-based timing controls 1. Regular delay control 2. Intra-assignment delay control 3. Zero-delay control 2010DSD33
34
Regular Delay Control Symbol: non-zero delay before a procedural assignment 2010DSD34
35
Intra-assignment Delay Control Symbol: non-zero delay to the right of the assignment operator Operation sequence: 1. Compute the RHS expression at current time. 2. Defer the assignment of the above computed value to the LHS by the specified delay. 2010DSD35
36
Zero-Delay Control Symbol: #0 Different initial/always blocks in the same simulation time – Execution order non-deterministic #0 ensures execution after all other statements – Eliminates race conditions (only in simulation) Multiple zero-delay statements – Non-deterministic execution order 2010DSD36
37
Event-based Timing Control Event – Change in the value of a register or net – Used to trigger execution of a statement or block (reactive behavior/reactivity) Types of Event-based timing control 1. Regular event control 2. Named event control 3. Event OR control 2010DSD37
38
Regular Event Control Symbol: @( ) Events to specify: – posedge sig Change of sig from any value to 1 or from 0 to any value – negedge sig Change of sig from any value to 0 or from 1 to any value – sig Any change in sig value 2010DSD38
39
Named Event Control You can declare (name) an event, and then trigger and recognize it. Keyword: event event calc_finished; Verilog symbol for triggering: -> ->calc_finished Verilog symbol for recognizing: @() @(calc_finished) 2010DSD39
40
Event OR control Used when need to trigger a block upon occurrence of any of a set of events. The list of the events: sensitivity list Keyword: or 2010DSD40
41
Event OR control Simpler syntax – always @( reset, clock, d) – @* and @(*) 2010DSD41
42
Level-sensitive Timing Control Level-sensitive vs. event-based – event-based: wait for triggering of an event (change in signal value) – level-sensitive: wait for a certain condition (on values/levels of signals) Keyword: wait() always wait(count_enable) #20 count=count+1; 2010DSD42
43
Have you learned this topic? Race conditions – Blocking vs. non-blocking assignments – Zero delay control Timing control in behavioral statements – Required to advance the simulation time – Different types Delay-based Event-based Level-sensitive 2010DSD43
44
Objectives of This Topic Some more constructs on Behavioral Modeling – Parallel blocks – Nested blocks – disable keyword Verilog® Scheduling Semantics 2011DSD44
45
Blocks, Sequential blocks Used to group multiple statements Sequential blocks – Keywords: begin end – Statements are processed in order. – A statement is executed only after its preceding one completes. Exceptions: non-blocking assignments and intra-assignment delays – A delay or event is relative to the simulation time when the previous statement completed execution 2011DSD45
46
Parallel Blocks – Keywords: fork, join – Statements in the blocks are executed concurrently – Timing controls specify the order of execution of the statements – All delays are relative to the time the block was entered The written order of statements is not important The join is done when all the parallel statements are finished 2011DSD46
47
Sequential vs. Parallel Blocks initial begin x=1’b0; #5y=1’b1; #10z={x,y}; #20w={y,x}; end initial fork x=1’b0; #5y=1’b1; #10z={x,y}; #20w={y,x}; join DSD472011
48
Parallel Blocks and Race Parallel execution Race conditions may arise initial fork x=1’b0; y=1’b1; z={x,y}; w={y,x}; join z,w can take either 2’b01, 2’b10 or 2’bxx, 2’bxx or other combinations depending on simulator 2011DSD48
49
Special Features of Blocks Contents – Nested blocks – Named blocks – Disabling named blocks 2011DSD49
50
Nested Blocks Sequential and parallel blocks can be mixed initial begin x=1’b0; fork #5 y=1’b1; #10 z={x,y}; join #20w={y,x}; end 2011DSD50
51
Named blocks Syntax: begin: fork: … endjoin Advantages: – Can have local variables (local variables are static) – Are part of the design hierarchy. – Their local variables can be accessed using hierarchical names – Can be disabled 2011DSD51
52
Disabling Named Blocks Keyword: disable Action: – Similar to break in C/C++, but can disable any named block not just the inner-most block. 2011DSD52
53
Behavioral Modeling Some Examples
54
4-to-1 Multiplexer 2011DSD54
55
4-bit Counter 2011DSD55
56
Have you learned this topic? Sequential and Parallel Blocks Special Features of Blocks – Nested blocks – Named blocks – Disabling named blocks 2011DSD56
57
Objectives of This Topic Use Tasks and Functions for better structured code 2010DSD57
58
Introduction Procedures/Subroutines/Functions in SW programming languages – The same functionality, in different places Verilog equivalence: – Tasks and Functions – Used in behavioral modeling – Part of design hierarchy Hierarchical name 2010DSD58
59
Functions Keyword: function, endfunction Can be used if the procedure – does not have any timing control constructs – returns exactly one single value – has at least one input argument 2010DSD59
60
Function Declaration Syntax function ; input // at least one input // optional begin // if more than one statement needed end // if begin used endfunction 2010DSD60
61
Function Invocation Syntax ( ); Example: function my_not; input in; my_not= ~in; endfunction reg ni; initial ni = my_not(i); 2010DSD61
62
Function Semantics – much like function in Pascal – An internal implicit reg is declared inside the function with the same name – The return value is specified by setting that implicit reg – defines width and type of the implicit reg can be integer or real default bit width is 1 2010DSD62
63
Two Function Examples: Parity Generator, and Controllable Shifter 2010DSD63
64
Tasks Keywords: task, endtask Must be used if the procedure has – any timing control constructs – zero or more than one output arguments – no input arguments 2010DSD64
65
Task Declaration Syntax task ; // optional begin // if more than one statement needed end // if begin used! endtask 2010DSD65
66
Task Invocation Syntax ; ( ); – input and inout arguments are passed into the task – output and inout arguments are passed back to the invoking statement when task is completed 2010DSD66
67
I/O declaration in modules vs. tasks – Both use keywords: input, output, inout – In modules, represent ports connect to external signals – In tasks, represent arguments pass values to and from the task 2010DSD67
68
Task Examples Use of input and output arguments Use of module local variables 2010DSD68
69
Automatic Tasks and Functions Used for re-entrant code – Task called from multiple locations – Recursive function calls Keyword – automatic Example function automatic integer factorial; task automatic bitwise_xor; 2010DSD69
70
Automatic Function Example Factorial 2010DSD70
71
Tasks and Functions Differences between Tasks and Functions
72
Differences between... Functions – Can enable (call) just another function (not task) – Execute in 0 simulation time – No timing control statements allowed – At least one input – Return only a single value Tasks – Can enable other tasks and functions – May execute in non-zero simulation time – May contain any timing control statements – May have arbitrary input, output, or inout – Do not return any value 2010DSD72
73
Have you learned this topic? How to define tasks and functions Where to use each of them – The same purpose as subroutines in SW – Provide more readability, easier code management – Are part of design hierarchy – Tasks are more general than functions Can represent almost any common Verilog code – Functions can only model purely combinational calculations 2010DSD73
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.