新浪博客

常用verilog语法之 --- 模块的结构

2008-06-24 10:46阅读:
模块的结构
verilog的基本设计单元是“模块”(block)。包括(接口描述、逻辑功能描述)
例子:
module block(a, b, c, d);
input a, b;
output c, d;

assign c = a | b;
assign d = a & b;
endmodule
由例子可以看出,verilog结构位于在moduleendmodule声明语句之间,每个verilog程序包括4个主要部分:端口定义、I/O说明、内部信号声明和
功能定义。
1、 模块的端口定义
模块端口声明了模块的输入输出。格式:
module 模块名(1,口2,口3,口4…..);
模块的端口表示模块的输入还是输出名。
引用模块时其端口可以用两种方法连接:
(1) 在引用时,严格按照定义的端口顺序连接,不用标明原模块定义时规定的端口
(2) 在引用时用”.”符号,标明原模块是定义时规定的端口名。
2、 模块内容
模块的内容包括I/O说明、内部信号声明和功能定义。
(1) I/O说明的格式
输入口:input [信号位宽-1 : 0] 端口名1
输出口:output [信号位宽-1 : 0] 端口名1
输入输出口:inout [信号位宽-1 : 0] 断口名1
(2) 内部信号说明
在模块内用到的与端口有关的wirereg类型变量的声明。
Reg [width-1 : 0] R变量1R变量2…
Wire [width-1 : 0]W变量1W变量2…
(3) 功能定义
模块中最重要的部分时逻辑功能定义。由3种方法可以在模块中产生逻辑。
1) assign声明语句
assign a = b&c;
2) 用实例元件
and #2 u1(q, a, b);
3) always
always @(posedge clk or posedge clr)
begin
if(clr) q <= 0;
else if(en) q <= d;
end
采用assign是描述组合逻辑最常用的方法之一。而always既可用来描述组合逻辑电路也可以用来描述时序逻辑。
(4) 要点
1) verilog模块中所有过程块(initial, always)、连续赋值语句、实例引用都是并行的;
2) 他们表示的是一种通过变量名互相连接的关系
3) 在同一模块中这三者出现的先后顺序没有关系。
只有联系赋值的语句assign和实例引用语句可以独立与过程块而存在于模块功能定义部分。

我的更多文章

下载客户端阅读体验更佳

APP专享