Verilog HDL 入门(1)

本人小白,用这篇博客记录学习内容。

1.模块定义一般格式

module 模块名([端口列表]);           //模块唯一标识符;端口列表指电路输入/输出信号名称列表,信号名由用户指定,各名称间用逗号隔开

端口信号声明说明;(input or output or inout)//端口信号的输入输出属性、信号数据类型、信号的位宽

参数声明; //说明参数的名称和初值,parameter 数据类型 参数名 = 初值

endmodule

model full_adder(A,B,CIN,S,COUT)
    input [3:0] A,B;
    input CIN;       //位宽不做说明默认是一位,数据类型不做说明,默认是wire型
    output reg[3:0] s;
    output COUT;

寄存器类型的变量只能在这两种语句中赋值,寄存器类型在赋值前保持原有值。initial与always语句都是从0时刻开始并行执行。

另外还有一种结构型描述方式,可以调用Verilog HDL中预定义的结构,也可调用已定义好的低层次模块对电路进行描述。

2.注释内容:与C形式类似

3.标识符(identifier):字母,下划线,数字,$的组合,第一个字符是字母与下划线,且区分大小写。类比C语言标识符记忆。

4.关键词:不可用做标识符,学习写程序时记忆。

5.间隔符:空格(\b)、tab(\t)、换行符(\n),换页符,字符串中的间隔符通常被省略。

6.数值:

   四种基本的值

  •  0:逻辑0或假状态
  •  1:逻辑1或真状态
  •  x:未知状态                 //可能是0或1中的任意值,不区分大小写
  •  z:高阻态                     //不区分大小写

    两种常量

    1)整数:声明关键词 Integer ,默认32位,可以是 B D O H 四种类型。

       书写形式

  • 简单十进制数      //直接用十进制数表示
  •   '<进制格式,b d o h><对应前边进制下的一串数字>  //缺省了位宽                                                                                                             
  • <size>'<进制格式><对应前边进制下的一串数字>       //位宽指定,位宽<实际宽度,高位被忽略;位宽>实际宽度,数值最高                                                                                         位为0或1,相应高位补0,最高位为 x或z,相应最高位补x,z。二进                                                                                         制的一个z表示一位处于x,八进制的一个x表示三位二进制处于x。
'h81FF //缺省宽的十六进制数
212    //简单十进制数 
'o724  //缺省宽的八进制数
4b1001 //4位二进制数
12'bx  //12位的未知整数 
16'hz  //16位的高阻态 
16'b0001_1010_1111_1000  //16位的二进制数
4ab    //非法字符,少'h
b001   //非法表示,需要有"'"
8'b_0001_1000  //非法表示,下划线的位置。

 2)实数:关键词real,默认的初始值为0,可用十进制和科学计数法表示。

举例如下:

2.9           //十进制计数 
5.6E-10       //科学计数法,e与E都可以
2.7E5         
3_2877.3385_4755 //数字中可以加入下划线,注意不能再最开始加,加入下划线对数值大小不影响。

  7.字符串

Verilog HDL 中的字符串不需要特殊位来终止。 字符串储存在寄存器中。                   

     特殊字符   

\n换行符     \t Tab键     \\ 符号“\”    \*符号“*”     \ddd3位八进制的ASCII码     \% 符号“%”

8.数据类型

1)线网(Net)

声明关键词: wire,默认为高阻态。

格式:wire[常数值表达式1,常数值表达式2]net1,net2,net3……;

举例如下:

wire net1; //定义了线网net1
wire net2=0 ;//定义了线网net2,将其值设定为0

 总线是线网的组合,总线的声明也用wire

wire[3:0]test2=3'b100;

2)寄存器类型

声明关键词reg,

表达格式:reg[常数值表达式1,常数值表达式2]reg1,reg2,reg3……;如果没有定义范围,则缺省值为一位寄存器。

reg[2:0]d2; //d2 为3位reg类型
reg d1;     //d1位reg类型

3)时间类型

关键词 time,属于未定义的64位的数据,用于储存仿真时的系统时间。

格式:time  time_id1,time_id2……[msb,lsb]  //最后的msb与lsb表示范围界限的常量表达式,未定义的标识符存储一个至少64位的时间值。

4)参数类型

关键词 parameter,定义仿真时在程序内部保持不变的常数

格式 parmeter parm1 =常数

5)存储器类型,多个位的寄存器组合而成的数据类型。

关键词 reg ,

格式:reg[msb,lsb]memory1[upper1,lower1],memory[upper2,lower2],……;//upper,lower为寄存器范围i。

reg[7:0]men[0:1023];//深度1k,宽度为8位的存储器

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值