Chapter 6: Hierarchical Structural Modeling - Wiley

335 downloads 156 Views 258KB Size Report
Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~ 2010, John Wiley. 6-1. Chapter 6: Hierarchical Structural. Modeling. Department  ...
Chapter 6: Hierarchical Structural Modeling

Chapter 6: Hierarchical Structural Modeling Prof. Ming-Bo Lin

Department of Electronic Engineering National Taiwan University of Science and Technology

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-1

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ƒ ƒ ƒ ƒ ƒ

Module definitions Parameters Module instantiation Module parameter values Hierarchical path names

™ Generate statements ƒ Generate-loop statement ƒ Generate-conditional statement ƒ Generate-case statement Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-2

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ™ Generate statements

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-3

Chapter 6: Hierarchical Structural Modeling

Objectives After completing this chapter, you will be able to: ™ Describe the features of hierarchical structural modeling in Verilog HDL ™ Describe the features of Verilog modules ™ Describe how to define and override the parameters within a module ™ Describe the port connection rules ™ Describe how to write a parameterized module ™ Describe how to use generate block statements Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-4

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ƒ ƒ ƒ ƒ ƒ

Module definitions Parameters Module instantiation Module parameter values Hierarchical path names

™ Generate statements

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-5

Chapter 6: Hierarchical Structural Modeling

Module Definitions // port list style module module_name [#(parameter_declarations)][port_list]; parameter_declarations; // if no parameter ports are used port_declarations; other_declaration; statements; endmodule // port list declaration style module module_name [#(parameter_declarations)][port_declarations]; parameter_declarations; // if no parameter ports are used other_declarations; statements; endmodule Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-6

Chapter 6: Hierarchical Structural Modeling

Port Declarations ™ Three types ƒ input ƒ output ƒ inout

net variable

net

net

net

net variable

net

module adder(x, y, c_in, sum, c_out); input [3:0] x, y; input c_in; output reg [3:0] sum; output reg c_out; Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-7

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ƒ ƒ ƒ ƒ ƒ

Module definitions Parameters Module instantiation Module parameter values Hierarchical path names

™ Generate statements

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-8

Chapter 6: Hierarchical Structural Modeling

Types of Parameters ™ module parameters ƒ parameter ƒ localparam

™ specify parameters parameter SIZE = 7; parameter WIDTH_BUSA = 24, WIDTH_BUSB = 8; parameter signed [3:0] mux_selector = 4’b0;

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-9

Chapter 6: Hierarchical Structural Modeling

Constants Specified Options ™ `define compiler directive `define BUS_WIDTH 8 ™ Parameter parameter BUS_WIDTH = 8; ™ localparam localparam BUS_WIDTH = 8;

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-10

Chapter 6: Hierarchical Structural Modeling

Parameter Ports module module_name #(parameter SIZE = 7, parameter WIDTH_BUSA = 24, WIDTH_BUSB = 8, parameter signed [3:0] mux_selector = 4’b0 ) (port list or port list declarations) ... endmodule

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-11

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ƒ ƒ ƒ ƒ ƒ

Module definitions Parameters Module instantiation Module parameter values Hierarchical path names

™ Generate statements

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-12

Chapter 6: Hierarchical Structural Modeling

Module Instantiation ™ Syntax module_name [#(parameters)] instance_name [range]([ports]); module_name [#(parameters)] instance_name [{,instance_name}]([ports]);

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-13

Chapter 6: Hierarchical Structural Modeling

Port Connection Rules ™ Named association .port_id1(port_expr1),..., .port_idn(port_exprn)

™ Positional association port_expr1, ..., port_exprn

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-14

Chapter 6: Hierarchical Structural Modeling

Syllabus ™ Objectives ™ Module ƒ ƒ ƒ ƒ ƒ

Module definitions Parameters Module instantiation Module parameter values Hierarchical path names

™ Generate statements

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-15

Chapter 6: Hierarchical Structural Modeling

Parameterized Modules ™ An example module adder_nbit(x, y, c_in, sum, c_out); parameter N = 4; // set default value input [N-1:0] x, y; input c_in; output [N-1:0] sum; output c_out; assign {c_out, sum} = x + y + c_in; endmodule

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-16

Chapter 6: Hierarchical Structural Modeling

Module Parameters Values ™ Ways to change module parameters values ƒ defparam statement ƒ module instance parameter value assignment

Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley

6-17

Chapter 6: Hierarchical Structural Modeling

Overriding Parameters ™ Using the defparam statement

module counter_nbits (clock, clear, qout); parameter N = 4; // define counter size … always @(negedge clock or posedge clear) begin // qout