Sei sulla pagina 1di 34

Using Verilog HDL

Anamika Singh

History

of Verilog HDL Overview of Digital Design with Verilog HDL Hello World! Hierarchical Modeling Concepts

Beginning:

1983

Gateway Design Automation company Simulation environment

Comprising various levels of abstraction Switch (transistors), gate, register-transfer, and higher levels

Three

factors to success of Verilog

Programming Language Interface (PLI)


Extend and customize simulation environment Gateway Design Automation partnership with Motorola, National, and UTMC in 1987-89 Gateway Design Automation licensed Verilog to Synopsys Synopsys introduced synthesis from Verilog in 1987

Close attention to the needs of ASIC foundries

Verilog-based synthesis technology

VHDL

VHSIC (Very High Speed Integrated Circuit) Hardware Description Language Developed under contract from DARPA IEEE standard Public domain Other EDA vendors adapted VHDL Gateway put Verilog in public domain

Today

Market divided between Verilog & VHDL


VHDL mostly in Europe Verilog dominant in US More general language Not all constructs are synthesizable Not as general as VHDL Most constructs are synthesizable

VHDL

Verilog:

Overview of Digital Design Using Verilog

Evolution

of Computer-Aided Digital Design Emergence of HDLs Typical Design Flow Importance of HDLs Popularity of Verilog HDL Trends in HDLs

SSI:

Small scale integration


Medium scale integration Large scale integration

A few gates on a chip Hundreds of gates on a chip Thousands of gates on a chip CAD: Computer-Aided Design

MSI:

LSI:

CAD vs. CAE

Logic and circuit simulators Prototyping on bread board Layout by hand (on paper or a computer terminal)

VLSI:

Very Large Scale Integration

Hundred thousands of gates Not feasible anymore:

Bread boarding Manual layout design

Simulator programs Automatic place-and-route Bottom-Up design

Design small building blocks Combine them to develop bigger ones

More and more emphasis on logic simulation

The

need to a standardized language for hardware description


Verilog and VHDL

Simulators

emerged

Usage: functional verification Path to implementation: manual translation into gates

Logic

synthesis technology

Late 1980s Dramatic change in digital design

Design at Register-Transfer Level (RTL) using an HDL

1.
2. 3. 4.

5.
6. 7. 8. 9. 10. 11.

Design specification Behavioral description RTL description Functional verification and testing Logic synthesis Gate-level netlist Logical verification and testing Floor planning, automatic place & route Physical layout Layout verification Implementation

Most

design activity

In 1996:
Manually optimizing the RTL design CAD tools take care of generating lower-level details Reducing design time to months from years Still RTL is used in many cases But, synthesis from behavioral-level also possible Digital design now resembles high-level computer programming

Today

NOTE:

CAD tools help, but the designer still has the main role

GIGO (Garbage-In Garbage-Out) concept To obtain an optimized design, the designer needs to know about the synthesis technology Compare to software programming and compilation

Retargeting

to a new fabrication technology Functional verification earlier in the design cycle Textual concise representation of the design

Similar to computer programs Easier to understand

Verilog

HDL

General-purpose Easy to learn, easy to use Similar in syntax to C Allows different levels of abstraction and mixing them Supported by most popular logic synthesis tools Post-logic-synthesis simulation libraries by all fabrication vendors PLI to customize Verilog simulators to designers needs

Design

at behavioral level Formal verification techniques Very high speed and time critical circuits

e.g. microprocessors Mixed gate-level and RTL designs

Hardware-Software

Co-design

System-level languages: SystemC, SpecC,

Hello World!

Stimulus block

Generating inputs to CUD


8

Circuit Under Design (CUD)

Checking outputs of CUD

Test bench

Youll

see in the laboratory

Module

module not_gate(in, out); // module name+ports // comments: declaring port type input in; output out; // Defining circuit functionality assign out = ~in; endmodule

module useless;
initial $display(Hello World!); endmodule
Note

the message-display statement

Compare to printf() in C

Hierarchical Modeling Concepts

module <module_name>(<module_terminal_list>); ... <module internals> ... endmodule


Example: module T_ff(q, clock, reset); ... <functionality of T_flipflop> ... endmodule

Verilog supported levels of abstraction

Behavioral (algorithmic) level


Describe the algorithm used Very similar to C programming Describe how data flows between registers and is processed Interconnect logic gates

Dataflow level

Gate level

Switch level

Interconnect transistors (MOS transistors)

Register-Transfer Level (RTL)

Generally known as a combination of behavioral+dataflow that is synthesizable by EDA tools

module ripple_carry_counter(q, clk, reset); output [3:0] q; input clk, reset; //4 TFF TFF TFF TFF instances of the module TFF are created. tff0(q[0],clk, reset); tff1(q[1],q[0], reset); tff2(q[2],q[1], reset); tff3(q[3],q[2], reset);

endmodule

module TFF(q, clk, reset); output q; input clk, reset; wire d; DFF dff0(q, d, clk, reset); not n1(d, q); // not is a Verilog provided primitive. endmodule

// module DFF with asynchronous reset module DFF(q, d, clk, reset); output q; input d, clk, reset; reg q;
always @(posedge reset or negedge clk) if (reset) q = 1'b0; else q = d; endmodule

Illegal instantiation example:


Nested module definition not allowed Note the difference between module definition and module instantiation

// Define the top level module called ripple carry // counter. It is illegal to define the module T_FF inside // this module. module ripple_carry_counter(q, clk, reset); output [3:0] q; input clk, reset; module T_FF(q, clock, reset);// ILLEGAL MODULE NESTING : <module T_FF internals> : endmodule // END OF ILLEGAL MODULE NESTING endmodule

Design

block was shown before block

ripple_carry_counter, T_FF, and D_FF modules

Stimulus

module stimulus; reg clk; reg reset; wire[3:0] q; // instantiate the design block ripple_carry_counter r1(q, clk, reset); // Control the clk signal that drives the design block. initial clk = 1'b0; always #5 clk = ~clk; // Control the reset signal that drives the design block initial begin reset = 1'b1; #15 reset = 1'b0; #180 reset = 1'b1; #10 reset = 1'b0; #20 $stop; end initial // Monitor the outputs $monitor($time, " Output q = %d", endmodule

q);

Potrebbero piacerti anche