数字IC-1.5 Verilog HDL 语言基础语法

感谢野火官方论坛支持!!!!本节是选自其开源手册。 野火产品icon-default.png?t=M276https://doc.embedfire.com/products/link/zh/latest/index.html

所有的 Verilog 代码都以 module(模块)的方式存在,一个简单的逻辑可以由一个 module 组成,复杂的逻辑可以包含多个 modules,每个 module 有独立的功能,并可通过输 入、输出端口被其它 module 调用(实例化)。通过 module 的方式可以将一些比较独立、 可以复用的功能进行模块化,代码阅读起来也比较直观。

一、标识符

        标识符用于定义常数、变量、信号、端口、子模块或参数名称。Verilog 语言是区分大小写的,也就是说同一个名称,用大写和用小写就代表了两个不同的符号,这一点与 VHDL 不同,因此书写的时候要格外注意。 在 Verilog 语言中,所有的关键字(又叫保留字)都为小写。完整的 Verilog 关键字在 编辑器会以高亮的形式突出出来。Verilog 的内部信号名(又称标识符)使用大写和小写都 可以。标识符可以是字母、数字、$(美元符号)和下划线的任意组合,只要第一个字符是字母或者下划线即可

二、罗辑值

        在二进制计数中,单比特逻辑值只有“0”和“1”两种状态,而在 Verilog 语言中,为了对电路进行精确的建模,又增加了两种逻辑状态,即“X”和“Z”。 当“X”用作信号状态时表示未知,当用作条件判断时(在 casex 或 casez)表示不关 心;“Z”表示高阻状态,也就是没有任何驱动,通常用来对三态总线进行建模。在综合工具中,或者说在实际实现的电路中,并没有什么 X 值,只存在 0、1 和 Z 三种状态。 在实际电路中还可能出现亚稳态,它既不是 0,也不是 1,而是一种不稳定的状态。 Verilog 语言中的所有数据都是由以上描述的 4 种基本逻辑值“0”、“1”、“X”和 “Z”构成的,同时,“X”和“Z”是不区分大小写的,例如 0z1x 和 0Z1X 表示同一个数据

三、 常量

        1. 常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型 (1) 整数型; (2) 实数型; (3) 字符串型。

        2. 用户可以使用简单的十进制表示一个整数型常量,例如:

                (1) 直接写 16 表示位宽为 32bit 的十进制数 16;

                (2) -15 表示十进制的-15,用二进制补码表示至少需要 5bit,即 1_0001,最高一位为符 号位;如果用 6bit 表示,则为 11_0001,同样最高一位为符号位。

        3. 整数型常量也可以采用基数表示法表示,这种写法清晰明了,所以更推荐这种表示方 法,例如:

                (1) 8’hab 表示 8bit 的十六进制数,换算成二进制是 1010_1011;

                (2) 8’d171 表示 8bit 的十进制数,换算成二进制是 1010_1011;

                (3) 8’o253 表示 8bit 的八进制数,换算成二进制是 1010_1011;

                (4) 8’b1010_1011 表示 8bit 的二进制数,二进制就是 1010_1011。 虽然上面的表示方式不同,但都表示的是相同的值,数值经过运算后的结果也都相 同。

        4. 基数表示法的基本格式:

                (1) [换算为二进制后位宽的总长度]  [’ ]  [数值进制符号]  [与数值进制符号对应的数值] ,其中 [位宽的总长度] 可有可无,[数值进制符号]中如果是 [h]则表示十六进制,如果是[o]则表示八进制,如果是[b]则表示二进制,如果[d]则表示十进制。当[换算为 二进制后位宽的总长度]比[与数值进制符号对应的数值]的实际位数多,则自动在 [与数值进制符号对应的数值]的左边补足 0,如果位数少,则自动截断[与数值进 制符号对应的数值]左边超出的位数。

                (2) 如果将数字写成“’haa”,那么这个十六进制数的[换算为二进制后位宽的总长度]就取决于[与数值进制符号对应的数值]的长度。

                (3) 基数表示法中如果遇到 x,则在十六进制数中表示 4 个 x,在八进制中表示 3 个 x。

                (4) 另外,数字中的下划线没有任何意义,但是可以很好的增强可读性,推荐每 4 个 bit 后加一个下划线,例如:4’b11011011 和 4’b1101_1011 表示的是一样的 值,但是后面的看上去更容易识别。

        5. Verilog 语言中的实数型变量可以采用十进制,也可以采用科学计数法,例如:13_2.18e2 表示 13218

        6.字符串是指双引号中的字符序列,是 8 位 ASCII 码值的序列,例如: “Hello World”,该字符串包含 11 个 ASCII 符号(两个单词共 10 个符号,单词之间 的空格位一个符号,共 11 个 ASCII 符号),一个 ASCII 符号需要 1 个 byte 存储,所以共 需要 11 个 byte 存储。

四、变量

        Verilog 语言中主要的两种变量类型

        1. 线网型:表示电路间的物理连接;

        2. 寄存器型:Verilog 中一个抽象的数据存储单元。

        线网型和寄存器类型具体又包含很多种变量,线网型变量最常用的变量就是 wire,而 寄存器型最常用的变量是 reg。wire 可以看成直接的连接,在可综合的逻辑中会被映射成一 根真实的物理连线;而 reg 具有对某一个时间点状态进行保持的功能,如果在可综合的时 序逻辑中表达,会被映射成一个真实的的物理寄存器,而在 Verilog 仿真器中,寄存器类型 的变量通常要占据一个仿真内存空间。

        因此在设计逻辑的时候要明确定义每个信号是 wire 还是 reg 属性。凡是在 always 或 initial 语句中被赋值的变量(赋值号左边的变量),不论表达的是组合逻辑还是时序逻辑, 都一定是 reg 型变量;凡是在 assign 语句中被赋值的变量,一定是 wire 型变量。

 

五、参数和赋值语句

五、注释

六、运算符

 

七、优先级

八、位拼接运算符

九、条件语句

 

 

 

 十、系统任务和任务函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值