verilog语法知识

  • 标识符
    标识符由字母、数字、下划线或美刀符号组成,且第一个字符只能是字符和下划线,标识符区分大小写。
    例子: mux和Mux是不一样

  • 关键字
    123个关键字,always、begin、assign、module、endmodule、and 、nan等。

  • 注释
    单行注释://
    多行注释:/* */

  • 常量之整数

-格式: +/-[位宽] '[进制] [数字序列]

-位宽:缺省的话代表32位,如32‘h5d和’h5d表示的常数是一样的,都代表32位的16进制数5D。
位宽数比实际的位数长,最左侧补零,但是如果最左侧一位为x(z)的话,则相应的用x(x)补位,如8‘bz110表示的是zzzz_z110
-进制:h(H)代表16进制,d(D)代表10进制,o(O)代表8进制,b(B)代表2进制
-数字序列:中间不能加空格,但是可以加”_“,下划线的作用为增加可读性,没有其他意义。另外,数字序列中”?"和”Z“表示的意义一致,都是高阻态的意思。

  • 常量之实数
    实数可以用十进制表示法和科学计数法表述
    例子:2.3
    2.1E-2, 41_11.2e2

  • 常量之字符串
    字符串是双引号内的字符序列,字符串不能分为多行写,每个字母都是8位的ASCII码值
    例子:”This is an example"
    字符串还包括转义字符,用“\”表示,如\n表示换行,\表示反斜杠,"表示双引号等
    字符串还包括格式符,用”%“表示,如%h代表16进制,%d代表10进制,%o代表8进制,%b代表2进制,%s代表字符串等。

  • 常量之参数常量
    -用关键字parameter定义一个参数常量
    例子:parameter a=1,b=2;

  • 变量之net连线型:
    连线型变量表示电路中的物理连接,不能储存值,受到驱动源控制,没有驱动源时,默认为高阻态。
    Verilog共有11种net型变量,定义和功能描述包括:
    wire和tri:连线类型
    wor和trior:线或特性的连线型
    wand和triand:线与特性的连线型
    trireg:电荷保持性质的连线型
    tri1和tri0:上拉电阻和下拉电阻
    supply1和suppy0:电源线逻辑1和电源线逻辑0

  • 变量值reg寄存器型
    寄存器型变量表示电路中具有状态保持作用的电路元件,如触发器和锁存器等
    reg型变量若未初始化,其值为未知状态x.
    Verilog有4种寄存器型的变量,其定义和功能描述包括:
    reg:常用的寄存器型变量
    integer:带符号32位整数型变量
    real:带符号64位整数型变量
    time:带符号64位时间变量
    连线型变量需要持续的驱动,否则为高阻态,在always和initial语句块种,每一个被
    须是reg型,而不能是net型。

  • 变量之memory型变量
    memory变量是通过扩展reg型数据的地址范围而生成的,需要定义存储器的容量和字长,容量为存储器存储单元的数量,字长为存储单元的数据宽度
    格式:reg[n-1:0] 存储器名 [m-1:0]
    n表示字长,m表示容量
    例子:reg [7:0] mem1[255:0] //定义了容量为256,字长为8的存储器mem1。
    mem1[5]=8’b1001_0000; //对mem1[5]进行赋值。

  • 运算符之算术运算符
    +、-、*、/、%:分别是加法、减法、乘法、除法和取余运算,是双目运算符

  • 运算符之逻辑运算符
    &&、||、!:分别是逻辑与运算、逻辑或运算和逻辑非运算,&&和||是双目运算符,而!是单目运算符
    注意:操作数不是一位时,看作一个整体,即操作数全为0,才看作逻辑0,否则看作逻辑1
    例子:1000看作逻辑1、0000看作逻辑0;
    逻辑运算符的操作结果为1位

  • 运算符之位运算
    ~、&、|、^、按位同或:分别是按位取反运算符、按位取与运算符、按位取或运算符、按位异或 、按位同或运算符,除了按位取反运算符是单目运算符,其余都是双目运算符。
    注意:操作数的位宽决定了输出结果的位宽
    例子:m=4’b1001;
    n=4’b1010;
    则~m=0110;
    m&n=1000;
    m|n=1011;
    m^n=0011;
    n~^n=1100;

  • 运算符之关系运算符
    ->、>=、<、<=:分别是大于、大于等于、小于、小于等于运算符,是双目运算符、操作结果是1位。
    注意:当操作数的某位是x时,结果则为x
    例子:m=4’b1001;
    n=4’b10x0;
    则m>=n的结果为x

  • 运算符之等式运算符
    、!=、=、!:分别是等于、不等于、全等和不全等,是双目运算符,操作结果是1位。
    注意:当操作数中某位是x或z时,运算符的输出结果也是x不定态,而对于=运算符,两个操作数完全一致,及x或z的位也相同,输出结果才为1,否则为0.
    例子:m=4’b1001;
    n=4’b10x1;
    则m
    n的结果为x;
    m===n的结果为0;

  • 运算符之缩位运算符
    &、-&、|、~|、^、同或(同或的符号打不出来):分别是与、与非、或、或非、异或和同或运算符,是单目运算符,操作结果是1位。
    注意:缩位运算符从左边对操作数的所有位进行递推运算。
    例子: m=4’b1111;
    n=4’b100x;
    z=4’b0000;
    则&m的结果为1,所有位都为1结果才为1,否则为0;
    &n的结果为0;
    |z的结果为0,所有位都为0结果才为0,否则为1;
    |n的结果为1.
    ^n的结果为x.

  • 运算符之移位运算符
    ->>、<<:分别是右移和左移,是单目运算符

  • 运算符之条件运算符
    ?:可以说是唯一的三目运算符
    例子:y=m>n? a:b;

  • 运算符之位拼接运算符
    {}:将两个或两个以上的信号的某些位拼接起来
    例子:
    c={m[3:0],n[2:0],z[2]};
    d={3{a,b}} //嵌套重复使用,等同于d={a,b,a,b,a,b}

你可能感兴趣的:(学习)