Verilog HDL  的信号类型有很多种,主要包括两种数据类型:线网类型 (net type)  和寄存器类型  
 
 ( reg type )。在进行工程设计的过程中也只会使用到这两个类型的信号。 
 
 
4.1 信号位宽
         定义信号类型的同时,必须定义好信号的位宽。默认信号的位宽是 1  位,当信号的位宽为  1  时可不表述,如定义位宽为 1  的  wire  型信号  a  可直接用“ wire a; ”来表示。但信号的位宽大于  1  位时就一定要表示出来,如用“wire [7:0] ”来表示该  wire  型信号的位宽为  8  位。  
          信号的位宽取决于要该信号要表示的最大值。该信号能表示的无符号数最大值是:2  n  -1 ,其中  n表示该信号的位宽。例如,信号 a  的最大值为  1000 ,那么信号  a  的位宽必须大于或等于  10  位。  
          下面分享一个位宽计算技巧:打开电脑的“计算器”后选用程序员模式,在在 10  进制下  
  输入信号值,如  1000 ,随后可以查看信号位宽。 
   4.2 线网类型 wire
         线网类型用于对结构化器件之间的物理连线的建模,如器件的管脚,芯片内部器件如与门的输出等。由于线网类型代表的是物理连接线,因此其不存储逻辑值,必须由器件驱动。通常用 assign  进行赋值,如 assign A = B ^ C 。 
  
  
  4.3  寄存器类型  reg  
          reg 是最常用的寄存器类型,寄存器类型通常用于对存储单元的描述,如  D  型触发器、 ROM  
  等。寄存器类型信号的特点是在某种触发机制下分配了一个值,在下一触发机制到来之前保留原值。  
          但必须注意的是:reg  类型的变量不一定是存储单元,如在  always  语句中进行描述的必须是用  reg类型的变量。  
  reg  类型定义语法如下: 
  reg [msb: lsb] reg1, reg2, . . . reg N; 
  
  
 4.4 wire 和 reg 的区别
 reg  型信号并不一定生成寄存器。针对什么时候使用  wire  类型,什么时候用  reg  类型这一  
  问题,本书总结出一套解决方法:在本模块中使用  always  设计的信号都定义为  reg  型,其他信  
  号都定义为  wire  型。 
  
  上述代码中, cnt1  是用  always  设计的,所以定义为  reg  型。 add_cnt1  和  end_cnt  不是由  alwa  
  ys  产生的,所以定义为  wire  型。 
  
  上述代码中,信号  x  是用  always  设计的,所以要定义为  reg  型。注意:实际的电路中信号  x  不  
  是寄存器类型,但仍然定义为  reg  型。 
   
  以上是例化的代码,其中  df  是例化模块的输出。由于  df  不是由  always  产生的,而是例化产生  
  的,因此要定义成  wire  型。