chapter 6: hierarchical structural modeling - wiley

37
Chapter 6: Hierarchical Structural Modeling Digital System Designs and Practices Using Verilog HDL and FPGAs @ 2008~2010, John Wiley 6-1 Chapter 6: Hierarchical Structural Modeling Department of Electronic Engineering National Taiwan University of Science and Technology Prof. Ming-Bo Lin

Upload: others

Post on 10-Feb-2022

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Chapter 6: Hierarchical Structural Modeling

Department of Electronic Engineering

National Taiwan University of Science and Technology

Prof. Ming-Bo Lin

Page 2: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statementsGenerate-loop statementGenerate-conditional statementGenerate-case statement

Page 3: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModuleGenerate statements

Page 4: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Objectives

After completing this chapter, you will be able to:Describe the features of hierarchical structural modeling in Verilog HDLDescribe the features of Verilog modulesDescribe how to define and override the parameters within a moduleDescribe the port connection rulesDescribe how to write a parameterized moduleDescribe how to use generate block statements

Page 5: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statements

Page 6: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Module Definitions

// port list stylemodule module_name [#(parameter_declarations)][port_list];parameter_declarations; // if no parameter ports are usedport_declarations;other_declaration;statements;endmodule

// port list declaration stylemodule module_name [#(parameter_declarations)][port_declarations];parameter_declarations; // if no parameter ports are usedother_declarations;statements;endmodule

Page 7: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Port Declarations

Three types inputoutputinout net

netnet

variablenet

net

netvariable

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;

Page 8: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statements

Page 9: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Types of Parameters

module parameters parameterlocalparam

specify parameters

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

Page 10: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Constants Specified Options

`define compiler directive`define BUS_WIDTH 8Parameterparameter BUS_WIDTH = 8;localparamlocalparam BUS_WIDTH = 8;

Page 11: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

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

Page 12: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statements

Page 13: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Module Instantiation

Syntaxmodule_name [#(parameters)]

instance_name [range]([ports]);module_name [#(parameters)]

instance_name [{,instance_name}]([ports]);

Page 14: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Port Connection Rules

Named association.port_id1(port_expr1),..., .port_idn(port_exprn)

Positional associationport_expr1, ..., port_exprn

Page 15: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statements

Page 16: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Parameterized Modules

An example

module adder_nbit(x, y, c_in, sum, c_out);parameter N = 4; // set default valueinput [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

Page 17: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Module Parameters Values

Ways to change module parameters valuesdefparam statementmodule instance parameter value assignment

Page 18: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Overriding Parameters

Using the defparamstatement

// define top level module…output [3:0] qout4b;output [7:0] qout8b;// instantiate two counter modulesdefparam cnt_4b.N = 4, cnt_8b.N = 8; counter_nbits cnt_4b (clock, clear, qout4b);counter_nbits cnt_8b (clock, clear, qout8b);

module counter_nbits (clock, clear, qout);parameter N = 4; // define counter size…always @(negedge clock or posedge clear)begin // qout <= (qout + 1) % 2^n

if (clear) qout <= {N{1'b0}};else qout <= (qout + 1) ;

End

Page 19: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

// define top level module…output [3:0] qout4b;output [7:0] qout8b;// instantiate two counter modulescounter_nbits #(4) cnt_4b (clock, clear, qout4b);counter_nbits #(8) cnt_8b (clock, clear, qout8b);

Overriding Parameters

Using module instanceparameter value assignment---one parameter

module counter_nbits (clock, clear, qout);parameter N = 4; // define counter size…always @(negedge clock or posedge clear)begin // qout <= (qout + 1) % 2^n;

if (clear) qout <= {N{1'b0}};else qout <= (qout + 1) ;

end

Page 20: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Overriding Parameters

Using module instance parameter value assignment--- two parameters

xy

z

f

a

b

// define top level modulemodule ……hazard_static #(4, 8) example (x, y, z, f);

module hazard_static (x, y, z, f);parameter delay1 = 2, delay2 = 5;…

and #delay2 a1 (b, x, y);not #delay1 n1 (a, x); and #delay2 a2 (c, a, z); or #delay2 o2 (f, b, c);

endmodule

hazard_static #(.delay2(4), .delay1(6))example (x, y, z, f);

• parameter value assignment by name ---minimize the chance of error!

Page 21: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModule

Module definitionsParametersModule instantiationModule parameter valuesHierarchical path names

Generate statements

Page 22: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Hierarchical Path Names

An identifier can be defined withinModulesTasksFunctionsNamed blocks (See Section 7.1.3)

Hierarchical path names

4bit_adder // top level --- 4bit_adder4bit_adder.fa_1 // fa_1 within 4bit_adder4bit_adder.fa_1.ha_1 // ha_1 within fa_14bit_adder.fa_1.ha_1.xor1 // xor1 within ha_14bit_adder.fa_1.ha_1.xor1.S // net s within xor1

Page 23: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModuleGenerate statements

Generate-loop statementsGenerate-conditional statementsGenerate-case statements

Page 24: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

generate Block Structures

The keywords used generate and endgenerate

// convert Gray code into binary codeparameter SIZE = 8; input [SIZE-1:0] gray;output [SIZE-1:0] bin;genvar i; generate for (i = 0; i < SIZE; i = i + 1) begin: bit

assign bin[i] = ^gray[SIZE-1:i];end endgenerate

Page 25: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

The generate Loop Construct

// convert Gray code into binary codeparameter SIZE = 8; input [SIZE-1:0] gray;output [SIZE-1:0] bin;reg [SIZE-1:0] bin;

genvar i; generate for (i = 0; i < SIZE; i = i + 1) begin:bit

always @(*) bin[i] = ^gray[SIZE - 1: i];

end endgenerate

Page 26: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModuleGenerate statements

Generate-loop statementsGenerate-conditional statementsGenerate-case statements

Page 27: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

An n-bit Adder

// define a full adder at dataflow level.module full_adder(x, y, c_in, sum, c_out); // I/O port declarationsinput x, y, c_in;output sum, c_out; // Specify the function of a full adder.

assign {c_out, sum} = x + y + c_in;endmodule

Page 28: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

An n-bit Adder

module adder_nbit(x, y, c_in, sum, c_out); …genvar i;wire [N-2:0] c; // internal carries declared as nets.generate for (i = 0; i < N; i = i + 1) begin: adder

if (i == 0) // specify LSBfull_adder fa (x[i], y[i], c_in, sum[i], c[i]);

else if (i == N-1) // specify MSBfull_adder fa (x[i], y[i], c[i-1], sum[i], c_out);

else // specify other bitsfull_adder fa (x[i], y[i], c[i-1], sum[i], c[i]);

end endgenerate

Page 29: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

An n-bit Adder

module adder_nbit(x, y, c_in, sum, c_out); …genvar i;wire [N-2:0] c; // internal carries declared as nets.generate for (i = 0; i < N; i = i + 1) begin: adder

if (i == 0) // specify LSBassign {c[i], sum[i]} = x[i] + y[i] + c_in;

else if (i == N-1) // specify MSBassign {c_out, sum[i]} = x[i] + y[i] + c[i-1];

else // specify other bitsassign {c[i], sum[i]} = x[i] + y[i] + c[i-1];

end endgenerate

Page 30: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

An n-bit Adder

module adder_nbit(x, y, c_in, sum, c_out); …genvar i;reg [N-2:0] c; // internal carries declared as nets.generate for (i = 0; i < N; i = i + 1) begin: adder

if (i == 0) // specify LSBalways @(*) {c[i], sum[i]} = x[i] + y[i] + c_in;

else if (i == N-1) // specify MSBalways @(*) {c_out, sum[i]} = x[i] + y[i] + c[i-1];

else // specify other bitsalways @(*) {c[i], sum[i]} = x[i] + y[i] + c[i-1];

end endgenerate

Page 31: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

A Two’s Complement Adder

module twos_adder_nbit(x, y, mode, sum, c_out); …genvar i;wire [N-2:0] c; // internal carries declared as nets.wire [N-1:0] t; // true/ones complement outputsgenerate for (i = 0; i < N; i = i + 1) begin: // ones_complement_generator

xor xor_ones_complement (t[i], y[i], mode);end endgenerate

Page 32: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

A Two’s Complement Adder

generate for (i = 0; i < N; i = i + 1) begin: adderif (i == 0) // specify LSB

full_adder fa (x[i], t[i], mode, sum[i], c[i]);else if (i == N-1) // specify MSB

full_adder fa (x[i], t[i], c[i-1], sum[i], c_out);else // specify other bits

full_adder fa (x[i], t[i], c[i-1], sum[i], c[i]);end endgenerate

Page 33: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

A Two’s Complement Adder

The RTL schematic from Synplify Pro.

Page 34: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

A Two’s Complement Adder

After dissolving the second and the third bits

Page 35: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

Syllabus

ObjectivesModuleGenerate statements

Generate-loop statementsGenerate-conditional statementsGenerate-case statements

Page 36: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

The generate Case Construct

generate for (i = 0; i < N; i = i + 1) begin: addercase (i)

0: assign {c[i], sum[i]} = x[i] + y[i] + c_in;N-1: assign {c_out, sum[i]} = x[i] + y[i] + c[i-1];

default: assign {c[i], sum[i]} = x[i] + y[i] + c[i-1];endcase

end endgenerate

Page 37: Chapter 6: Hierarchical Structural Modeling - Wiley

Chapter 6: Hierarchical Structural Modeling

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

A UDP Example

// an example of sequential UDP instantiationsparameter N = 4;input clk, clear;output [N-1:0] qout;….genvar i;generate for (i = 0; i < N; i = i + 1) begin: ripple_counter

if (i == 0) // specify LSBT_FF tff (qout[i], clk, clear);

else // specify the rest bitsT_FF tff (qout[i], qout[i-1], clear);

end endgenerate