What is Verilog Hardware Description Language HDL Developed
- Slides: 66
What is Verilog • Hardware Description Language (HDL) • Developed in 1984 • Standard: IEEE 1364, Dec 1995 Thanasis Oikonomou 1 Verilog HDL Basics
Application Areas of Verilog Suitable for all levels Behavioral level Not suitable System Specification HW/SW Partition Hardware Spec Softwre Spec ASIC Boards & Systems FPGA PLD Software Std Parts Thanasis Oikonomou 2 Verilog HDL Basics
Basic Limitation of Verilog Description of digital systems only Thanasis Oikonomou 3 Verilog HDL Basics
Abstraction Levels in Verilog Behavioral RTL Our focus Gate Layout (VLSI) Thanasis Oikonomou 4 Verilog HDL Basics
Main Language Concepts (i) • Concurrency • Structure Thanasis Oikonomou 5 Verilog HDL Basics
Main Language Concepts (ii) • Procedural Statements • Time Thanasis Oikonomou 6 Verilog HDL Basics
User Identifiers • Formed from {[A-Z], [a-z], [0 -9], _, $}, but. . • . . can’t begin with $ or [0 -9] – myidentifier – m_y_identifier – 3 my_identifier – $my_identifier – _myidentifier$ • Case sensitivity – myid Myid Thanasis Oikonomou 7 Verilog HDL Basics
Comments • // The rest of the line is a comment • /* Multiple line comment */ • /* Nesting /* comments */ do NOT work Thanasis Oikonomou 8 */ Verilog HDL Basics
Verilog Value Set • 0 represents low logic level or false condition • 1 represents high logic level or true condition • x represents unknown logic level • z represents high impedance logic level Thanasis Oikonomou 9 Verilog HDL Basics
Numbers in Verilog (i) <size>’<radix> <value> No of bits Binary b or B Octal o or O Decimal d or D Hexadecimal h or H Consecutive chars 0 -f, x, z – 8’h ax = 1010 xxxx – 12’o 3 zx 7 = 011 zzzxxx 111 Thanasis Oikonomou 10 Verilog HDL Basics
Numbers in Verilog (ii) • You can insert “_” for readability – 12’b 000_111_010_100 – 12’b 000111010100 – 12’o 07_24 Represent the same number • Bit extension – MS bit = 0, x or z extend this • 4’b x 1 = 4’b xx_x 1 – MS bit = 1 zero extension • 4’b 1 x = 4’b 00_1 x Thanasis Oikonomou 11 Verilog HDL Basics
Numbers in Verilog (iii) • If size is ommitted it – is inferred from the value or – takes the simulation specific number of bits or – takes the machine specific number of bits • If radix is ommitted too. . decimal is assumed – 15 = <size>’d 15 Thanasis Oikonomou 12 Verilog HDL Basics
Nets (i) • Can be thought as hardware wires driven by logic • Equal z when unconnected • Various types of nets – wire – wand – wor – tri (wired-AND) (wired-OR) (tri-state) • In following examples: Y is evaluated, automatically, every time A or B changes Thanasis Oikonomou 13 Verilog HDL Basics
Nets (ii) A B Y wire Y; // declaration assign Y = A & B; wand Y; // declaration assign Y = A; assign Y = B; A Y B wor Y; // declaration assign Y = A; assign Y = B; dr A Thanasis Oikonomou Y tri Y; // declaration assign Y = (dr) ? A : z; 14 Verilog HDL Basics
Registers • • Variables that store values Do not represent real hardware but. . real hardware can be implemented with registers Only one type: reg A, C; // declaration // assignments are always done inside a procedure A = 1; C = A; // C gets the logical value 1 A = 0; // C is still 1 C = 0; // C is now 0 • Register values are updated explicitly!! Thanasis Oikonomou 15 Verilog HDL Basics
Vectors • Represent buses wire [3: 0] bus. A; reg [1: 4] bus. B; reg [1: 0] bus. C; • Left number is MS bit • Slice management bus. C = bus. A[2: 1]; bus. C[1] = bus. A[2]; bus. C[0] = bus. A[1]; • Vector assignment (by position!!) bus. B[1] = bus. A[3]; bus. B = bus. A; Thanasis Oikonomou bus. B[2] = bus. A[2]; bus. B[3] = bus. A[1]; bus. B[4] = bus. A[0]; 16 Verilog HDL Basics
Integer & Real Data Types • Declaration integer i, k; real r; • Use as registers (inside procedures) i = 1; // assignments occur inside procedure r = 2. 9; k = r; // k is rounded to 3 • Integers are not initialized!! • Reals are initialized to 0. 0 Thanasis Oikonomou 17 Verilog HDL Basics
Time Data Type • Special data type for simulation time measuring • Declaration time my_time; • Use inside procedure my_time = $time; // get current sim time • Simulation runs at simulation time, not real time Thanasis Oikonomou 18 Verilog HDL Basics
Arrays (i) • Syntax integer count[1: 5]; // 5 integers reg var[-15: 16]; // 32 1 -bit regs reg [7: 0] mem[0: 1023]; // 1024 8 -bit regs • Accessing array elements – Entire element: mem[10] = 8’b 1010; – Element subfield (needs temp storage): reg [7: 0] temp; . . temp = mem[10]; var[6] = temp[2]; Thanasis Oikonomou 19 Verilog HDL Basics
Arrays (ii) • Limitation: Cannot access array subfield or entire array at once var[2: 9] = ? ? ? ; // WRONG!! var = ? ? ? ; // WRONG!! • No multi-dimentional arrays reg var[1: 10] [1: 100]; // WRONG!! • Arrays don’t work for the Real data type real r[1: 10]; // WRONG !! Thanasis Oikonomou 20 Verilog HDL Basics
Strings • Implemented with regs: reg [8*13: 1] string_val; // can hold up to 13 chars. . string_val = “Hello Verilog”; string_val = “hello”; // MS Bytes are filled with 0 string_val = “I am overflowed”; // “I ” is truncated • Escaped chars: – n newline – t tab – %% % – \ – “ “ Thanasis Oikonomou 21 Verilog HDL Basics
Logical Operators • && logical AND • || logical OR logical NOT • Operands evaluated to ONE bit value: 0, 1 or x • Result is ONE bit value: 0, 1 or x • ! A = 6; B = 0; C = x; Thanasis Oikonomou A && B 1 && 0 0 A || !B 1 || 1 1 C || B x || 0 x but C&&B=0 22 Verilog HDL Basics
Bitwise Operators (i) bitwise AND | bitwise OR ~ bitwise NOT ^ bitwise XOR ~^ or ^~ bitwise XNOR • & • • • Operation on bit by bit basis Thanasis Oikonomou 23 Verilog HDL Basics
Bitwise Operators (ii) c = a & b; c = ~a; • a = 4’b 1010; b = 4’b 1100; c = a ^ b; • a = 4’b 1010; b = 2’b 11; Thanasis Oikonomou 24 Verilog HDL Basics
Reduction Operators • & • | • ^ • ~& • ~| • ~^ or ^~ AND OR XOR NAND NOR XNOR • One multi-bit operand One single-bit result a = 4’b 1001; . . c = |a; // c = 1|0|0|1 = 1 Thanasis Oikonomou 25 Verilog HDL Basics
Shift Operators shift right • << shift left • >> • Result is same size as first operand, always zero filled a = 4’b 1010; . . . d = a >> 2; // d = 0010 c = a << 1; // c = 0100 Thanasis Oikonomou 26 Verilog HDL Basics
Concatenation Operator • {op 1, op 2, . . } concatenates op 1, op 2, . . to single number • Operands must be sized !! reg a; reg [2: 0] b, c; . . a = 1’b 1; b = 3’b 010; c = 3’b 101; catx = {a, b, c}; caty = {b, 2’b 11, a}; catz = {b, 1}; // catx = 1_010_101 // caty = 010_11_1 // WRONG !! • Replication. . catr = {4{a}, b, 2{c}}; Thanasis Oikonomou 27 // catr = 1111_010_101101 Verilog HDL Basics
Relational Operators greater than • < less than • >= greater or equal than • <= less or equal than • > • Result is one bit value: 0, 1 or x 1 > 0 ’b 1 x 1 <= 0 10 < z Thanasis Oikonomou 1 x x 28 Verilog HDL Basics
Equality Operators logical equality • != logical inequality • === case equality • !== case inequality • == Return 0, 1 or x Return 0 or 1 – 4’b 1 z 0 x == 4’b 1 z 0 x x – 4’b 1 z 0 x != 4’b 1 z 0 x x – 4’b 1 z 0 x === 4’b 1 z 0 x 1 – 4’b 1 z 0 x !== 4’b 1 z 0 x 0 Thanasis Oikonomou 29 Verilog HDL Basics
Conditional Operator • cond_expr ? true_expr : false_expr • Like a 2 -to-1 mux. . A B 1 Y Y = (sel)? A : B; 0 sel Thanasis Oikonomou 30 Verilog HDL Basics
Arithmetic Operators (i) • +, -, *, /, % • If any operand is x the result is x • Negative registers: – regs can be assigned negative but are treated as unsigned reg [15: 0] reg. A; . . // stored as 216 -12 = 65524 reg. A = -4’d 12; reg. A/3 Thanasis Oikonomou evaluates to 21861 31 Verilog HDL Basics
Arithmetic Operators (ii) • Negative integers: – can be assigned negative values – different treatment depending on base specification or not reg [15: 0] reg. A; integer int. A; . . int. A = -12/3; // evaluates to -4 (no base spec) int. A = -’d 12/3; // evaluates to 1431655761 (base spec) Thanasis Oikonomou 32 Verilog HDL Basics
Operator Precedence Use parentheses to enforce your priority Thanasis Oikonomou 33 Verilog HDL Basics
Hierarchical Design Top Level Module Sub-Module 1 E. g. Sub-Module 2 Full Adder Half Adder Basic Module 1 Basic Module 2 Thanasis Oikonomou Half Adder Basic Module 3 34 Verilog HDL Basics
Module my_module(out 1, . . , in. N); in 1 in 2 out 1 out 2 my_module f output out 1, . . , out. M; input in 1, . . , in. N; . . // declarations in. N out. M . . // description of f (maybe. . // sequential) endmodule Everything you write in Verilog must be inside a module exception: compiler directives Thanasis Oikonomou 35 Verilog HDL Basics
Example: Half Adder A module half_adder(S, C, A, B); output S, C; input A, B; S B C wire S, C, A, B; A B Half Adder Thanasis Oikonomou assign S = A ^ B; assign C = A & B; S C endmodule 36 Verilog HDL Basics
Example: Full Adder in 1 A in 2 B Half Adder 1 ha 1 I 1 S C I 2 A B Half Adder ha 2 sum S C I 3 cout cin module full_adder(sum, cout, in 1, in 2, cin); output sum, cout; input in 1, in 2, cin; Module name wire sum, cout, in 1, in 2, cin; wire I 1, I 2, I 3; half_adder ha 1(I 1, I 2, in 1, in 2); half_adder ha 2(sum, I 3, I 1, cin); Instance name assign cout = I 2 || I 3; endmodule Thanasis Oikonomou 37 Verilog HDL Basics
Hierarchical Names ha 2. A in 1 A in 2 B Half Adder 1 ha 1 S C I 1 I 2 A B Half Adder ha 2 S C sum I 3 cout cin Remember to use instance names, not module names Thanasis Oikonomou 38 Verilog HDL Basics
Port Assignments module • Inputs reg or net module reg or net • Outputs net module • Inouts Thanasis Oikonomou net 39 net Verilog HDL Basics
Continuous Assignements a closer look • Syntax: assign #del <id> = <expr>; optional net type !! • Where to write them: – inside a module – outside procedures • Properties: – they all execute in parallel – are order independent – are continuously active Thanasis Oikonomou 40 Verilog HDL Basics
Structural Model (Gate Level) • Built-in gate primitives: and, nor, xor, xnor, buf, not, bufif 0, bufif 1, notif 0, notif 1 • Usage: nand (out, in 1, in 2); 2 -input NAND without delay and #2 (out, in 1, in 2, in 3); 3 -input AND with 2 t. u. delay not #1 N 1(out, in); NOT with 1 t. u. delay and instance name xor X 1(out, in 1, in 2); 2 -input XOR with instance name • Write them inside module, outside procedures Thanasis Oikonomou 41 Verilog HDL Basics
Example: Half Adder, 2 nd Implementation A module half_adder(S, C, A, B); output S, C; input A, B; S B C wire S, C, A, B; xor #2 (S, A, B); and #1 (C, A, B); Assuming: • XOR: 2 t. u. delay • AND: 1 t. u. delay Thanasis Oikonomou endmodule 42 Verilog HDL Basics
Behavioral Model - Procedures (i) • Procedures = sections of code that we know they execute sequentially • Procedural statements = statements inside a procedure (they execute sequentially) • e. g. another 2 -to-1 mux implem: Execution Flow Thanasis Oikonomou begin if (sel == 0) Y = B; else Y = A; end 43 Procedural assignments: Y must be reg !! Verilog HDL Basics
Behavioral Model - Procedures (ii) • Modules can contain any number of procedures • Procedures execute in parallel (in respect to each other) and. . • . . can be expressed in two types of blocks: – initial they execute only once – always they execute for ever (until simulation finishes) Thanasis Oikonomou 44 Verilog HDL Basics
“Initial” Blocks • Start execution at sim time zero and finish when their last statement executes module nothing; initial $display(“I’m first”); initial begin #50; $display(“Really? ”); end Will be displayed at sim time 0 Will be displayed at sim time 50 endmodule Thanasis Oikonomou 45 Verilog HDL Basics
“Always” Blocks • Start execution at sim time zero and continue until sim finishes Thanasis Oikonomou 46 Verilog HDL Basics
Events (i) • @ always @(signal 1 or signal 2 or. . ) begin. . end execution triggers every time any signal changes always @(posedge clk) begin. . end always @(negedge clk) begin. . end Thanasis Oikonomou 47 execution triggers every time clk changes from 0 to 1 execution triggers every time clk changes from 1 to 0 Verilog HDL Basics
Examples • 3 rd half adder implem module half_adder(S, C, A, B); output S, C; input A, B; reg S, C; wire A, B; • Behavioral edge-triggered DFF implem module dff(Q, D, Clk); output Q; input D, Clk; reg Q; wire D, Clk; always @(A or B) begin S = A ^ B; C = A && B; end always @(posedge Clk) Q = D; endmodule Thanasis Oikonomou 48 Verilog HDL Basics
Events (ii) • wait (expr) always begin wait (ctrl) #10 cnt = cnt + 1; #10 cnt 2 = cnt 2 + 2; execution loops every time ctrl = 1 (level sensitive timing control) end • e. g. Level triggered DFF ? Thanasis Oikonomou 49 Verilog HDL Basics
Example always @(res or posedge clk) begin if (res) begin Y = 0; W = 0; end else begin Y = a & b; W = ~c; end res a b Y c W clk Thanasis Oikonomou 50 Verilog HDL Basics
Timing (i) d initial begin #5 c = 1; #5 b = 0; #5 d = c; end c b 0 5 10 15 Time Each assignment is blocked by its previous one Thanasis Oikonomou 51 Verilog HDL Basics
Timing (ii) d initial begin fork #5 c = 1; #5 b = 0; #5 d = c; join end c b 0 5 10 15 Time Assignments are not blocked here Thanasis Oikonomou 52 Verilog HDL Basics
Procedural Statements: if E. g. 4 -to-1 mux: if (expr 1) true_stmt 1; else if (expr 2) true_stmt 2; . . else def_stmt; Thanasis Oikonomou 53 module mux 4_1(out, in, sel); output out; input [3: 0] in; input [1: 0] sel; reg out; wire [3: 0] in; wire [1: 0] sel; always @(in or sel) if (sel == 0) out = in[0]; else if (sel == 1) out = in[1]; else if (sel == 2) out = in[2]; else out = in[3]; endmodule Verilog HDL Basics
Procedural Statements: case E. g. 4 -to-1 mux: case (expr) item_1, . . , item_n: stmt 1; item_n+1, . . , item_m: stmt 2; . . default: def_stmt; endcase Thanasis Oikonomou 54 module mux 4_1(out, in, sel); output out; input [3: 0] in; input [1: 0] sel; reg out; wire [3: 0] in; wire [1: 0] sel; always @(in or sel) case (sel) 0: out = in[0]; 1: out = in[1]; 2: out = in[2]; 3: out = in[3]; endcase endmodule Verilog HDL Basics
Procedural Statements: for (init_assignment; cond; step_assignment) stmt; E. g. module count(Y, start); output [3: 0] Y; input start; reg [3: 0] Y; wire start; integer i; initial Y = 0; always @(posedge start) for (i = 0; i < 3; i = i + 1) #10 Y = Y + 1; endmodule Thanasis Oikonomou 55 Verilog HDL Basics
Procedural Statements: while E. g. module count(Y, start); output [3: 0] Y; input start; while (expr) stmt; reg [3: 0] Y; wire start; integer i; initial Y = 0; always @(posedge start) begin i = 0; while (i < 3) begin #10 Y = Y + 1; i = i + 1; end endmodule Thanasis Oikonomou 56 Verilog HDL Basics
Procedural Statements: repeat E. g. module count(Y, start); output [3: 0] Y; input start; repeat (times) stmt; reg [3: 0] Y; wire start; initial Can be either an integer or a variable Thanasis Oikonomou Y = 0; always @(posedge start) repeat (4) #10 Y = Y + 1; endmodule 57 Verilog HDL Basics
Procedural Statements: forever Typical example: clock generation in test modules module test; reg clk; forever stmt; Tclk = 20 time units initial begin clk = 0; forever #10 clk = ~clk; end Executes until sim finishes other_module 1 o 1(clk, . . ); other_module 2 o 2(. . , clk, . . ); endmodule Thanasis Oikonomou 58 Verilog HDL Basics
Mixed Model Code that contains various both structure and behavioral styles module simple(Y, c, clk, res); output Y; input c, clk, res; reg Y; wire c, clk, res; wire n; res c n Y not(n, c); // gate-level clk Thanasis Oikonomou always @(res or posedge clk) if (res) Y = 0; else Y = n; endmodule 59 Verilog HDL Basics
System Tasks Always written inside procedures • $display(“. . ”, arg 2, arg 3, . . ); much like printf(), displays formatted string in std output when encountered • $monitor(“. . ”, arg 2, arg 3, . . ); like $display(), but. . displays string each time any of arg 2, arg 3, . . Changes • $stop; suspends sim when encountered • $finish; finishes sim when encountered • $fopen(“filename”); returns file descriptor (integer); then, you can use $fdisplay(fd, “. . ”, arg 2, arg 3, . . ); or $fmonitor(fd, “. . ”, arg 2, arg 3, . . ); to write to file • $fclose(fd); closes file • $random(seed); returns random integer; give her an integer as a seed Thanasis Oikonomou 60 Verilog HDL Basics
$display & $monitor string format Thanasis Oikonomou 61 Verilog HDL Basics
Compiler Directives • `include “filename” inserts contents of file into current file; write it anywhere in code. . • `define <text 1> <text 2> text 1 substitutes text 2; – e. g. `define BUS reg [31: 0] in declaration part: `BUS data; • `timescale <time unit>/<precision> – e. g. `timescale 10 ns/1 ns later: #5 a = b; 50 ns Thanasis Oikonomou 62 Verilog HDL Basics
Parameters in[3: 0] p_in[3: 0] out[2: 0] wu clk A. Implelementation without parameters wd module dff 4 bit(Q, D, clk); output [3: 0] Q; input [3: 0] D; input clk; module dff 2 bit(Q, D, clk); output [1: 0] Q; input [1: 0] D; input clk; reg [3: 0] Q; wire [3: 0] D; wire clk; reg [1: 0] Q; wire [1: 0] D; wire clk; always @(posedge clk) Q = D; endmodule Thanasis Oikonomou 63 Verilog HDL Basics
Parameters (ii) module top(out, in, clk); output [1: 0] out; input [3: 0] in; input clk; A. Implelementation without parameters (cont. ) wire [1: 0] out; wire [3: 0] in; wire clk; wire [3: 0] p_in; wire wu, wd; // internal nets assign wu = p_in[3] & p_in[2]; assign wd = p_in[1] & p_in[0]; dff 4 bit inst. A(p_in, clk); dff 2 bit inst. B(out, {wu, wd}, clk); // notice the concatenation!! endmodule Thanasis Oikonomou 64 Verilog HDL Basics
Parameters (iii) module top(out, in, clk); output [1: 0] out; input [3: 0] in; input clk; B. Implelementation with parameters wire [1: 0] out; wire [3: 0] in; wire clk; module dff(Q, D, clk); parameter WIDTH = 4; output [WIDTH-1: 0] Q; input [WIDTH-1: 0] D; input clk; wire [3: 0] p_in; wire wu, wd; assign wu = p_in[3] & p_in[2]; assign wd = p_in[1] & p_in[0]; reg [WIDTH-1: 0] Q; wire [WIDTH-1: 0] D; wire clk; dff inst. A(p_in, clk); // WIDTH = 4, from declaration always @(posedge clk) Q = D; dff inst. B(out, {wu, wd}, clk); defparam inst. B. WIDTH = 2; // We changed WIDTH for inst. B only endmodule Thanasis Oikonomou endmodule 65 Verilog HDL Basics
Testing Your Modules module top_test; wire [1: 0] t_out; reg [3: 0] t_in; reg clk; // Top’s signals top inst(t_out, t_in, clk); // Top’s instance initial begin // Generate clock clk = 0; forever #10 clk = ~clk; end initial begin // Generate remaining inputs $monitor($time, " %b -> %b", t_in, t_out); #5 t_in = 4'b 0101; #20 t_in = 4'b 1110; #20 t_in[0] = 1; #300 $finish; endmodule Thanasis Oikonomou 66 Verilog HDL Basics
- Hardware description language
- The verilog® hardware description language
- Verilog hdl
- Verilog vs vhdl
- Verilog hdl
- Semicolon adder
- Verilog hdl
- Verilog hdl a guide to digital design and synthesis
- Advanced digital design with the verilog hdl
- Verilog hdl
- Lenguajes de descripción de hardware
- Vhsic hardware description language
- Devider
- Hardware description language
- Vhsic hardware description language
- List of hardware description languages
- Eefocus
- Fully developed use case description
- External components of a computer
- Verilog code
- Low hdl
- Hdl rtl
- Fungsi hdl
- Hdl-mhrcu.433
- Hdl knx database
- Language images
- Hdl formation
- Hdl buspro setup tool 2 download
- Hdl normal range
- Hdl vhdl
- Hdl designer tutorial
- Chilomicroni vldl ldl hdl
- Hdl is
- Hdl-mbus01ip.431
- Nand 2 tetris
- Pediatra ghisalberti dalmine
- Hdl ldl
- Hdl ldl
- Vhdl mux 2 to 1
- Ram16 hdl
- Hdl tomato soup
- Chisel hdl
- Hdl-mcip-rf02.10
- Colesterol hdl
- Hdl genesys
- Hp33120
- Hdl level
- Hemoconcentration
- A stepper motor hdl application must include
- Hardware programming language
- Object description language
- Data definition language
- Advantages of sql
- Is the standard page description language for web pages
- Sdl specification and description language
- Viterbi decoder verilog code
- Verilog-xl
- Incdir verilog
- Verilog
- Verilog for문
- Non synthesizable constructs in verilog
- Verilog
- Verilog ^ operator
- Verilog trireg
- Synopsys verilog simulator
- 16 bit divider verilog code
- Signed addition verilog