Menu Close

Verilog 模块与端口

Verilog 模块与端口设计

模块(module)是verilog 语言中最基本的语法结构,在模块内不仅能够描述逻辑行为,也是verilog 行为结构描述的功能与外界其它电路的接口。 可以说在Verilog 可综合的开发中,其它结构或功能结构都是可选的,但module是唯一要求必须存在的。module 所描述的结构更像一个完整的数字电路,有名称,有输入、输出,也有逻辑行为。其结构框图如下图所示:

%title插图%num

 

  1. module的语法结构

module 的语法结构 由关键字module 后跟一个模块名用于识别该模块,如:module and_gate,其中 and_gate 就是该module的名字,用于识别该module。 第二部分用于端口描述, 我们知道在学习数字电路时,对于一个器件,总要分清楚哪个管脚是输入,哪个管脚是输出。如( input a, input b, output c ); 可以写在一行中,也可以分多行进行书写。如:

(

    input a,

    input b,

    output c   //最后一个端口,没有逗号分隔符“,”

);

格式为: ( … );

2.端口 : 定义输入(input)、输出(output)或双向(inout)

input 定义其后的标识符为输入,如 :input a,定义a为输入管脚。

output定义输出口, 如:output c 定义c 为输出管脚。

inout定义双向口,如果端口是双向口,则用 inout定义。inout定义的端口既可以做输入,也可以做输出。

每个完整定义之间用逗号“,” 隔开。最后一个定义,没有逗号“,” ,如output c 就没有逗号。

第三个部分是行为描述部分,用于描述该数字逻辑的行为:如assign c =a & b;表示 c与a,b之间的关系为与逻辑关系。表示将a&b运算后的逻辑值付给c 。

这里的 assign 是表示后面跟着赋值语句。

最后以endmodule关键字结束本module的定义。

module and_gate
( 
    input a,
    input b,
    output c
);


assign c = a & b;

endmodule

其等效的数字电路如下:

and

输入、输出端口可以采用向量的方式表示,例如:4输入端a0,a1,a2,a3,与4输入端b0,b1,b2,b3, 一一对应相与,其结果赋给对应的c0,c1,c2,3;

Verilog 的描述如下:

module and4
(
    input   a0,a1,a2,a3,
    input   b0,b1,b2,b3,
    output  c0,c1,c2,c3
);

assign  c0=a0 & b0;
assign  c1=a1 & b1;
assign  c2=a2 & b2;
assign  c3=a3 & b3;

endmodule


可以采用向量的方式改写成如下代码:

module and4
(
    input   [3:0] a,
    input   [3:0] b,
    output  [3:0] c
);

assign  c[0]=a[0] & b[0];
assign  c[1]=a[1] & b[1];
assign  c[2]=a[2] & b[2];
assign  c[3]=a[3] & b[3];

endmodule


在上面的程序中以向量的方式定义了4位输入a,在使用时可以整体向量一起使用,也可以按位使用。在索引位时一般用中括号[]内的数字表示索引号,如a[0]表示使用数组中的第0个变量,a[3]表示第三个变量;也可以引用一部分变量,如a[2:1],就是使用数组中的a[2],a[1];如果向量整体使用,则为a[3:0],也可以直接使用数向量名a;由于向量可以按位操作与使用,这比计算机软件编程中定义的数组灵活方便许多。

由于&操作符具有按位相与的功能,因此也可以用下面的代码实现。

module and4
(
    input   [3:0] a,
    input   [3:0] b,
    output  [3:0] c
);

assign  c = a & b;//按照位的顺序,逐位相与

endmodule

input, output定义的端口使用比较简单,在后续课程中,会继续深入介绍于FPGA,ASIC相关硬件方面的知识。如:电平等级,斜升率,上、下拉,以及DDR,LVDS 等接口方面的使用。
由于 inout定义的双向口,使用比较复杂,我们专门安排一节内容讨论。见 FPGA中双向端口的使用

可见:Verilog module给我们引入了另一种数字电路的设计方法。

 

 

 



					
Posted in FPGA, FPGA, Verilog, Verilog, 教材与教案, 文章
0 0 投票数
Article Rating
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论

相关链接