0% found this document useful (0 votes)
109 views52 pages

Chapter #6 - Intro To HDL

Intro to verilog

Uploaded by

inabalqis
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
109 views52 pages

Chapter #6 - Intro To HDL

Intro to verilog

Uploaded by

inabalqis
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 52

KDU University College Confidential & Proprietary | Copyright 2013

Outline
Verilog Expressions
Primitives Gates

KDU University College Confidential & Proprietary | Copyright 2013


Continuous Assignments

2
What is Verilog?
Verilog is a HDL (Hardware Description Language) use to design a digital
system.
VHDL is another hardware description language used.

KDU University College Confidential & Proprietary | Copyright 2013


Virtually every chip (FPGA, ASIC, etc.) is designed in part using one of these
two languages.
Verilog was introduced in 1985 by Gateway Design System Corporation.

3
What is Verilog?
IEEE 1364-2001 is the latest Verilog HDL standard.
Verilog is case sensitive (Keywords are in lowercase).

KDU University College Confidential & Proprietary | Copyright 2013


The Verilog is both a behavioral and a structure language.

4
Differences between Verilog and VHDL
Verilog is similar to C- language.
VHDL is similar to ADA (a structured, statically typed, imperative, wide-
spectrum, and object-oriented high-level computer programming language,

KDU University College Confidential & Proprietary | Copyright 2013


extended from Pascal )
Many feel that Verilog is easier to learn and use than VHDL.

5
Verilog-logic Values
0 zero, logic low, false, ground

1 one, logic high, power

KDU University College Confidential & Proprietary | Copyright 2013


X unknown, dont care

Z high impedance, unconnected, tri-state

6
Types Verilog Coding
Behavioral
Procedural code, similar to C programming
Little structural detail (except module interconnect)

KDU University College Confidential & Proprietary | Copyright 2013


Dataflow
Specifies transfer of data between registers
Some structural information is available (RTL)
Sometimes similar to behavior
Structural (gate, switch)
Interconnection of simple components
Purely structural

7
Verilog Keywords
Note : All keywords are defined in lower case
Examples :
module, endmodule

KDU University College Confidential & Proprietary | Copyright 2013


input, output, inout
reg, integer, real, time
not, and, nand, or, nor, xor
parameter
begin, end
fork, join
specify, endspecify
8
Starting Verilog
To start a verilog coding:

module fundamental building block for Verilog designs

KDU University College Confidential & Proprietary | Copyright 2013


Used to construct design hierarchy
Cannot be nested

endmodule ends a module, not a statement


No semicolon ;

9
Module Declaration
Module Declaration:

module <module_name> (module_port,module_port,);

KDU University College Confidential & Proprietary | Copyright 2013


[content]

endmodule

test
in1 out1
out2 module test(out1, .., inN);
in2
.. // declarations
f
endmodule
inN outM

10
Exercise #1
Consider a full adder block below:
A B

KDU University College Confidential & Proprietary | Copyright 2013


Full Adder
Circuit Cin

CO S
module full_adder(A,B,Cin,Co,S);
[content]
endmodule
11
Input Declaration
Two types of representation:
A B

Scalar
Full Adder
input list of input identifiers;

KDU University College Confidential & Proprietary | Copyright 2013


Circuit Cin

Example: input A,B,Cin;


CO S
EN
S2
S1
S0
D7
Vector D6 8-to-1
Y
input[MSB:LSB] list of input identifiers; D5
D4
MUX

Example: input[7:0]D,[3:0]S,EN; D3
D2
D1
D0
12
Exercise #2
Include the inputs for the full adder:
A B

Full Adder

KDU University College Confidential & Proprietary | Copyright 2013


Circuit Cin

CO S

module full_adder(A,B,Cin,Co,S);
input A,B,Cin;

[content] Do not forget the


semicolon!
endmodule
13
Output Declaration
Two types of representation: A B
Scalar Example: output S,Co;
Full Adder

KDU University College Confidential & Proprietary | Copyright 2013


Circuit Cin

CO S

Vector Example: output[7:0]REG_IN;

14
Exercise #3
Now, include the output declaration for the full adder:
A B

KDU University College Confidential & Proprietary | Copyright 2013


Full Adder
Circuit Cin

CO S

module full_adder(A,B,Cin,Co,S);
input A,B,Cin;
output Co,S;
Do not forget the
[content] semicolon!
endmodule
15
Elements in Verilog
Nets
Nets are physical connections between devices
Many types of nets, but all we care about is wire.

KDU University College Confidential & Proprietary | Copyright 2013


Declaring a net
wire [range]<net_name>;

Example

wire [2:1]w;
or
wire w1,w2;
16
Elements in Verilog
Registers
Implicit storage-holds its value until a new value available.
Usually registers are also the circuits output.
Register type is denoted by reg.

KDU University College Confidential & Proprietary | Copyright 2013


Declaring a register
reg [range]<reg_name>;
sel[1:0]
Example:
input [3:0]a,b,c,d; a[3:0]
output [3:0]y; b[3:0]
y[3:0]
c[3:0]
reg [3:0]y; d[3:0]
17
Comment Lines in Verilog
There are two kinds of comments:
Single line
Multiple line.

KDU University College Confidential & Proprietary | Copyright 2013


A single line:
// This is a single line

Multiple line:
/* This is a multiple line
Nest multi-line
*/
18
Numbers Declaration in Verilog
Numbers (all number systems) can be declared by using the following
command:
<size><radix><value>

KDU University College Confidential & Proprietary | Copyright 2013


No of bits Binary b or B Consecutive chars
Octal o or O 0-f, x, z
Decimal d or D
Example: Hexadecimal h or H
8hax = 1010xxxx
4b0110 = 0110

19
Verilog Primitives
Basic logic gates only:
and
or

KDU University College Confidential & Proprietary | Copyright 2013


not
buf
xor
nand
nor
xnor
bufif1, bufif0
notif1, notif0

20
Primitive Gates
Let say we have an AND gate:

g1

KDU University College Confidential & Proprietary | Copyright 2013


module and_gate(A,B,x);
input A,B;
output x; (outputs, inputs)

and g1(x,A,B);
endmodule
21
Continuous Assignments
We still defining AND gate but with equation type of approach:

g1

KDU University College Confidential & Proprietary | Copyright 2013


module and_gate(A,B,x);
input A,B;
Logical AND in
output x;
Verilog
assign x = A & B;
endmodule
22
Continuous Assignments for all Gates
module gates(a, b, y1, y2, y3, y4, y5, y6, y7);
input a, b;
output y1, y2, y3, y4, y5, y6, y7;

KDU University College Confidential & Proprietary | Copyright 2013


/* Seven different logic gates programmed together in one single file*/

assign y1= ~a; // NOT gate


assign y2= a & b; // AND gate
assign y3= a | b; // OR gate
assign y4= ~(a & b); // NAND gate
assign y5= ~(a | b); // NOR gate
assign y6= a ^ b; // XOR gate
assign y7= ~(a ^ b); // XNOR gate

endmodule

23
Verilog Operators

24

KDU University College Confidential & Proprietary | Copyright 2013


Verilog Operators

25

KDU University College Confidential & Proprietary | Copyright 2013


Bitwise Operations
Given: c = ~a;

a = 4b1010;
b = 4b1100;

KDU University College Confidential & Proprietary | Copyright 2013


c = a & b;

26
Given:

b = 2b11;
a = 4b1010;
Bitwise Operations

c = a ^ b;

27

KDU University College Confidential & Proprietary | Copyright 2013


Exercise #4
Lets consider a half adder circuit:

A
S

KDU University College Confidential & Proprietary | Copyright 2013


B

Co

Write a Verilog code for the circuit in primitives gate as well as in continuous
assignment.

28
Exercise #4: Primitives Gate

module half_adder(A,B,S,Co);
A

KDU University College Confidential & Proprietary | Copyright 2013


S input A,B;
B
output S,Co;

Co
xor g1(S,A,B);
and g2(Co,A,B);

endmodule

29
Exercise #4: Continuous Assignment

module half_adder(A,B,S,Co);

KDU University College Confidential & Proprietary | Copyright 2013


A
B S input A,B;
output S,Co;

Co
assign S = A ^ B;
assign Co = A & B;

endmodule

30
Exercise #5
Lets consider the following circuit:

KDU University College Confidential & Proprietary | Copyright 2013


Write a Verilog code for the circuit in primitives gate as well as in continuous
assignment.

31
Exercise #5: Primitives Gate

KDU University College Confidential & Proprietary | Copyright 2013


module circuit1(A,B,C,x,y);
input A,B,C;
output x,y;
wire e;

and g1(e,A,B);
not g2(y,C);
or g3(x,e,y);

endmodule
32
Exercise #5: Continuous Assignment

KDU University College Confidential & Proprietary | Copyright 2013


module circuit1(A,B,C,x,y);
input A,B,C;
output x,y;
wire e;

assign x = (A&B)|(~C);
assign y = ~C;

endmodule
33
Exercise #6
Lets consider the full adder circuit below, which is made from 2 half adders.

KDU University College Confidential & Proprietary | Copyright 2013


Write a Verilog code for the circuit in primitives gate as well as in continuous assignment.

34
g2
g1

w2
Exercise #6: Primitives Gate

w1

g4
g3
w3
g5

35

KDU University College Confidential & Proprietary | Copyright 2013


Exercise #6: Primitives Gate

w1
module full-adder(A,B,Cin,Cout,Sum);
g1
g5 input A,B,Cin;
output Cout, Sum;

KDU University College Confidential & Proprietary | Copyright 2013


g2 w3
g3
w2
wire w1,w2,w3;
g4

and g1(w1,A,B);
xor g2(w2,A,B);
and g3(w3,Cin,w2);
xor g4(Sum,w2,Cin);
or g5(Cout,w1,w3);

endmodule

36
Exercise #6: Primitives Gate
But it is also made out of 2 half adder (we already have half-adder module
previously).

KDU University College Confidential & Proprietary | Copyright 2013


w1

w3

HA1 w2

HA2

37
Exercise #6: Primitives Gate

module full-
w1 adder(A,B,Cin,Cout,Sum);

KDU University College Confidential & Proprietary | Copyright 2013


input A,B,Cin;
w3 output Cout, Sum;
HA1 w2 wire w1,w2,w3;

HA2 half_adder HA1(w2,w1,A,B);


half_adder HA2(Sum,w3,w2,Cin);
A S or or1(Cout,w1,w3);
B
Co endmodule

38
Exercise #6: Continuous Assignment

module full-adder(A,B,Cin,Cout,Sum);
g1
w1
g5
input A,B,Cin;

KDU University College Confidential & Proprietary | Copyright 2013


output Cout, Sum;
g2 w3
g3 wire w1,w2,w3;
w2
g4
assign Sum = A ^ B ^ Cin;
assign Cout = (A & B)|(Cin &(A^B))

endmodule

39
Exercise #7
Now, lets try a little bit complicated circuit. 4-bit adders.

A3 B3 A2 B2 A1 B1 A0 B0

KDU University College Confidential & Proprietary | Copyright 2013


C2 C1 C0
Cin
Cout

S3 S2 S1 S0

40
Exercise #7: Solution (i)
module add4 (S,Cout,A,B,Cin);
input [3:0]A, B; A3 B3 A2 B2 A1 B1 A0 B0
input Cin ;
output [3:0] S : C2 C1 C0 Cin
output Cout ;

KDU University College Confidential & Proprietary | Copyright 2013


wire C0,C1,C2; Cout

full-adder FA0 (C0, S[0], A[0], B[0], Cin) ; S3 S2 S1 S0

full-adder FA1 (C1, S[1], A[1], B[1], C0) ;


full-adder FA2 (C2, S[2], A[2], B[2], C1) ;
full-adder FA3 (Cout, S[3], A[3], B[3], C2) ;

endmodule

41
Exercise #7: Solution (ii)
module add4 (S,Cout,A,B,Cin);
input [3:0]A,B; A3 B3 A2 B2 A1 B1 A0 B0
input Cin;
output [3:0]S; C2 C1 C0 Cin
output Cout;

KDU University College Confidential & Proprietary | Copyright 2013


Cout

assign {Cout,S} = A + B + Cin;


S3 S2 S1 S0

endmodule

42
Exercise #8
Simulate the add4 module according to the sequence of binary values
shown in the table below, and then stop simulation.

KDU University College Confidential & Proprietary | Copyright 2013


time A[3:0] B[3:0] Cin
0 ns 1000 0111 1
10 ns 1111 0000 1
20 ns 1010 0101 0
30 ns 0011 0100 0
40 ns Stop simulation

43
Exercise #8: solution
timescale 1ns/1ns
A = 4b1010;
module test_add4; B = 4b0101;
reg [3:0]A,B; Cin = 1b0;
reg Cin; #10;

KDU University College Confidential & Proprietary | Copyright 2013


wire [3:0]S; A = 4b0011;
wire Cout; B = 4b0100;
Cin = 1b0;
initial begin #10;
A = 4b1000; $stop;
B = 4b0111; end
Cin = 1b1;
#10; add4 mut (.A(A), .B(B), .Cin(Cin), .S(S),
A = 4b1111; .Cout(Cout));
B = 4b0000;
Cin = 1b1; endmodule
#10;

44
if-else Statement
Format
if (conditional_expression) statement;
else statement;

KDU University College Confidential & Proprietary | Copyright 2013


Behavior
If the conditional_expression is true, then the first statement is executed;
Or else the second statement is executed.

Used inside an always block, the statements are procedural.

45
Exercise #9: 2-to-1 Mux
The same 2-to-1 multiplexer:
s f
0 w0
w1

KDU University College Confidential & Proprietary | Copyright 2013


1
module mux2to1 (w0, w1, s, f);
input w0, w1, s;
output f;
Include all input signals
always @(w0 or w1 or s)
if (s == 0)
f = w0;
else
f = w1;

endmodule

46
Exercise #10: 4-to-1 Mux
module mux4to1 (w0, w1, w2, w3, S, f);
input w0, w1, w2, w3; s1 s0 f
input [1:0]S;
output f; 0 0 w0

KDU University College Confidential & Proprietary | Copyright 2013


0 1 w1
always @(w0 or w1 or w2 or w3 or S) 1 0 w2
1 1 w3
if (S == 2'b00)
f = w0;
else if (S == 2'b01)
f = w1;
else if (S == 2'b10)
f = w2;
else if (S == 2'b11)
f = w3;

endmodule
47
Case Statement
Format
case(expression)
1) Many possible alternatives
alternative1: statement;

KDU University College Confidential & Proprietary | Copyright 2013


2) Expression and each alternative are compared
alternative2: statement;
bit by bit.

3) If there is a match, the statement is executed
alternativen: statement;
[default: statement;]
4) If the alternatives do not cover all possibilities,
default should be included. Otherwise, a
endcase
sequential circuit will be generated.

48
Exercise #11: 4-to-1 Mux
module mux4to1 (W, S, f);
input [0:3] W; s1 s0 f
input [1:0] S;
output f; 0 0 w0

KDU University College Confidential & Proprietary | Copyright 2013


0 1 w1
reg f; w2
1 0
1 1 w3
always @(W or S)
case (S)
0: f = W[0];
1: f = W[1];
2: f = W[2];
3: f = W[3];
endcase

endmodule

49
Exercise #12: 2-to-4 Decoder
module dec2to4 (W, Y, En);
input [1:0]W;
input En; En w1 w0 y0 y1 y2 y3
output [0:3]Y;
1 0 0 1 0 0 0

KDU University College Confidential & Proprietary | Copyright 2013


reg [0:3]Y;
1 0 1 0 1 0 0
1 1 0 0 0 1 0
always @(W or En)
1 1 1 0 0 0 1
case ({En, W})
0 x x 0 0 0 0
3'b100: Y = 4'b1000;
3'b101: Y = 4'b0100;
3'b110: Y = 4'b0010;
3'b111: Y = 4'b0001;
default: Y = 4'b0000; Default for En=0
endcase

endmodule
50
Exercise #13: 2-to-4 Decoder
module dec2to4 (W, Y, En);
input [1:0] W;
input En;
output [0:3] Y; En w1 w0 y0 y1 y2 y3
reg [0:3] Y;
1 0 0 1 0 0 0

KDU University College Confidential & Proprietary | Copyright 2013


always @(W or En) 1 0 1 0 1 0 0
begin 1 1 0 0 0 1 0
if (En == 0) 1 1 1 0 0 0 1
Y = 4'b0000; 0 x x 0 0 0 0
else
case (W)
0: Y = 4'b1000;
1: Y = 4'b0100;
2: Y = 4'b0010;
3: Y = 4'b0001;
endcase
end

endmodule 51
Exercise #14: 7-Segment Decoder
module seg7 (bcd, leds);
input [3:0] bcd;
output [1:7] leds;
reg [1:7] leds;

KDU University College Confidential & Proprietary | Copyright 2013


always @(bcd)
case (bcd) //abcdefg
0: leds = 7'b1111110;
1: leds = 7'b0110000;
2: leds = 7'b1101101;
3: leds = 7'b1111001;
4: leds = 7'b0110011;
5: leds = 7'b1011011;
6: leds = 7'b1011111;
7: leds = 7'b1110000;
8: leds = 7'b1111111; X dont-care
9: leds = 7'b1111011;
default: leds = 7'bx;
endcase
endmodule

52

You might also like