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

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

时间:2024-03-27 18:30:05浏览次数:26  
标签:wire 数据类型 编程 driver 线网 Verilog 驱动 reg 赋值

目录

线网(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) begin
        if (en1)
            y = a1;
        else
            y = 1'bz;
    end

    always @(a2 or en2) begin
        if (en2)
            y = a2;
        else
            y = 1'bz;
        end

endmodule

向量

标量(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

标签:wire,数据类型,编程,driver,线网,Verilog,驱动,reg,赋值
From: https://blog.csdn.net/qq_53922164/article/details/137085460

相关文章

  • 语法回顾-《Verilog编程艺术》之Verilog特性
    目录Verilog标准:抽象级别:行为级模型:RTL级模型:门级模型:可综合子集:参考《Verilog编程艺术》魏家明著Verilog标准:Verilog一共发行了三个标准:Verilog-1995、Verilog-2001和Verilog-2005.抽象级别:Verilog可以在三种抽象级上进行描述:行为级模型,RTL级模型和门级模型。......
  • 【Python】Python基本数据类型(超详细)
    前言在上一篇文章我们简单介绍了一下Python,本章我们就开始正式学习Python,在此之前,考虑到Python环境有的小伙伴可能没有,所有我开了一个QQ群,里面有代码编辑器(PyCharm)的安装与破解使用,如果有大佬需要的话可以加群自行安装,这个群创建的目的也是方便各位讨论技术,QQ群号:455341......
  • 《python编程从入门到实践》 Sublime中运行程序提示“Python was not found but can b
    安装过程1.安装python32.安装SublimeText①下载②让SublimeText使用命令python3来运行Python程序3.运行①新建helloworld②运行遇到的问题执行以上步骤后:1.搜索解决方法2.关掉后执行3.更改buildsystem方式python3改为python,执行,成功备注:发现保持应用打开......
  • 1.编程介绍
    【一】编程和编程语言1.编程​ 将人类的语言转变成计算机能识别的语言2.编程语言​ 人与计算机之间进行沟通的语言3.目的​ 为了让计算机按照人类的意愿完成特定的任务,实现自动化,提高工作效率,解放人力,创造应用与软件【二】计算机组成原理1)计算机的五大组成部分1.控制器......
  • HTML编程+函数的调用1
    原创:财院网站设计学习平台1.函数无参数<body><inputtype="submit"value="输入显示信息的次数:"onclick="showHello()"/><script>functionshowHello(){varcount=prompt("请输入显示信息的次数:");for(vari=1;i<=count;i++){......
  • Verilog 仿真可视化
            DigitalJS是一个基于JavaScript实现的开源数字电路模拟器,旨在模拟由硬件设计工具(如Yosys)合成的电路。由弗罗茨瓦夫大学的MarekMaterzok开发,源文件托管于Github上。DigitalJS的开源网址如下:https://github.com/tilk/digitaljs        下面这......
  • python 数据类型和运算符 进阶学习
    有了前面的基础的,我们对数据类型有了一定的了解,按照思维进阶深度学习的学习方法,我们对前面的实例进行扩展学习,以求学习到更多一点的知识。实例二:输入两个数,计算它们的和、平方、三次方、平方根、三次方根  首先是复习前面的数据类型的知识该程序的执行结果  是......
  • C++的数据类型
    1、整型的基本概念C++用int关键字来声明整型变量(int是integer的简写)。在声明整型变量的时候,可以在int关键字之前加signed、unsigned、short和long四种修饰符。signed:有符号的,可以表示正数和负数。unsigned:无符号的,只能表示正数,例如超女的身高和体重等。short:短的,取值范......
  • FUSB302BMPX 可编程USB芯片控制器 接口集成电路 302B Type-C Control IC with PD
    FUSB302BMPX是一种可编程的USBType-C控制器,由安森美半导体公司生产。它支撑USBType-C检测,包含衔接和方向,并集成了USBBMC功率输送协议的物理层,可完成高达100W的电源和角色交换。该控制器适用于希望完成DRP/SRC/SNKUSBType-C衔接器的系统规划人员。此外,FUSB302BMPX支撑USB3......
  • 《安富莱嵌入式周报》第335期:大量嵌入式书籍免费下载,CNC电机同步,智能家居比赛作品,EMF2
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV151421Q7P4/目录:1、大量嵌入式书籍免费下载,无需注册账号,直接下载2、EMF2024准备的电子胸牌3、CNC电机同步视频4、Hackaday举......