分享

Verilog语法介绍之模块

 xpxys99 2019-08-13

模块的定义以关键字module开始,模块名、端口列表、端口声明和可选的参数声明必须出现在其他部分的前面,endmodule语句必须为模块的最后一条语句。端口是模块与外部环境交互的通道,只有在模块有端口的情况下才需要有端口列表和端口声明。模块内部的5个组成部分是:变量声明、数据流语句、低层模块实例、行为语句块以及任务和函数。

端口是模块与外界环境交互的接口。对于外部环境来说,模块内部是不可见的,对模块的调用只能通过其端口进行。这种特点为设计者提供了很大的灵活性,只要接口保持不变,模块内部的修改并不会影响到外部环境。

在模块的定义中包括一个可选的端口列表。如果模块和外部环境没有交换任何信号,则可以没有端口列表。

端口列表中的所有端口必须在模块中进行声明,Verilog中的端口具有3种类型,即input、output与inout。在Verilog中,所有的端口隐含地声明为wire类型,因此如果希望端口具有wire数据类型,只要将其声明为3种类型之一即可。如果输出类型的端口需要保存数值,则必须将其显式地声明为reg数据类型。

不能将input和inout类型的端口声明为reg数据类型,这是因为reg类型的变量是用来保存数值的,而输入端口只反映与其相连的外部信号的变化,并不能保存这些信号的值。

注意,在Verilog中,也可以使用ANSI C风格进行端口声明。这种风格的优点是避免了端口名在端口列表和端口声明语句中的重复。如果声明中未指明端口的数据类型,则默认端口具有wire数据类型。

举例如下:

Verilog语法介绍之模块

端口连接规则:将一个端口看成由相互连接的两个部分组成,一部分位于模块内部,另一部分位于模块外部。当在一个模块中调用(实例引用)另一个模块时,端口之间的连接必须遵守一些规则。

输入端口:从模块内部来看,输入端口必须为线网数据类型;从模块外部来看,输入端口可以连接到线网或reg数据类型的变量。

输出端口:从模块内部来看,输出端口可以是线网或者reg数据类型;从模块外部来看,输出必须连接到线网类型的变量,而不能连接到reg类型的变量。

输入/输出端口(必须为wire):从模块内部来看,输入/输出端口必须为线网数据类型;从模块外部来看,输入/输出端口也必须连接到线网类型的变量。

位宽匹配:在对模块进行调用的时候,Verilog允许端口的内、外两个部分具有不同的位宽。一般情况下,Verilog仿真器会对此发出警告。

未连接端口:Verilog允许模块实例的端口保持未连接的状态。例如,如果模块的某些输出端口只用于调试,那么这些端口可以不与外部信号连接。

端口与外部信号的连接:在对模块进行调用的时候,可以使用两种方法将模块定义的端口与外部环境中的信号连接起来,即按顺序连接以及按名字连接。但两种方法不能混合在一起使用。

顺序端口连接:需要连接到模块实例的信号必须与模块声明时目标端口在端口列表中的位置保持一致。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多