HDL模块指南
发布时间:2008/5/28 0:00:00 访问次数:767
模块是verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。
一个模块的基本语法如下:
module module_name (port_list);
declarations:
reg, wire, parameter,
input, output, inout,
function, task, . . .
statements:
initial statement
always statement
module instantiation
gate instantiation
udp instantiation
continuous assignment
endmodule
说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。
以下为建模一个半加器电路的模块的简单实例。
module halfadder (a, b, sum, carry);
input a, b;
output sum, carry;
assign #2 sum = a ^ b;
assign #5 carry = a & b;
endmodule
模块的名字是halfadder。 模块有4个端口: 两个输入端口a和b,两个输出端口sum和carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。
模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量a和b上的事件。
在模块中,可用下述方式描述一个设计:
1) 数据流方式;
2) 行为方式;
3) 结构方式;
4) 上述描述方式的混合。
下面几节通过实例讲述这些设计描述方式。不过有必要首先对verilog hdl的时延作简要介绍。
一个模块的基本语法如下:
module module_name (port_list);
declarations:
reg, wire, parameter,
input, output, inout,
function, task, . . .
statements:
initial statement
always statement
module instantiation
gate instantiation
udp instantiation
continuous assignment
endmodule
说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。
以下为建模一个半加器电路的模块的简单实例。
module halfadder (a, b, sum, carry);
input a, b;
output sum, carry;
assign #2 sum = a ^ b;
assign #5 carry = a & b;
endmodule
模块的名字是halfadder。 模块有4个端口: 两个输入端口a和b,两个输出端口sum和carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。
模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量a和b上的事件。
在模块中,可用下述方式描述一个设计:
1) 数据流方式;
2) 行为方式;
3) 结构方式;
4) 上述描述方式的混合。
下面几节通过实例讲述这些设计描述方式。不过有必要首先对verilog hdl的时延作简要介绍。
模块是verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中使用。
一个模块的基本语法如下:
module module_name (port_list);
declarations:
reg, wire, parameter,
input, output, inout,
function, task, . . .
statements:
initial statement
always statement
module instantiation
gate instantiation
udp instantiation
continuous assignment
endmodule
说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。
以下为建模一个半加器电路的模块的简单实例。
module halfadder (a, b, sum, carry);
input a, b;
output sum, carry;
assign #2 sum = a ^ b;
assign #5 carry = a & b;
endmodule
模块的名字是halfadder。 模块有4个端口: 两个输入端口a和b,两个输出端口sum和carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。
模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量a和b上的事件。
在模块中,可用下述方式描述一个设计:
1) 数据流方式;
2) 行为方式;
3) 结构方式;
4) 上述描述方式的混合。
下面几节通过实例讲述这些设计描述方式。不过有必要首先对verilog hdl的时延作简要介绍。
一个模块的基本语法如下:
module module_name (port_list);
declarations:
reg, wire, parameter,
input, output, inout,
function, task, . . .
statements:
initial statement
always statement
module instantiation
gate instantiation
udp instantiation
continuous assignment
endmodule
说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。本书中的所有实例都遵守这一规范。
以下为建模一个半加器电路的模块的简单实例。
module halfadder (a, b, sum, carry);
input a, b;
output sum, carry;
assign #2 sum = a ^ b;
assign #5 carry = a & b;
endmodule
模块的名字是halfadder。 模块有4个端口: 两个输入端口a和b,两个输出端口sum和carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都是线网数据类型。
模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量a和b上的事件。
在模块中,可用下述方式描述一个设计:
1) 数据流方式;
2) 行为方式;
3) 结构方式;
4) 上述描述方式的混合。
下面几节通过实例讲述这些设计描述方式。不过有必要首先对verilog hdl的时延作简要介绍。
上一篇:Verilog HDL简介
上一篇:Verilog HDL的时延