学习笔记1:认识Verilog中的数据类型与数字的表达方式

写在前面:我对于verilog的学习只是足够编写一个简单的多周期cpu,对于verilog属于是浅浅的接触了一下了,其中可能会有一些写的不够准确的地方,欢迎指正讨论相互学习。

目录

数据类型

常量

整数的表示

X和Z

负数

 下划线

参数类型-parameter

 变量

wire

 reg


 

数据类型

最常用最基本的四种:(我也只用到了这四种)

reg、wire、integer、parameter

其他的数据类型:

常量

整数的表示

按照进制分为四种:二进制,八进制,十进制,十六进制,分别用b/B,o/O,d/D,h/H表示。

位宽:将数字转换为二进制后有多少位就是该数字的位宽,一位只能是0或1

表示方式有如下三种

一、位宽+进制+数字

        位宽和进制之间用一个英文单引号作分隔,这是必须的!进制后直接跟数字,该数字必须符合该进制的要求!

        例如:二进制的1001可以表示为 4'b1001

        例如:十六进制的7f可以表示为8'h7f (因为一位16进制数占4位,所以两位16进制数字位宽为8)

二、进制+数字

        采用默认位宽,通常是32位

三、数字

        默认为32位宽,十进制

X和Z

一、X代表不定值,Z代表高阻值

二、一个X 或 Z 可以代表一个任意进制的数字,Z 也可以用 ?代替

三、当 X 或 Z 代替16进制数字时一个 X 或 Z 占4位,表示二进制数字时则占1位,同理8进制3位

根据下方的例子来理解这两个类型 

 这两个类型的数据用的比较少,当然在编写CPU时可以不用(我就没用哈哈),把状态机的不定值默认当0即可。

负数

在位宽前加一个负号即可将一个整数定义为负数

 下划线

可以用来分割数字达到更好的可读性,只能用在两个具体数字之间!

例如:8'b10010010 等于 8'b1001_0010

前面这个一看就让人眼花,后面这个是不是就好多啦,而且他们两个在程序里其实是一样的哦。

一些默认的情况 

参数类型-parameter

 用来定义一个常量(嗯,就这么简单)

定义的方式

 就像c/c++里定义一个常量方式一样,类似与 const int 吧。

每次定义参数时都要给定初值,初值可以是确定的数字,也可以是之前定义过的参数 或者 常数表达式

示例: 

 变量

这里要明确且牢记,verilog是面向硬件的编程语言,这里的wire和reg最后都会是实际存在的器件,wire会被例化为一条导线,reg会例化为一个寄存器…这对以后的学习都有帮助。

wire

用来表示用以 assign 关键字指定的组合逻辑信号,模块中的输入、输出默认定义为 wire 型,wire 可以用作任何方程式的输入,也可以作assign语句或实例元件的输出。(这里提到的以后都会用到,如果暂时不理解什么是模块,assign之类的就先记住吧,反正以后还会具体说)

定义方式 

那个中括号的意思是索引,从左到右依次为 第n-1位,…… ,第0位,一共是n位。也可以是wire[n:1] ,从左到右依次为 第n位,…… ,第1位,一共也是n位。

如果是wire [0:0]意思就是从0到0,一共是1位,这就等价于只写wire。

你也可以把0放在左边,n-1放在右边,例如:wire [0:n-1] 这也是定义一个n位的wire类型数据,只不过索引时低位在左边。

在一个程序里定义方式应该统一(为了清晰不出错),建议使用左高右低的定义方式。

示例 

 

 reg

寄存器数据类型,可以用来存储数据,可以通过赋值语句改变其值,默认初始值为不定值( X ),always 块内所有被赋值的信号都必须是 reg 型,reg 型表达式内运算时将被当作无符号数,比如一个 4 位 reg 型变量,赋初值 -1 ,那么其值实际上会被认为是 +15。(还是那句话,都会用到,都很重要)

定义方式 

示例 

 存储器类型的另一种用法叫memory,我习惯直接叫它数组因为用起来和c/c++数组没啥区别

 这里定义了一个memory,元素个数为m个,每个元素是位宽为n的reg变量。

在定义寄存器堆的时候会用到这个。

对存储器进行地址索引的表达式必须是常数表达式(就是第二个中括号内的内容)

注意分辨如下两个定义方式,完全不同哦!! 

赋值操作

 

赋值时必须指明存储单元的标号,也就是确定存储单元的地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值