Verilog 模块和端口

一、模块

    
    模块定义以关键字module开始,模块名、端口列表、端口声明和可选的参数声明必须出现在其他部分的前面,endmodule语句必须为模块的最后一条语句。模块内部的5个组成部分是: 变量声明、数据流语句、低层模块实例、行为语句块以及任何和函数。在模块的组成部分中,只有module、模块名、endmodule必须出现,其他部分都是可选的,用户可以根据设计的需要随意选用。
    

二、端口

    1.端口列表

            如果模块和外部环境没有交换任何信号,则可以没有端口列表。
            
           模块Top是一个顶层模块,作为仿真中的顶层模块,调用设计模块,无需和周围环境交换信息,因此没有端口列表。
           而被调用的fulladd4模块,则由a, b, c_in端口读入数据,将结果从sum和c_cout端口送出。

    2.端口声明

          在verilog中端口具有以下三种类型:
         
          在verilog中,所有的端口隐含地声明wire类型;如果输出类型的端口需要保存数值,则必须将其显式地声明为reg数据类型。
          不能将input和inout类型的端口声明为reg数据类型,因为reg类型的变量是用于保存数值的,而输入端口只反映与其相连的外部信号的变化。
          在verilog中,有两种端口声明风格:
         

    3.端口连接规则

           
         

         位宽匹配

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

    4.端口与外部信号的连接

          在对模块调用的时候,也已使用两种方法将模块定义的端口与外部环境连接起来。

          顺序端口连接

          按照顺序进行端口连接:
              

          命名端口连接

            fulladd4 fa_byname(.c_out(C_OUT), .sum(SUM), .b(B), .c_in(C_IN), .a(A));

猜你喜欢

转载自blog.csdn.net/kebu12345678/article/details/80585209