verilog入门(三)-----数据类型

Verilog HDL有两大类数据类型

1.线网类型

net type表示verilog结构化元件间的物理连线。值由驱动元件的值决定,如果没有驱动元件连接到线网,线网的缺省值为z。

2.寄存器类型

register type表示一个抽象的数据存储单元。只能在always和initial中赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量缺省值为x。

线网类型包含不同的线网子类型:wire,tri,wor,trior,wand,triand,trireg,tri1,tri0,supply0,supply1

线网类型语法说明:

net_kind [msb:lsb] net1,net2,....,netN

net_kind是上述线网类型的一种

msb和lsb是用于定义线网范围的常量表达式

例如:  wire Rdy Start---->两个1位的连线

wand [2:0] Addr----->Addr是3位线与

当一个线网有多个驱动器时,即对一个线网有多个赋值时,不同的线网产生不同的行为。

例如:

wor Rde;

...

assign  Rde = Blt & Wyl;

...

assign  Rde = Kbl | Kip;          Rde有两个驱动源,由于它是线或线网,Rde的有效值由使用驱动源的值的线或表决定。

1.wire和tri线网:用于连接单元的连线是最常见的线网类型

连线与三态线网(tri)语法和语义一致,三态线可以用来描述多个驱动源驱动同一根线的线网类型。如果有多个驱动源,线网的有效值如下表:

2.wor和trior线网:线或者如果某个驱动源为1,那么线网的值也是1.线或和三态线或(trior)在语法和功能上是一致的。

wor [MSB:LSB] Art;

trior [MAX-1:MIN-1] Rdx,Sdx,Bdx

如果多个驱动源驱动这类网,网的有效值由下表决定:

3.wand和triand线网

线与(wand)网如果某个驱动源为0,那么线网的值为0.线与和三态线与(triand)网在语法和功能上是一致的。

wand [-7:0] Dbus;

triand Reset,Clk

4.trireg线网

此线网存储数值,并且用于电容节点建模。当三态寄存器(trireg)的所有驱动源都处于高阻态,即值为z时,三态寄存器线网保存作用在线网上的最后一个值。三态寄存器线网的缺省初始值为x。

trireg [1:8] Dbus,Abus

5.tri0和tri1线网

这类线网可用于线逻辑的建模,即线网有多于一个驱动源。tri0线网的特征是,若无驱动源驱动,它的值为0。tri1与其相反。

6.supply0和supply1线网

supply0用于对地建模,即低电平0

supply1用于对电源建模,即高电平1

7.未说明的线网

在Verilog HDL中,有可能不必生命某种线网类型,在这样的情况下,缺省线网类型为1位线网。

可以使用`define_nettype编译器指令改变隐式线网说明,例如:`default_nettype wand

向量和标量线网

在定义向量线网时可选用关键词scalared或vectored。如果一个线网定义时使用了关键词vectored,那么就不允许位选择和部分选择该线网。如果没有定义关键词,缺省值为标量。

寄存器类型:reg,integer,time,real,realtime

1.reg寄存器类型----->最常见的数据类型

形式如下:reg [msb:lsb] reg1,reg2,........,regN     [msb:lsb]定义了范围,并且均为常数值表达式,缺省值位1位寄存器。

reg [3:0] Sat;-------->Sat为4位寄存器

寄存器可以取任意长度。寄存器中的值为无符号数,例如:

reg [1:4] Comb;

...

Comb = -2;-------->Comb的值为1110,1110是2的补码

Comb = 5 ;--------->Comb的值为0101

2.存储器

存储器是一个寄存器数组,例如:reg [0:3] MyMem [0:63]----------->MyMem为64个4位寄存器的数组

reg Bog [1:5]------------>Bog为5个1位寄存器的数组。MyMem和Bog都是存储器。数组的维数不能大于2.注意存储器属于寄存器数组类型,线网数据类型没有对应的寄存器类型。

parameter ADDR_SIZE = 16,WORD_SIZE = 8;

reg [1:WORD_SIZE] RamPar [ADDR_SIZE-1:0],DataReg;

RamPar是存储器,是16个8位寄存器数组,而DataReg是8位寄存器。

对寄存器赋值和对存储器赋值是不同的,存储器赋值不能在一个赋值语句中完成。

reg [1:5] Dig;

‘‘‘

Dig = 5‘b11011;

对存储器赋值:

reg [0:3] Xrom [1:4]

...

Xrom[1] = 4‘hA;

Xrom[2] = 4‘h8;

Xrom[3] = 4‘hF;

Xrom[4] = 4‘h2;

为存储器赋值的另一种方法是使用系统任务:

1.$readmemb(加载二进制值)

2.$readmemh(加载十六进制值)

系统任务从指定的文本文件中读取数据并加载到存储器。文本文件必须包含相应的二进制或十六进制数

reg [1:4] RomB [7:1];

$readmemb ("ram.patt",RomB); --------------------->Romb是存储器,文件ram.patt必须包含二进制值,文件也可以包含空白空间和注释。

系统任务$readmemb促使从索引7即为Romb最左边的字索引,开始读取值。

如果只加载存储器的一部分,值域可以在$readmemb方法中定义。

$readmemb("ram.patt",RomB,5,3);此时只有Romb[5]~Romb[3]从文件头开始被读取。

文件可以包含显式的地址形式。@hex_address value例如:@5 11011,这种情况下,值被读入存储器指定地址。

3.Integer寄存器类型

整数寄存器包含整数值。整数寄存器可以作为普通寄存器使用,典型应用为高层次行为建模。使用整数型形式说明如下:

integer  integer1,integer2,...,integerN[msb:lsb];

例如:integer A,B,C------->表示三个整数型寄存器  integer Hist [3:6]----------->一组四个寄存器

一个整数型寄存器可存储有符号数,并且算术操作符提供2的补码运算结果。整数不能作为位向量访问。一种截取位值的方法是将整数赋值给一般的reg类型变量,然后从中选取相应的位

================

reg [31:0] Breg;

integer Bint;

Breg = Bint;//直接访问Bint[6]和Bint[20:10]是不允许的,但是Breg[6]和Breg[20:10]是允许的了。

================

4.time类型

time类型的寄存器用于存储和处理时间。例如:time Events [0:31]------->时间值数组

time CurrTime-------->currtime存储一个时间值

5.real和realtime类型

实数寄存器使用如下:

real  real_reg 1, real_reg2, . . ., real_regN;

real和realtime类型和使用完全相同。

real说明的变量的缺省值为0.不允许对real声明值域、位界限或字节界限。

原文地址:https://www.cnblogs.com/1mpanda/p/8303547.html

时间: 2024-11-06 16:59:47

verilog入门(三)-----数据类型的相关文章

Swift语法基础入门三(函数, 闭包)

Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: func 函数名称(参数名:参数类型, 参数名:参数类型...) -> 函数返回值 { 函数实现部分 } 没有参数没有返回值 可以写为 ->Void 可以写为 ->() 可以省略 Void.它其实是一个空的元组(tuple),没有任何元素,可以写成() func say() -> V

Flex入门(三)——微架构之Cairngorm

大家都知道我们在开发后台的时候,都会使用MVC,三层等分层架构,使后台代码达到职责更为分明单一,高内聚低耦合,例如,Dao层只是进行和数据库打交道,负责处理数据:Service(B层)只是进行逻辑判断处理,而Action则进行后台和前台页面的交互等.从而使程序更加容易管理,更加灵活,更加容易扩展,更加容易维护.也就是大家比较熟悉的Struts(SpringMVC)+Spring+Hibernate(Mybatis)等. 而作为前台Flex处理,也提供了类似的处理功能,想要达到的效果,也是代码分层

Thinkphp入门三—框架模板、变量(47)

原文:Thinkphp入门三-框架模板.变量(47) [在控制器调用模板] display()   调用当前操作名称的模板 display(‘名字’)  调用指定名字的模板文件 控制器调用模板四种方式: [在控制器给模板传递变量] 在smarty里边给模板传递变量信息 $smarty -> assign(变量名称,值); 在tp框架里边同样适用assign()给模板传递变量信息 ThinkPHP的模板引擎的左右标记: ThinkPHP/Lib/ Behavior/ ParseTemplateBe

Redbean:入门(三) - Exec 以及 Query 以及 ConvertToBeans

<?php //引入rb入口文件 include_once 'rb.php'; //定义dsn以及相关的数据 $dsn = 'mysql:host=localhost;dbname=hwibs_model'; $user = 'root'; $pass = ''; $table = 'link'; //链接数据库 R::setup($dsn,$user,$pass); //链接数据表 R::dispense($table); //exec::直接执行一条sql语句[不需要链接表即可使用][参数2

AppleWatch开发入门三——代码交互与控制器生命周期

AppleWatch开发入门三--代码交互与控制器生命周期 一.引言 在前两篇博客中,讨论了关于watch开发中框架与界面布局相关,然而主要的逻辑,终究还是要通过代码来实现的,在我们创建了项目之后,就会生成InterfaceController这个文件,它就是我们storyBoard中的入口视图控制器. 二.代码交互与控制器声明周期 storyBoard中的控件我们可以通过拖拽的方式关联到文件中,Action和Outlet两种关联方式基本可以达到我们修改控件和处理业务逻辑的需求. WKInter

Qt入门 - 全局数据类型

<QtGlobal> 1 typedef signed char qint8; /* 8 bit signed */ 2 typedef unsigned char quint8; /* 8 bit unsigned */ 3 typedef short qint16; /* 16 bit signed */ 4 typedef unsigned short quint16; /* 16 bit unsigned */ 5 typedef int qint32; /* 32 bit signe

kafka入门三:写第一个Kafka应用

一.整体看一下Kafka 我们知道,Kafka系统有三大组件:Producer.Consumer.broker . producers 生产(produce)消息(message)并推(push)送给brokers,consumers从brokers把消息提取(pull)出来消费(consume). 二.开发一个Producer应用 Producers用来生产消息并把产生的消息推送到Kafka的Broker.Producers可以是各种应用,比如web应用,服务器端应用,代理应用以及log系统等

【原创】NIO框架入门(三):iOS与MINA2、Netty4的跨平台UDP双向通信实战

前言 本文将演示一个iOS客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo.服务端将分别用MINA2和Netty4进行实现,而通信时服务端你只需选其一就行了.同时用MINA2和Netty4分别实现服务端的目的,是因为很多人都在纠结到底是用MINA还是Netty来实现高并发的Java网络通信服务端,在此干脆两个都实现了,就看你怎么选择了,够吊吧. NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,M

[WebGL入门]三,3D绘图的基础知识

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 二维和三维 三维空间--我们生活这个这个现实的世界就是一个三维空间. 在三维的世界里,所有的东西都由横,竖,深度.将这些东西重现,就是一个实时3D渲染.但是再现这个3D空间,我们是在一个2D的显示器上来实现的. 电脑和手机的屏幕,都是一个2D的显示器.至少现在还没有一个3D的显示设备,当然,研

DevExpress XtraReports 入门三 创建 Master-Detail(主/从) 报表

原文:DevExpress XtraReports 入门三 创建 Master-Detail(主/从) 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪费时间才写的这篇文章,高手不想的看请路过 本文内容来DevExpress XtraReports帮助文档,如看过类似的请略过. 废话少说 开始正事 一.添加从表  启动 MS Visual Studio (2005.2008.或 2010). 打开有数据感知报表的