语法回顾-《Verilog编程艺术》之数据类型

目录

线网(net)

变量(variable)

线网和变量的区别

向量

数组


参考《Verilog 编程艺术》魏家明著

线网(net)

用于表示结构体(如逻辑门)之间的连接。除了 trireg 之外,所有其他的线网类型都不能保存值,线网的值是由driver决定的。例如由连续赋值驱动或由逻辑门驱动。如果driver没有驱动线网,那么线网的值是z,但是tri0,tri1,trireg除外。tri0将是0,tri1将是1,而trireg将保持之前driver的驱动值。

线网的类型:wire,wand,wor,tri,triand,trior,tri0,tri1,trireg,uwire,supply0,supply1。

wire和tri:

一样的,具有同样的语法和功能,提供两个名字是用于不同方面的建模:wire用于逻辑门的驱动或连续赋值的驱动,而tri同于多driver驱动。

当多个具有相同驱动强度的driver驱动同一个wire和tri线网出现逻辑冲突时,线网的值是x。

wor,wand,trior,triand:

属于线逻辑(model wired logic)类型。用于解决多个driver驱动同一个线网时出现的逻辑冲突。wor和trior实现线或逻辑,wand和triand实现线与逻辑。

tri0和tri1:

tri0用于表示带有下拉电阻的线网。当没有driver驱动tri0线网时,它的值是0,强度是pull。

tri1用于表示带有上拉电阻的线网,当没有driver驱动tri1线网时,它的值是1,强度是pull。

uwire:

只能被一个driver驱动,如果被多个driver驱动,编译会报错。

supply0,supply1:

用于模拟电源,就是只提供0和1值的线网,通常只在Vendor提供的标准单元库中使用,平常不用。

驱动强度(driver strength):

包括:

用于表示0的强度:highz0,supply0,strong0,pull0,weak0

用于表示1的强度:highz1,supply1,strong1,pull1,weak1

变量(variable)

是数据存储单元的抽象,具有如下特征:

1/变量会保持每次赋给它的值,直到下一次赋值给它。当过程快被触发时,过程块中的赋值就会改变变量的值。

2/reg,time和integer的初始化值是x,real和realtime的初始化值是0.0。

3/对reg的赋值是过程赋值(阻塞赋值和非阻塞赋值),reg能够模拟硬件寄存器。

4/可以把负值赋给线网和变量,只有integer,real,realtime,reg signed和net signed才能保持符号标志,而time,reg unsigned和net unsigned 则把赋给它们的值都当作无符号数处理。

5/integer等价于reg signed [31:0];time等价于reg unsigned[63:0]

6/real和realtime是等价的,都是64-bit双精度浮点数,只不过realtime变量常和$realtime函数一起用。

7/不能对real和realtime使用位索引和部分索引。

线网和变量的区别

任何过程赋值(procedural assignment)的左侧变量(LHS,left hand side)必须声明为reg,除此之外使用的变量必须声明为wire,没有例外。

连续赋值设置线网的驱动,多个driver可以同时驱动同一个线网。例如:

module drivers1 (input a1, en1, a2, en2,output y
);assign y = en1 ? a1 : 1'bz;assign y = en2 ? a2 : 1'bz;endmodule

 

过程赋值(例如always块)使变量发生变化。

module drivers1 (input a1, en1, a2, en2,output reg y
);always @(a1 or en1) beginif (en1)y = a1;elsey = 1'bz;endalways @(a2 or en2) beginif (en2)y = a2;elsey = 1'bz;endendmodule

向量

标量(scalar)是没有范围声明的1-bit的线网(net)或reg。

向量(vector)是带有范围声明的multi-bit的线网(net)或reg。

例子:

wand w;
wire w1, w2;
tri [15:0] busa;
reg a;
reg [3:0] v;

数组

1/数组的元素可以是标量也可以是向量。

2/数组的维数可以是一维,二维,多维。

3/数组的引用可以针对某一个元素或某一个元素的一部分(使用bit-select或part-select)

4/通常把一维数组称为memory。

例如:  

reg x[11:0];                // 一维数组
reg [0:7] x[5:0];           // 八个一维数组,每个数组包含6个元素。
reg [31:0] x [127:0];
reg arrayb [7:0][0:255];
wire warray [7:0][0:255];

二维数组表示图像

reg [23:0] image_data[0:800-1][0:800-1];
wire [23:0] piexl = image_data[x][y];           // (x,y)的像素
wire [7:0] color_r = image_data[x][y][23:16];   // rgb_r
wire [7:0] color_g = image_data[x][y][15:8];   // rgb_g
wire [7:0] color_b = image_data[x][y][7:0];   // rgb_b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/572445.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机病房温度监测与呼叫系统设计

**单片机设计介绍,基于单片机病房温度监测与呼叫系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机病房温度监测与呼叫系统设计概要主要涵盖了通过单片机技术实现病房温度的实时监测以及病人呼叫功能…

【启发式算法】同核分子优化算法 Homonuclear Molecules Optimization HMO算法【Matlab代码#70】

文章目录 【获取资源请见文章第4节:资源获取】1. 算法简介2. 部分代码展示3. 仿真结果展示4. 资源获取 【获取资源请见文章第4节:资源获取】 1. 算法简介 同核分子优化算法(Homonuclear Molecules Optimization,HMO)是…

pytorch+tensorboard

安装依赖 pip install teorboard pip install torch_tb_profiler了解teorboard 记录并可视化标量[组]、图片[组]。 如何使用 第一步:构建模型,记录中间值,写入summarywriter 每次写入一个标量add_scalar 比如: from torch.utils.tensorboard import SummaryWriter wr…

【Linux】进程地址空间详解

前言 在我们学习C语言或者C时肯定都听过老师讲过地址的概念而且老师肯定还会讲栈区、堆区等区域的概念,那么这个地址是指的物理内存地址吗?这里这些区域又是如何划分的呢? 我们在使用C语言的malloc或者C的new函数开辟空间时,开辟…

鸿蒙应用开发学习:用Marquee组件做个跑马灯

一、前言 鸿蒙应用的学习持续进行中,这两天阅读官方的API参考文档,发现一个有趣的组件——Marquee,用它做了个跑马灯,做个学习记录。 二、参考资料 官网文档链接如下: https://developer.huawei.com/consumer/cn/d…

【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

重点关注本文思路,用python分析,方便大家实验复现,代码每次都用全量的,其他工具自行选择。 全文3000字,阅读10min,操作1小时 企业案例实战欢迎关注专栏 每日更新:https://blog.csdn.net/cciehl/…

一键换脸的facefusion

FaceFusion 一个开源换脸软件,提供UI界面,启动后可直接在浏览器上面上传图片进行换脸操作。 电脑环境win10,软件pycharm,需要提前安装好python环境,推荐使用Anaconda3。关注文章下方公共号发送 “ 软件安装包 ”可以获…

ai智能生成文章,6款ai写作工具高效解决

ai智能生成文章已经成为现代写作的重要工具之一。随着技术的不断进步,越来越多的AI写作工具出现在市场上,为写作者们提供了高效解决方案。在本文中,我将介绍5款值得关注的AI写作工具,并探讨它们的特点和优势。 第一款ai写作工具是…

【SpringBoot框架篇】37.使用gRPC实现远程服务调用

文章目录 RPC简介gPRC简介protobuf1.文件编写规范2.字段类型3.定义服务(Services) 在Spring Boot中使用grpc1.父工程pom配置2.grpc-api模块2.1.pom配置2.2.proto文件编写2.3.把proto文件编译成class文件 3.grpc-server模块3.1.pom文件和application.yaml3.2.实现grpc-api模块的…

计算机组成原理 3 运算器

定点补码加/减法运算 补码加减法的实现 补码加法 : [X + Y] 补 [X] 补 + [Y] 补 和的补码 补码的和 补码减法 : [X−Y] 补 [X] 补 + [−Y] 补 [X] 补 −[Y] 补 差的补码 补码的差 求补公式 : [−…

【Entity Framework】Code First 数据批注

【Entity Framework】Code First 数据批注 文章目录 【Entity Framework】Code First 数据批注一、概述二、模型二、键Key三、组合键四、外键-ForeigKey第一种:指定导航属性,会自动生成外键,命名规则为:“对象名称_主键名“第二种…

用c++实现猴子偷桃、Fibonacci数列

4.1.2 猴子吃桃 【问题】一只猴子摘了很多桃子,每天吃现有桃子的一半多一个,到第10天时只有一个桃子,问原有桃子多少个? 【想法】设an表示第n天桃子的个数,猴子吃桃问题存在如下递推式: 【算法实现】由于每天的桃子…