加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2008-06-24 10:46:03)
标签:

i/o

端口

always

变量

位宽

it

分类: FPGA/CPLD

模块的结构

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和实例引用语句可以独立与过程块而存在于模块功能定义部分。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有