Verilog学习笔记基本语法篇(一)·········数据类型
Verilog中共有19种数据类型。
基本的四种类型: reg型、wire型、integer型、parameter型。
其他类型:large型、medium型、small型、scalared型、time型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。
这14中数据类型除time外都与基本逻辑单元建库有关。
A、常 量
(1)数 字
整数,整型常量即整常数有以下4种进制表示形式:1)二进制(b或B);2)十进制(d或D);3)十六进制(h或H);4)八进制(o或O)。
数字表达式分为三种:
1)<位宽><进制><数字>,这是最完整的形式。
2)<进制><数字>,数字的位宽采用默认位宽(不同的机器系统不同,至少32位)。
3)<数字>,采用默认进制(十进制)。
示例:(位宽指的是时间所占位数,而不是指十六进制有几位。如示例二,每一位十六进制数字需要4位二进制数字表示,所以2位十六进制的位宽为8)
8'b10101100 //位宽为8的二进制数字10101100
8'ha2 //位宽为8的十六进制数字a2
x值和z值:在数字电路中,x代表不定值,z代表高阻值。一个x可以定义十六进制的4位,八进制的3位。z的表示方式同x相同,另外z亦可以用“?”来表示。(case块中用得较多)
4'b10x0 //位宽为4的二进制数从低位数起第二位为不定值
4'b101z //位宽为4的二进制数从低位数起第一位为高阻值
12'dz //位宽为12的10进制数,其值为高阻值(形式一)
12'd? //位宽为12的10进制数,其值为高阻值(形式二)
8'h4x //位宽为8的十六进制数,其低4位为不定值
负数:在位宽前面加一个减号,减号必须在数字定义表达式的最前面。
-8'd5 //代表5的补数(采用8位二进制表示)
下划线:用于区别开数字的表达式以提高程序的可读性。不能用在位宽和进制的地方,只能用在数字之间(数字前也不可以)。
16'b1010_1011_1111_1010 //合法形式
常量未加标志时,默认为32位的十进制数,字母用八位的ASCII值表示。
"AB"=16'b01000001_01000010 //字符串AB,为十六进制数16'h4142
(2)参数型(parameter)
用parameter来定义一个标志符代表一个常量,称作符号常量,他可以提高程序的可读性和可维护性。parameter是参数型数据的关键字,在每一个赋值语句的右边都必须是一个常数表达式。即该表达式只能包含数字或先前已经定义的参数。
parameter msb=7; //定义参数msb=7
parameter r=5.7; //定义r为一个实型参数5.7
parameter byte_size=8,byte_msb=byte_size-1; //利用常数表达式赋值
参数型常量经常用于定义延迟时间和变量宽度。在模块和实例引用时,可以通过参数传递改变在被引用模块或实例中已经定义的参数。
本书(1)(p31)介绍了两种方法:
1)引用实例时,通过参数的传递来改变已经定义的参数值。 Decode #(4,0) D1(A4,F16)
2)在多层次的模块中,改变参数需要使用defparam命令。 defparam Test.T.B1.P=2; //Test、T、B1分别是高层模块中的底层模块实例。
B、变 量
网络数据类型表示结构实体之间的物理连接。网络数据类型的变量不能储存数值,而且必须受到驱动器(门或连续赋值语句assign)的驱动。
(1)wire型,默认为高阻值z。
网络数据类型包括 wire型 和 tri型 数据。
wire用于表示单个门驱动或者连续赋值语句驱动的网络数据类型;
tri型则用来表示多驱动器驱动的网络型数据。
如果没有定义wire和tri的逻辑强度,在多驱动元的情况下逻辑值会发生冲突,从而产生不确定值。(z的优先级最低,x的优先级最高)
| wire / tri | 0 | 1 | x | z |
|
0 |
0 | x | x | 0 |
| 1 | x | 1 | x |
1 |
|
x |
x | x | x | x |
|
z |
0 | 1 | x | z |
wire经常用来表示以assign为关键字的组合逻辑信号。Verilog程序模块中输入输出的信号类型默认时自动定义为wire型。参数定义格式如下;
wire [n-1,0] 数据名1,数据名2...数据名i; //表示共有 i 条总线,每台总线内有n条线路。或者 wire [n,1] 数据名1,数据名2...数据名i;
[n-1,0] 和 [n,1] 表示该数据的位宽为n。如:
wire a; //定义了1个1位的wire数据
wire [7,0] b; //定义了1个8位的wire数据
wire [4,1] a,b; //定义了2个4位的wire数据
(2)reg型,默认为不定值x。
寄存器是存储单元的抽象,寄存器数据类型的关键字是reg。常用来表示always模块内的指定信号,代表触发器。在always模块内被赋值的每一个信号都必须定义成reg型。格式与wire型类似:
reg [n-1,0] 数据名1,数据名2,...数据名i;
reg [n,1] 数据名1,数据名2,...数据名i;
reg数据可以赋正值,也可以赋负值。但是当一个reg数据是一个表达式的操作式时,它的值被当做无符号值,即正值。如:4位的reg被赋值为-1,在表达式中为+15.
reg型只是表示被定义的信号将被用在always模块中,并不是说reg型数据就一定是存储器或触发器的输出。
(3)memory型(特殊的reg)
在Verilog中通过对reg数据建立数组来对存储器进行建模,用来买哦书RAM ROM和reg文件。verilog中没有多维数组存在,memory型数据是通过扩展reg型数据的地址范围实现的。存储器的地址索引必须是常数表达式(n-1,m-1等必须是常量,符号常量也可以)。如:
reg [n-1,0] 存储器名[m-1,0];
reg [n-1,0] 存储器名[m,1];
在这里[n-1,0]定义了存储器中每一个存储单元的大小,即n位寄存器。存储器名后面的[m-1,0],表示定义的存储器中有多少个这样的寄存器。
reg [7,0] mem[255,0]; //256个8位寄存器的存储器mem
reg [n-1,0] rega; //一个n位的寄存器
reg mema[n-1,0] //n个1位的寄存器形成的存储器
rega = 0; //合法,对n位的寄存器赋值位0
mema = 0; //非法,不能对完整的存储器直接赋值
mema[3] = 0; //合法,将mema中第三个存储单元赋值为0
Verilog学习笔记基本语法篇(一)·········数据类型的更多相关文章
- Verilog学习笔记基本语法篇(九)········ 任务和函数
task 和 function 说明语句分别用来定义任务和函数,利用任务和函数可以把函数模块分成许多小的任务和函数便于理解和调试.任务和函数往往还是大的程序模块在不同地点多次用到的相同的程序段.输入. ...
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(七)········ 生成块
生成块可以动态的生成Verilog代码.可以用于对矢量中的多个位进行重复操作.多个模块的实例引用的重复操作.根据参数确定程序中是否包含某段代码.生成语句可以控制变量的声明.任务和函数的调用.还能对实例 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- Verilog学习笔记基本语法篇(十三)...............Gate门
Verilog中已有一些建立好的逻辑门和开关的模型.在所涉及的模块中,可通过实例引用这些门与开关模型,从而对模块进行结构化的描述. 逻辑门: and (output,input,...) nand ( ...
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...
- Verilog学习笔记基本语法篇(八)········ 结构说明语句
Verilog中的任何过程都可以属于以下四种结构的说明语句; 1) initial; 2) always; 3) task; 4) function; 1) initial说明语句: 一个程序 ...
- Verilog学习笔记基本语法篇(六)········ 循环语句
在Verilog中存在着4种类型的循环语句,用来控制执行语句的执行次数. 1)forever语句: 连续执行的语句. 2)repeat语句: 连续执行n次的语句. 3)while语句: 执行语 ...
- Verilog学习笔记基本语法篇(四)·········块语句
块语句是指将两条或者两条以上的语句组合在一起,使其在格式上更像一条语句.块语句分为两种: 1)用begin_end语句,通常用来标识顺序执行的语句,用它标识的块称作顺序块: 2)用fork_join语 ...
随机推荐
- JQuery基础知识梳理篇
这周没事,优化线上项目,因为前端都在赶项目,我又若菜.于是前端数据展示也要自己来.看javascript看到吐,决定梳理一下Jquery基础知识.敲黑板) 闲扯结束,进入正题. 选择器 介绍 jque ...
- cmder安装
官网地址:http://gooseberrycreative.com/cmder/ 一款非常漂亮好用的cmd工具. 在github或者官网下载后解压,点击Cmder.exe即可启动. 32位系统会遇到 ...
- [已读]JavaScript DOM编程艺术
看到过很多人将它作为推荐入门书籍,当时我刚看完ppk和javascript精粹,于是看到这本就觉得很一般了.怎么说,它适合基础.
- Codeforces Beta Round #12 (Div 2 Only) D. Ball 树状数组查询后缀、最值
http://codeforces.com/problemset/problem/12/D 这里的BIT查询,指的是查询[1, R]或者[R, maxn]之间的最值,这样就够用了. 设三个权值分别是b ...
- Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ...
- Y2分班考试 笔试题总结
1. 此题编译错误 base无法点出methodB()方法 2. 第二题选C 3.此题选D:正确的输出级别为fatal>error>warn>info>debug 4. 此题 ...
- java maven cxf笔记
IDE: 一:新建Maven项目 1.File->New->Project.. 2. 3. 4. 二:添加cxf和jetty依赖 <dependencies> <!- ...
- Eclipse-运行符-数据类型转换-环境变量配置
1.能够使用Eclipse快捷键 ctrl + / 单行注释:再按一次则取消: ctrl + shift + / 多行注释: ctrl + shift + \ 取消多行注释: ctrl + ...
- Java之instanceof
class Base{ int x = 1; static int y = 2; String name(){ return "mother" ...
- HDU 4276 The Ghost Blows Light (树形DP,变形)
题意:给定一棵n个节点的树,起点是1,终点是n,每经过一条边需要消耗Ti天,每个点上有一定量的珠宝,要求必须在t天内到达终点才可以将珠宝带出去,问至多能带多少珠宝? 思路: 注意Ti可以为0,而且有可 ...