introduction to
play

Introduction to SystemVerilog Instructor: Nima Honarmand (Slides - PowerPoint PPT Presentation

Spring 2015 :: CSE 502 Computer Architecture A Brief Introduction to SystemVerilog Instructor: Nima Honarmand (Slides adapted from Prof. Milders ESE-507 course) Spring 2015 :: CSE 502 Computer Architecture First Things First


  1. Spring 2015 :: CSE 502 – Computer Architecture A Brief Introduction to SystemVerilog Instructor: Nima Honarmand (Slides adapted from Prof. Milder’s ESE-507 course)

  2. Spring 2015 :: CSE 502 – Computer Architecture First Things First • Assume you are familiar with the basics of digital logic design – If not, you can read Appendix A of Hamacher et al. • SystemVerilog is a superset of another HDL: Verilog – Familiarity with Verilog (or even VHDL) helps a lot • Useful SystemVerilog resources and tutorials on the course project web page – Including a link to a good Verilog tutorial

  3. Spring 2015 :: CSE 502 – Computer Architecture Hardware Description Languages • Used for a variety of purposes in hardware design – High-level behavioral modeling – Register Transfer Level (RTL) behavioral modeling – Gate and transistor level netlists – Timing models for timing simulation – Design verification and testbench development – … • Many different features to accommodate all of these • We focus on RTL modeling for the course project – Much simpler than designing with gates – Still, helps you think like a hardware designer

  4. Spring 2015 :: CSE 502 – Computer Architecture HDLs vs. Programming Languages • Have syntactically similar constructs: – Data types, variables, assignments, if statements, loops, … • But very different mentality and semantic model: everything runs in parallel, unless specified otherwise – Statement model hardware – Hardware is inherently parallel • Software programs are composed of subroutines (mostly) – Subroutines call each other – when in a callee , the caller’s execution is paused • Hardware descriptions are composed of modules (mostly) – A hierarchy of modules connected to each other – Modules are active at the same time

  5. Spring 2015 :: CSE 502 – Computer Architecture Modules • The basic building block in SystemVerilog – Interfaces with outside using ports – Ports are either input or output (for now) all ports declared here module name module mymodule(a, b, c, f); output f; input a, b, c; declare which // Description goes here ports are inputs, endmodule which are outputs // alternatively module mymodule(input a, b, c, output f); // Description goes here endmodule 5

  6. Spring 2015 :: CSE 502 – Computer Architecture Module Instantiation module mymodule(a, b, c, f); name of output f; module to input a, b, c; instantiate module_name inst_name(port_connections); endmodule connect the ports name of instance • You can instantiate your own modules or pre-defined gates – Always inside another module • Predefined: and, nand, or, nor, xor, xnor – for these gates, port order is (output, input(s)) • For your modules, port order is however you defined it 6

  7. Spring 2015 :: CSE 502 – Computer Architecture Connecting Ports (By Order or Name) • In module instantiation, can specify port connections by name or by order module mod1(input a, b, output f); // ... endmodule // by order module mod2(input c, d, output g); mod1 i0(c, d, g); Advice: Use endmodule by-name connections // by name (where possible) module mod3(input c, d, output g); mod1 i0(.f(g), .b(d), .a(c)); endmodule 7

  8. Spring 2015 :: CSE 502 – Computer Architecture Combinational Logic Description

  9. Spring 2015 :: CSE 502 – Computer Architecture Structural Design • Example: multiplexor – Output equals an input – Which one depends on “ sel ” module mux(a, b, sel, f); output f; datatype for describing logical value input a, b, sel; logic c, d, not_sel; not gate0(not_sel, sel); and gate1(c, a, not_sel); Built-in gates: and gate2(d, b, sel); port order is: or gate3(f, c, d); output, input(s) endmodule

  10. Spring 2015 :: CSE 502 – Computer Architecture Continuous Assignment • Specify logic behaviorally by writing an expression to show how the signals are related to each other. – assign statement module mux2(a, b, sel, f); output f; input a, b, sel; logic c, d; d assign c = a & (~sel); assign d = b & sel; assign f = c | d; c // or alternatively assign f = sel ? b : a; endmodule 10

  11. Spring 2015 :: CSE 502 – Computer Architecture Combinational Procedural Block • Can use always_comb procedural block to describe combinational logic using a series of sequential statements • All always_comb module mymodule(a, b, c, f); output f; blocks are input a, b, c; independent and always_comb begin parallel to each other // Combinational logic // described // in C-like syntax end endmodule

  12. Spring 2015 :: CSE 502 – Computer Architecture Procedural Behavioral Mux Description module mux3(a, b, sel, f); If we are going to drive f this output logic f; way, need to declare it as logic input a, b, sel; always_comb begin if (sel == 0) begin Important: for behavior to be f = a; combinational, every output (f) end must be assigned in all possible else begin control paths f = b; end Why? Otherwise, would be a latch end and not combinational logic. endmodule

  13. Spring 2015 :: CSE 502 – Computer Architecture Accidental Latch Description • This is not module bad(a, b, f); output logic f; combinational, because input a, b; for certain values of b, f always_comb begin must remember its if (b == 1) begin previous value. f = a; end • This code describes a end endmodule latch. (If you want a latch, you should define it using always_latch )

  14. Spring 2015 :: CSE 502 – Computer Architecture Multiply-Assigned Values • Both of these module bad2(...); ... blocks execute always_comb begin concurrently b = ... something ... end • So what is the always_comb begin b = ... something else ... value of b? end We don’t know! endmodule Don’t do this !

  15. Spring 2015 :: CSE 502 – Computer Architecture Multi-Bit Values • Can define inputs, outputs, or logic with multiple bits module mux4(a, b, sel, f); output logic [3:0] f; input [3:0] a, b; input sel; always_comb begin if (sel == 0) begin f = a; end else begin f = b; end end endmodule

  16. Spring 2015 :: CSE 502 – Computer Architecture Multi-Bit Constants and Concatenation • Can give constants with specified number bits – In binary or hexadecimal • Can concatenate with { and } logic [3:0] a, b, c; • Can reverse order (to index buffers left-to-right) logic signed [3:0] d; logic [7:0] e; logic [1:0] f; assign a = 4’b0010; // four bits, specified in binary assign b = 4’hC; // four bits, specified in hex == 1100 assign c = 3; // == 0011 assign d = -2; // 2’s complement == 1110 as bits assign e = {a, b}; // concatenate == 0010_1100 assign f = a[2 : 1]; // two bits from middle == 01

  17. Spring 2015 :: CSE 502 – Computer Architecture Case Statements and “Don’t - Cares” module newmod(out, in0, in1, in2); input in0, in1, in2; output logic out; output value is undefined in this case always_comb begin case({in0, in1, in2}) 3'b000: out = 1; Last bit is a “don’t 3'b001: out = 0; care” -- this line will 3'b010: out = 0; be active for 100 OR 3'b011: out = x; 101 3'b10x: out = 1; default: out = 0; default gives “else” endcase behavior. Here active end if 110 or 111 endmodule

  18. Spring 2015 :: CSE 502 – Computer Architecture Arithmetic Operators • Standard arithmetic operators defined: + - * / % • Many subtleties here, so be careful: – four bit number + four bit number = five bit number • Or just the bottom four bits – arbitrary division is difficult

  19. Spring 2015 :: CSE 502 – Computer Architecture Addition and Subtraction • Be wary of overflow! logic [3:0] a, b; logic [3:0] d, e, f; logic [4:0] c; assign f = d + e; assign c = a + b; 4’b1000 + 4’b1000 = … Five bit output can prevent overflow: In this case, overflows to zero 4’b1000 + 4’b1000 gives 5’b10000 • Use “signed” if you want logic signed [3:0] g, h, i; values as 2’s logic signed [4:0] j; assign g = 4’b0001; // == 1 complement assign h = 4’b0111; // == 7 assign i = g – h; i == 4’b1010 == -6 assign j = g – h; j == 5’b11010 == -6

  20. Spring 2015 :: CSE 502 – Computer Architecture Multiplication • Multiply k bit number with m bit number k+m – How many bits does the result have? logic signed [3:0] a, b; logic signed [7:0] c; assign a = 4'b1110; // -2 assign b = 4'b0111; // 7 c = 8’b1111_0010 == -14 assign c = a*b; • If you use fewer bits in your code – Gets least significant bits of the product logic signed [3:0] a, b, d; assign a = 4'b1110; // -2 assign b = 4'b0111; // 7 assign d = a*b; d = 4’0010 == 2 Underflow!

  21. Spring 2015 :: CSE 502 – Computer Architecture Sequential Logic Description

  22. Spring 2015 :: CSE 502 – Computer Architecture Sequential Design • Everything so far was purely combinational – Stateless • What about sequential systems? – flip-flops, registers, finite state machines • New constructs – always_ff @(posedge clk , …) – non-blocking assignment <=

  23. Spring 2015 :: CSE 502 – Computer Architecture Edge-Triggered Events • Variant of always block called always_ff – Indicates that block will be sequential logic (flip flops) • Procedural block occurs only on a signal’s edge – @(posedge …) or @(negedge …) always_ff @(posedge clk, negedge reset_n) begin // This procedure will be executed // anytime clk goes from 0 to 1 // or anytime reset_n goes from 1 to 0 end

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