Brief introduction to verilog l.jpg
Advertisement
This presentation is the property of its rightful owner.
1 / 21

Brief Introduction to Verilog PowerPoint PPT Presentation

Brief Introduction to Verilog Weiping Shi What is Verilog? It is a hardware description language Allows designers to quickly create and debug large scale designs Similar to C in syntax Verilog will be used to do design assignments in this course a sum b c_out_bar c_out

Related searches for Brief Introduction to Verilog

Download Presentation

Brief Introduction to Verilog

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Brief introduction to verilog l.jpg

Brief Introduction to Verilog

Weiping Shi


What is verilog l.jpg

What is Verilog?

  • It is a hardware description language

  • Allows designers to quickly create and debug large scale designs

  • Similar to C in syntax

  • Verilog will be used to do design assignments in this course


Sample half adder l.jpg

a

sum

b

c_out_bar

c_out

Sample Half Adder

module Add_half (sum, c_out, a, b);

inputa, b;

outputsum, c_out;

wire c_out_bar;

xor (sum, a, b);

nand (c_out_bar, a, b);

not (c_out, c_out_bar);

endmodule


Module hierarchy l.jpg

Module Hierarchy

  • Modules can be instantiated within other modules

  • Allows for simplicity and regularity in the design

  • Example: Use two half adders to create a full adder


Module hierarchy example l.jpg

Module Hierarchy Example

module Add_half ( sum, c_out, a, b );

inputa, b;

outputsum, c_out;

wire c_out_bar;

xor (sum, a, b);

nand (c_out_bar, a, b);

not (c_out, c_out_bar);

endmodule

Module Add_full ( sum, c_out, a, b, c_in );// parent module

input a, b, c_in;

output c_out, sum;

wire w1, w2, w3;

Add_half M1 ( w1, w2, a, b );

Add_half M2 ( sum, w3, w1, c_in );// child module

or ( c_out, w2, w3 );// primitive instantiation

endmodule


Alternative half adders l.jpg

Alternative Half Adders

module Add_half ( sum, c_out, a, b );

inputa, b;

outputsum, c_out;

assign { c_out, sum } = a + b; // Continuous assignment

endmodule

module Add_half (sum, c_out, a, b );

inputa, b;

outputsum, c_out;

regsum, c_out;

always @ ( a or b)

begin

sum = a ^ b;

c_out = a & b;

end

endmodule


Structural v s behavioral l.jpg

Structural v.s. Behavioral

  • Verilog can be structural or behavioral

  • Structural definition specifies the gates and their connections explicitly

  • Behavioral definition specifies the functionality of a design

    • Does not contain any structural information such as transistors or gates

    • Logic synthesis software implements the structural


Behavioral example 2 bit comparator l.jpg

Behavioral Example2 Bit Comparator

module comparator (a_greater, b_greater, equal, a, b);

inputa, b;

outputa_greater, b_greater, equal;

rega_greater, b_greater, equal;

always @(a or b)// either a or b changes

begin

if (a > b)

begin

a_greater = 1;

b_greater = 0;

equal = 0;

end

if (a<b)

begin

a_greater = 0;

b_greater = 1;

equal = 0;

end

if (a==b)

begin

a_greater = 0;

b_greater = 0;

equal = 1;

end

end

endmodule


Alternate comparator l.jpg

Alternate comparator

module comparator (a_greater, b_greater, equal, a, b);

inputa, b;

outputa_greater, b_greater, equal;

assign a_greater = (a > b) ? 1 : 0;

assign b_greater = (a < b) ? 1 : 0;

assign equal = (a==b) ? 1 : 0;

endmodule

Uses a conditional continuous assignment to set the outputs.


Clarification l.jpg

Clarification

  • Registers are used when an output is updated on an event. The value must be held until a new event updates that value.

  • Assign statements are used when the output is continuously being assigned.


Using verilog on sun l.jpg

Using Verilog on Sun

  • Create your Verilog module in a text file entitled:

    % vi filename.v

  • Compile the file using the command

    % verilog filename.v


Testbench l.jpg

Testbench

  • Manipulate the module inputs to observe the circuit reaction

  • Uses module hierarchy

  • Introduces the concept of delay


Sample testbench for a half adder l.jpg

Sample Testbench for a Half Adder

module tbench;

rega,b;// regs connect to module inputs

wiresum,cout;// wires connect to module outputs

half_adder M1(cout,sum,a,b);// instantiate the half adder

initial

begin

a = 0, b = 0;//time 0

#5a = 1, b = 0;//time 5

#3a = 1, b = 1;//time 8

#4a = 0, b = 1;//time 12

#52a = 0, b = 0;//time 64

#70$finish;//stops the simulation

end

initial

begin

$monitor($time,”a = %b, b=%b cout=%b sum=%b”,a,b,cout,sum);//displays the variable values at each

//unit of time that an event occurs

end

endmodule


Testbench results l.jpg

Testbench Results

Compiling source file "ha.v"

Compiling source file "tbench.v"

Highest level modules:

tbench

0a = 0, b=0 cout=0 sum=0

5a = 1, b=0 cout=0 sum=1

8a = 1, b=1 cout=1 sum=0

12a = 0, b=1 cout=0 sum=1

64a = 0, b=0 cout=0 sum=0

"tbench.v": $finish at simulation time 134


Arrays l.jpg

Arrays

  • Arrays can be expressed in Verilog

  • Can be used for inputs, outputs, wires, regs,…

  • Ex: 4 bit input

    input[3:0]A;


Array example l.jpg

Array Example

module xor_demo(xor_group,xor_bit,A,B);

input[3:0]A, B;

output[3:0] xor_group,xor_bit;

assign xor_group = A ^ B;

assign xor_bit[0] = A[0] ^ B[0];

assign xor_bit[1] = A[1] ^ B[1];

assign xor_bit[2] = A[2] ^ B[2];

assign xor_bit[3] = A[3] ^ B[3];

endmodule


Array test bench l.jpg

Array Test bench

module tbench;

reg [3:0] A, B;

wire [3:0] xor_group,xor_bit;

xor_demo M1(xor_group,xor_bit,A,B);

initial begin

A = 0; B = 0;

#5 A = 4'b0001; B = 4'b1100;

#10 A = 4'd5; B = 4'd10;

#5 A = 4'hF; B=4'hE;

end

initial begin

#40 $finish;

end

initial begin

$monitor($time,"A=%b B=%b group=%b bit=%b",A,B,xor_group,xor_bit);

end

endmodule


Xor array results l.jpg

Xor Array Results

Compiling source file "xor.v"

Compiling source file "xtbench.v"

Highest level modules:

tbench

0A=0000 B=0000 group=0000 bit=0000

5A=0001 B=1100 group=1101 bit=1101

15A=0101 B=1010 group=1111 bit=1111

20A=1111 B=1110 group=0001 bit=0001

L18 "xtbench.v": $finish at simulation time 40


Parameters l.jpg

Parameters

  • Parameters can be used to name integers

  • Parameter declaration is done when you define the port list

  • Ex:parameter true = 1’b1;

    parameter false = 1’b0;

    parameter stop = 5’h1F;


Fsm example car l.jpg

a = 1, b = 0

a: accelerator

b: brake

low

stopped

b = 1

b = 1

b = 1

a = 1, b = 0

b = 1

medium

high

a = 1, b = 0

a = 1, b = 0

FSM Example: Car

accelerator

brake

speed

clock


Behavioral description l.jpg

Behavioral Description

module car(speed, a, b, clock);

inputa, b, clock;

output[1:0] speed;

reg[1:0] speed;

parameterstopped = 2’b00;

parameterfast = 2’b11;

always @(posedge clock or b)

begin

if (b == 1 && speed != stopped)

speed = speed – 1;

else if (b == 0 && a == 1 && speed != fast)

speed = speed + 1;

end

endmodule


  • Login