Title: Verilog-HDL
1Verilog-HDL
Reference Verilog HDL a guide to digital design
and synthesis, Palnitkar, Samir Some of slides in
this lecture are supported by Prof. An-Yeu Wu,
E.E., NTU.
2OUTLINE
- Introduction
- Basics of the Verilog Language
- Gate-level modeling
- Data-flow modeling
- Behavioral modeling
- Task and function
3Verilog HDL (continue)
- Invented by Philip Moorby in 1983/ 1984 at
Gateway Design Automation - Enables specification of a digital system at a
range of levels of abstraction switches, gates,
RTL, and higher - Initially developed in conjunction with the
Verilog simulator
4Verilog HDL
- Verilog- based synthesis tool introduced by
Synopsys in 1987 - Gateway Design Automation bought by Cadence in
1989 - Verilog placed in public domain to compete with
VHDL - Open Verilog International (OVI) IEEE 1364
-1995 and - revised version IEEE 1364 -2001
- revised version IEEE 1364 -2005
5(No Transcript)
6What is Verilog HDL ?
- Mixed level modeling
- Behavioral
- Algorithmic ( like high level language)
- Register transfer (Synthesizable)
- Structural
- Gate (AND, OR )
- Switch (PMOS, NOMS, JFET )
- Single language for design and simulation
- Built-in primitives and logic functions
- User-defined primitives
- Built-in data types
- High-level programming constructs
7Basic Conventions
- Verilog is case sensitive
- Keywords are in lowercase
- Extra white space is ignored
- But whitespace does separate tokens
- Comments
- One liners are //
- Multiple lines / /
- Comments may not be nested
8OUTLINE
- Introduction
- Basics of the Verilog Language
- Overview of Verilog Module
- Identifier Keywords
- Logic Values
- Data Types
- Numbers Negative Numbers
- Gate-level modeling
- Data-flow modeling
- Behavioral modeling
- Task and function
9Overview of Verilog Module
Test bench
10Basic unit --Module
- module module_name (port_name)
- port declaration
- data type declaration
- module functionality or structure
- Endmodule
11D-FlipFlop
- module D_FF(q,d,clk,reset)
- output q //port declaration
- input d,clk,reset // data type declaration
- reg q
- always _at_ (posedge reset or negedge clk)
- if (reset)
- q1'b0
- else
- qd
- endmodule
12Instance
- A module provides a template which you can create
actual objects. - When a module is invoked, Verilog creates a
unique object from the template - The process of creating a object from module
template is called instantiation - The object is called instance
13Instances
- module adder (in1,in2,cin,sum,cout)
- .......
- endmodule
Mapping port positions
module adder8(....) adder add1(a,b,1b0,s1,c1)
// assign by order add2(.in1(a2),.in2(b2),.cin
(c1),.sum(s2) ,.cout(c2)) // assign by name,
the order is changeable ..... endmodule
Mapping names
14T-FlipFlop
- module T_FF(q,clk,reset)
- output q
- input clk,reset
- wire d
- D_FF dff0(q,d,clk,reset) // create an instance
- not n1(d,q)
- endmodule
15Identifier Keywords
- Identifier
- User-provided names for Verilog objects in the
descriptions - Legal characters are a-z, A-Z, 0-9, _,
and - First character has to be a letter or an _
- Example Count, _R2D2, FIVE
- Keywords
- Predefined identifiers to define the language
constructs - All keywords are defined in lower case
- Cannot be used as identifiers
- Exampleinitial, assign, module, always.
16Hierarchical Modeling Concepts
17Hierarchical Modeling Concepts
- Module ripple_carry_counter(q,clk, reset)
- Output 30 q
- Input clk, reset
- T_FF tff0(q0, clk, reset)
- T_FF tff1(q1, q0, reset)
- T_FF tff0(q2, q1, reset)
- T_FF tff0(q3, q2, reset)
- endmpdule
18Hierarchical Modeling Concepts
- module T_FF(q, clk, reset)
- output q
- input clk, reset
- wire d
- D_FF dff0(q, d, clk, reset)
- not na(d, q)
- endmodule
19Hierarchical Modeling Concepts
- module D_FF(q, d, clk, reset)
- output q
- input d, clk, reset
- reg q
- always _at_(posedge reset or negedge clk)
- if (reset)
- q1b0
- else
- qd
- endmodule
204-bits Ripple Carry Counter
21Exercise
- module FullAdd4(a, b, carry_in, sum,
carry_out) - input 30 a, b
- input carry_in
- output 30 sum
- output carry_out
- wire 30 sum
- wire carry_out
- FullAdd fa0(a0, b0, carry_in, sum0,
carry_out1) - FullAdd fa1(a1, b1, carry_out1, sum1,
carry_out2) - FullAdd fa2(a2, b2, carry_out2, sum2,
carry_out3) - FullAdd fa3(a3, b3, carry_out3, sum3,
carry_out) - endmodule
22Exercise
- // FullAdd.V, ???
- module FullAdd(a, b, carryin, sum, carryout)
- input a, b, carryin
- output sum, carryout
- wire sum, carryout
- assign carryout, sum a b carryin
- endmodule
23Exercise
- Implement a 16 bits full adder by using 4 bits
full adders.