Verilog数字系统设计第(三)章总结


3.1 模块的结构

Verilog 的基本设计单元是“模块”( block)。一个模块是由两部分组成的:一部分描述接口另一部分描述逻辑功能,即定义输入是如何影响输出的。
Verilog 模块结构位于在 module和 endmodule声明语句之间。每个Verilog程序包括4个主要部分:端口定义、I/O说明、内部信号声明、功能定义

3.1.1 模块的端口定义

模块的端口声明了模块的输入输出口。其格式如下:

module模块名(1,2,3,4,...)

在引用模块时其端口有两种方式连接:
一种是位置关联

模块名(连接端口1信号名,连接端口⒉信号名,连接端口3信号名,……) ;

一种是名称关联

模块名(.端口1(连接信号1),端口2(连接信号2),……) ;

3.1.2 模块内容

模块的内容包括I/O说明、内部信号声明、功能定义。

  1. I/O说明的格式
输入口:
input[信号位宽-1:0]端口名1;
input[信号位宽-1:0]端口名2;
...
input[信号位宽-1:0]端口名i;//(共有i个输人口)

输出口:
output[信号位宽-1:0]端口名1;
output[信号位宽-1:0]端口名2;
...
output[信号位宽-1:0]端口名j;//(共有j个输出口)

输人/输出口:
inout[信号位宽-1:0]端口名1;
inout[信号位-1:0]端口名2;
...
inout[信号位宽-1:0]端口名k;//(共有k个双向总线端口)
  1. 内部信号声明
    wire和 reg类型变量的声明:
reg  [width-1 : 0]R变量1,R变量2……;
wire [width-1 : 0]W变量l,W变量2……;
  1. 功能定义
    模块中最重要的部分是逻辑功能定义部分,有以下3种方法可在模块中产生逻辑。
    (1)assign声明语句
    如:
assign a=b &c;//两输入与门

(2)实例元件
如:

and #2 ul( q,a,b );//两输入与门

(3))always块
如:

always @ (posedge clk or posedge clr) ;
begin
    if(clr)q<=0;
    else if(en)q<= d;
end

采用assign语句是描述组合逻辑最常用的方法之一,而 always块既可用于描述组合逻辑,也可描述时序逻辑。

always语句的执行顺序:

  • “always”模块内,逻辑是按照指定的顺序执行的。“always”块中的语句称为“顺序语句”,因为它们是顺序执行的。所以, “ always”块也称为“过程块”。
  • 两个或更多的“always”模块都是同时执行的,而模块内部的语句是顺序执行的。

与C语言的不同:

  • 在Verilog模块中所有过程块(如:initial 块,always块),连续赋值语句,实例引用都是并行的
  • 它们表示的是一种通过变量名互相连接的关系。
  • 在同一模块中,assign语句、实例元件、always块语句这三者出现的先后顺序没有关系。
  • 只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于模块的功能定义部分

3.2 数据类型及其常量和变量


文章作者: DPH
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 DPH !
  目录