1 / 30

Data Types and Operators

Data Types and Operators. Data Types. Represent values of signals in physical circuit in a digital format Nets – Represent physical connectivity variable – Abstractions of storage elements Nets and registers may be either scalars or vectors. Storage Variable.

andrewblack
Download Presentation

Data Types and Operators

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Data Types and Operators

  2. Data Types • Represent values of signals in physical circuit in a digital format • Nets – • Represent physical connectivity • variable – • Abstractions of storage elements • Nets and registers may be either scalars or vectors ELEN 468 Lecture 4

  3. Storage Variable • Storage variable = register • reg, integer, real, realtime, time • Abstraction of storage element • Need not correspond directly to physical storage element in circuit • Static – its value is assigned under program flow

  4. Value Assignment • Explicitly – through behavioral statements • Implicitly – driven by a gate • A net may be assigned value explicitly only through continuous assignment • A register variable may be assigned value only within a behavior

  5. Verilog Nets • wire (default) • tri • wand • wor • triand • trior tri triand/trior wand/wor Not recommended!

  6. Example ctrl tri y; bufif1(y, x, ctrl); triand y; bufif1(y, x1, ctrl1); bufif1(y, x2, ctrl2); y x Three-state gate ctrl1 x1 ctrl2 y x2

  7. Truth Tables wire/tri 0 1 x z 0 0 x x 0 1 x 1 x 1 x x x x x z 0 1 x z triand / wand 0 1 x z 0 0 0 0 0 1 0 1 x 1 x 0 x x x z 0 1 x z trior/wor 0 1 x z 0 0 1 x 0 1 1 1 1 1 x x 1 x x z 0 1 x z

  8. More Verilog Nets Vdd tri0 • supply0 • supply1 • tri0 • tri1 • trireg Vdd supply1 supply0 Gnd Gnd tri1 a b when a = b = 0, the line maintains its value trireg

  9. Net Declaration wire[7:0] data_bus; // 8-bit vector wire, data_bus[7] -> MSB wire[0:3] control_bus; // control_bus[0] -> MSB data_bus[5], data_bus[3:5], data_bus[k+2] // access wirescalared[7:0] bus_a; // “scalared” is default wirevectored[7:0] bus_b; // Individual bits may not be referenced wire y1, z_5; // Multiple declaration wire A = B+C, D = E+F; // Implicit continuous assignment wand A, B, C; trireg[7:0] A;

  10. Initial Values • At time tsim = 0 • Nets driven by primitives, module or continuous assignment is determined by their drivers, default value “x” • Net without driver, its initial value “z” • Default initial value for register -> “x”

  11. reg – stores a logic value integer – support computation time – stores time as a 64-bit unsigned quantity real – stores values as real numbers realtime – store time values as real numbers variable Data Types • Assigned value only within a procedural statement, a user defined sequential primitive, task or function • A reg object may never be output of • a primitive gate • the target of a continuous assignment • Undeclared identifier is assumed as a net, which is illegal within behavior

  12. Addressing Net and Register Variables • MSB of a part-select of a register = leftmost array index • LSB = rightmost array index • If index of part-select is out of bounds, “x” is returned • If word [7:0] = 8’b00000100 • word [3:0] = 4 • word [5:1] = 2 • Integer array • integer A[3:0];

  13. Variables and Ports An input port is implicitly a net variable

  14. Memories Word size Memory size … reg[31:0] cache_memory[0:1023]; reg[31:0] word_register; reg[7:0] instr_register; … word_register = cache_memory[17]; … // a loop … instr_register[k] = word_register[k+4]; … • Individual bits within a memory cannot be addressed directly • The word is fetched to a register, then bit can be accessed

  15. Scope of a Variable The scope of a variable is the module, task, function, or named procedural block (begin … end) in which it is declared

  16. De-Reference • To reference a variable defined inside an instantiated module • X.w • X.Y.Z.w Module A - Instance X wire w Module B - Instance Y Module C - Instance Z wire w

  17. Example of De-referencing module testbench(); reg [3:0] a, b; wire [3:0] y; adder M1 (y, a, b); initial $monitor($time,,”%”, M1.c); endmodule module adder(y, a, b); … wire c; … endmodule

  18. Strings • Verilog does not have type for strings • A string must be stored in a register array reg [8*num_char-1 : 0] string_holder;

  19. Constants • Declared with keyword parameter • Value may not be changed during simulation parameter width = 32, depth = 1024; parameter real_value = 6.22; parameter av_delay = (dmin + dmax)/2;

  20. module modXnor(y, a, b); parameter size=8, delay=15; output [size-1:0] y; input [size-1:0] a, b; wire [size-1:0] #delay y = a~^b; endmodule module param; wire [7:0] y1; wire [3:0] y2; reg [7:0] b1, c1; reg [3:0] b2, c2; modXnor G1(y1, b1, c1); modXnor #(4,5) G2(y2, b2, c2); endmodule Value of a constant can be changed during compilation Don’t confuse with assigning delay to primitives Module instantiation do not have delay Primitives do not have parameters Direct Substitution of Parameters

  21. module param; wire [7:0] y1; wire [3:0] y2; reg [7:0] b1, c1; reg [3:0] b2, c2; modXnor G1(y1, b1, c1); modXnor G2(y2, b2, c2); endmodule module annotate; defparam param.G2.size = 4; parem.G2.delay = 5; endmodule Declare a separate module where defparam is used with hierarchical pathname Indirect Substitution of Parameters

  22. Operators

  23. Arithmetic Operators • 2’s complement representation • MSB is sign bit • For scalar and vector • For nets and registers

  24. Bitwise Operators ~(101011) = 010100 (010101) & (001100) = 000100 (010101) ^ (001100) = 011001 Shorter word will extend to the size of longer word by padding bits with “0”

  25. Reduction Operators • Unary operators • Return single-bit value &(101011) = 0 |(001100) = 1

  26. Logical Operators • Case equality operators detect exact bit-by-bit match, including “x” or “z” • The logical equality operator is less restrictive, “x” is returned for any ambiguity • === can recognize ‘x’ and ‘z’ while == would return ‘x’ for ambiguity

  27. Relational operators return ‘x’ for ambiguity 0xxx > 1xxx returns 1 if ( ( a < b ) && ( a >= c ) ) result = a << 3; Relational and Shift Operators

  28. Y = ( A == B ) ? C : D; wire [1:0] select; wire [15:0] D1, D2, D3, D4; wire [15:0] bus = (select == 2’b00) ? D1 : (select == 2’b01) ? D2 : (select == 2’b10) ? D3 : (select == 2’b11) ? D4 : 16’bx “z” is not allowed in conditional_expression If conditional_expression is ambiguous, both true_expression and false_expression are evaluated bitwisely according to the truth table to get the result Conditional Operator

  29. Operands • A Verilog operand may be compose of • Nets • Registers • Constants • Numbers • Bit-select of a net or a register • Part-select of a net or a register • A function call • Concatenation of any of above

  30. Operator Precedence Parentheses for precaution !

More Related