Verilog HDL学习(二)

Verilog HDL 基本语法

以$开头的字符串是为系统函数保留的。关键字不能作为标识符使用。

格式

Verilog HDL是自由格式的,即结构可以跨越多行编写,也可以一行内编写。空白符(换行换页Tab空格)没有特殊的意义。


常量及其表示

Verilog HDL用下列4种基本的值表示逻辑电路中的逻辑状态。

  • 0: 逻辑0或“假”
  • 1: 逻辑1或“真”
  • x: 未知状态,通常是在这个信号未被赋值前
  • z: 高阻

x值和z值都是不分大小写的,既01xz与01XZ相同


整数表示

<+/><><><> <script type="math/tex" id="MathJax-Element-3"><+/-> <位宽> ' <基数格式> <整数> </script>
位宽:用十进制数表示整数的位宽,如果没有定义整数的位宽,则位宽的实际长度就是响应的位数。
基数格式:二进制(b或B)、八进制(o或O)、十进制(d或D)、十六进制数(h或H)
整数:最左边是最高有效位,最右边为最低有效位。注意,表示负数时,减号必须写在表达式的前面,不能写在表达式的其他位置上。
如:

-14 // 十进制数 -14
16’d255 //位宽为16的十进制数255
8’h9a //位宽为8的十六进制数0x9a
1. 除了第一个字符,下划线“_”可以出现在数字中的任何位置,仅用于提高可读性,在编译阶段会被忽略掉。例如“32’h21_65_bc_fe”表示位宽为32位的十六进制数0x2165bcfe。8’o_0111_1011”为非法格式
2. 在数字电路中,x代表不定值,z代表高阻值,z还有一种表达方式是可以写作“?”。x或z在二进制数字中代表1位x或z的值,在八进制中代表3位x或z的值,在十六进制数中代表4位x或z的值
如:
4’b1x0x //位宽为4的二进制数1x0x
8’h3x //位宽为8的十六进制数,其低4位值为不定值,0011 xxxx


实数表示

  1. 十进制格式,由数字和小数点组成。如:0.1、3.1415
  2. 指数格式(科学表示法),由数字和字符e(或E)组成,e(或E)的前面必须有数字且后面必须为整数。如:13_5.1e2(其值为13510.0,“_”仅为了提高可读),8.5E2(其值850.0)

字符串

字符串常量是由一对双引号括起来的字符序列。且它必须在一行内写完,不可书写在多行中,也不能包含回车符。


变量的数据类型

在Verilog HDL中变量的数据类型是用来表示数字电路中的物理连线、数据存储和传送单元等物理量。共有19种数据类型,包括wire型reg型parameter型large型integer型medium型scalared型time型small型tri型tri0型tri1型triand型trior型trireg型vectored型wand型wor型net型
1. 线网型变量(net)
线网型变量可以理解为实际电路中的导线。既然是“导线”则不可以存储任何值,且只能被激励信号“驱动”,可通过连续赋值(assign)元件的输出连接产生驱动线网的激励信号。给线网提供驱动的赋值元件就是驱动源线网的值由驱动源决定。如果没有驱动源的线网型变量,则其值为高阻态即值为z。一个线网型变量可以同时受到几个驱动源的驱动,则该线网型变量的值由逻辑强度较高的驱动源决定;如果驱动源逻辑强度相同,则该值为不定态即值为x。常用的线网型变量包括 wire tri 。wire通常用来表示单个门驱动连续赋值语句的线网型变量。tri通常用来表示多驱动源驱动同一根线的线网类型。
在Verilog 程序模块中,被声明为 input 或者 inout 的端口,只能被定义为线网型变量,被声明为 output 的端口可以被定义为线网型变量或者寄存器型变量。输入输出信号类型(inout)缺省时自动定义为 wire
wire型信号可以用作任何方程式的输入,也可以用作assign语句或实例元件的输出,不可以在initial和always模块中被赋值
其他线网类型:supply0,supply1(用于对电源建模),wand,triand(多重驱动,具有线与特性的线网类型)、wor,trior(多重驱动,具有线与特性的线网类型),tri1,tri0(上拉电阻,用于开关级建模),trireg(具有电荷保持特性的线网类型,用于开关级建模)。
2. 寄存器型变量
寄存器型变量可以理解为实际电路中的寄存器,在输入信号消失后它可以保持原有的数值不变。与线网型变量的根本区别在于:register型变量需要被明确地赋值,并且在被重新赋值之前将一直保持原值。且只能在initial或always内部通过赋值语句改变寄存器存储的值,赋值之前,默认值为x。
其他寄存器变量类型 :integer (32位有符号整型变量),time(64位无符号时间变量),real(64位有符号实型变量),由于这几种寄存器变量的位宽已经固定,因此在定义此类变量时,不可以加入位宽。
3. memory型变量
memory型数据是通过扩展reg数据的地址范围来生成的。其格式为:

reg[msb:lsb] 存储器名1[upper1:lower1],
             存储器名2[upper2:lower2],....;

如:reg[7:0] mem[1023:0]; 1024个单元,每单元8bit。mem[1] = 2;对存储器变量的赋值只能是这样,其他的赋值非法。
4. parameter(参数)语句
用parameter来定义一个标识符代表一个常量,相当于宏定义。如:parameter Pi = 3.14;

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值