Verilog的基本语法

1.标识符

标识符:模块名、变量名、常量名

  • Verilog是大小写敏感的(a和A是不同的)
  • 标识符:任意一组字母、数字、$、_的组合
  • 标识符的第一个字母必须是字母或下划线
  • 书写标识符时应该简洁明了清晰,最好能够体现含义,如

        clk_50M:表示50兆赫兹时钟

  cpu_addr:表示CPU的地址线

2.变量

变量:使用前进行声明

  • 线网变量net
  • 寄存器变量register

3种数据类型:

reg型:寄存器数据类型。(在过程块中赋值使用)

        寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值,寄存器数据           类型的关键字是 reg,reg 类型数据的默认初始值为不定值x

  reg [7:0] data  //表示定义了一个8位的寄存器类型的数据data.

  reg  cnt_reg  //表示定义了一个一位的寄存器类型的数据cnt_reg

  reg [7:0]  data [255:0]  //定义了256个8位的寄存器data

  reg类型的数据只能在 always 语句和 initial 语句中被赋值。

wire型:线网型数据类型。(默认的数据类型)

         线网类型的变量不能储存值,它的值是由驱动它的元件所决定的。

        wire型只能在assign语句中被赋值。

tri型:线网型数据类型。

3.常量

Verilog中常量和变量采用四值逻辑

  • 逻辑0:表示低电平
  • 逻辑1:表示高电平
  • 逻辑X:表示当前值是不确定的,可能是0,1
  • 逻辑Z:表示未被驱动的高阻值,常见于信号(input, reg)没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时,其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1,下拉则为 0 。

常量的表示方式:

采用定长数表示:长度'+数值格式+数字

十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)

  • 二进制表示如下:4'b0101 表示4位二进制数字0101、8位:8'b1110_0001(下划线可放在数字的任意位置,增加可读性)
  • 十进制表示如下:4'd2 表示4位十进制数字2(二进制0010)、8位:8'd158
  • 十六进制表示如下:4'ha 表示4位十六进制数字a(二进制1010)
  • 负数表示

    通常在表示位宽的数字前面加一个减号来表示负数。例如:-6'd15 、-15

        -15 在 5 位二进制中的形式为 5'b10001, 在 6 位二进制中的形式为 6'b11_0001。

4.运算符

  1.  算术运算符:+ (加) 、 - (减) 、 * (乘) 、 / (除) 、 %(模)
  2. 关系运算符:>(大于) 、 <(小于) 、 =(等于)、 <=(小于等于 、 >=(大于等于)  、 !=(不等于)
  3. 逻辑运算符:!(非)、 &&(与) 、 ||(或)
  4. 条件运算符:a?b :c(判断)例如:assign iic_sda=en?( a? 1'bz:1'b0) :1'bz;//  z=a? b:c 先判断a是否为真,如果为真则z=b否则z=c.
  5. 位运算符: ~(按位取反) 、 &(按位与)、 |(按位或)、 ^(按位异或)  可以作为单目运算:b=&a表示a与自身的所有位按位与
  6. 移位运算符:<<(左移) 、  >>(右移)  
  7. 拼接运算符:

  {0010,1}:将0010和1拼接成00101,最后是一个5位数据

  {110,data[7:0]}:将110和data[7:0]拼接成一个新的数据,最终是一个11位数据

猜你喜欢

转载自blog.csdn.net/a45667/article/details/121663065