Verilog初级教程(3)Verilog 数据类型

文章目录

    • 前言
    • 正文
      • 变量可以取什么样的值?
      • 变量的取值意味着什么?
      • 主要的数据类型
      • 其他数据类型
        • integer
        • time / realtime
        • real
        • 例子
      • Verilog的字符串
    • 写在最后

前言

这是本系列的第三篇博文,依然很基础,这个系列文章,主要是在没有其他事情的时候,休闲所作!
如问,有没有意义,我觉得对我来说是有意义的:

  • 首先,对于我写博客的条理性来说,是有意义的,以前写博客,想到什么写什么,现在需要条理性,也是对知识的一种回顾!
  • 其次,对于初学者以及看我博客的人来说,可以作为一种资料来源用作参考!
  • 最后,保持写作,写着写着也许就有思路了呢?

我的微信公众号: FPGA LAB

正文

本篇博客讲的是Verilog HDL中的数据类型,我最常用的数据类型,无非就三种,reg、wire,integer;其中integer 主要在for 循环中使用。

变量可以取什么样的值?

变量的取值有四种,由于是数字电路,固然是0和1,那第三种、第四种呢?
高阻态 Z以及未知态X。我们在仿真中常见到这两种状态,有的时候还弄得人很不爽快!

  • 何为高阻态?

高阻态是一个数字电路里常见的术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,类似于引脚悬空,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。

更详细的解释见博客:

三态之高阻态

FPGA基础知识极简教程(8)详解三态缓冲器

  • 何为未知态?

未知态,顾名思义,代表不知道的逻辑值,可以是0也可以是1.

如下总结:

logic valuemeaning
0represents a logic zero, or a false condition
1represents a logic one, or a true condition
xrepresents an unknown logic value (can be zero or one)
zrepresents a high-impedance state

示意图:

四种状态

变量的取值意味着什么?

Verilog是一种硬件描述语言,用于描述触发器,与非门等等一系列的硬件逻辑,因此,其逻辑取值应该在硬件电路中有所对应!

  • 逻辑1代表着电源电压Vdd,逻辑0代表着接地!
  • 未知态X可以是0也可以是1,这与布尔代数有所差异,其表示无关!
  • 高阻态Z表示未连接任何导线,悬空。

主要的数据类型

主要的数据类型,莫过于reg类型和wire类型,Verilog几乎可以用这两种类型通吃了。

  • wire类似于将两个部件在电路板上连接起来:

电路板连线

它用于硬件实体之间的连接,因此不会存储任何值,仅仅起到连接元件的作用:

连线

如果需要多个连线,还可以设置wire的位宽,相当于将几个线捆扎在一起:

wire [3:0] n0;

位宽为4的wire类型变量

最后关于wire类型需要注意的是,重复声明或定义是不合规的。

module design;wire    abc;wire   a;wire   b;wire   c;wire    abc;   // Error: Identifier "abc" previously declaredassign abc = a & b | c;
endmodule
  • reg类型变量可用于数据的存储,其可以看做是register的缩写,也即是寄存器!

如下:

reg型变量

上面的定义,相当于分别定义了一个4bit的存储空间和一个8bit的存储空间,可以用来存储数值。

下图显示了,这种变量在硬件电路中的等价:

寄存器变量的等价

其他数据类型

integer

除了wire以及reg型变量,另一个比较常用的便是integer数据类型了,它表示了32bit的数据宽度,用来存储整型值,我们在for循环中常常用到它,例如:

for(integer i = 0; i < 10; i = i + 1) begin
//......
end

或者:

integer i = 0;
for(i = 0; i < 10; i = i + 1) begin
//......
end

time / realtime

这两种类型一般用于仿真,time类型是一个无符号,64bit宽的数据类型,可以用来存储仿真时间用于调试。
realtime的区别在于仅存储浮点型数据。

例如:

    time        end_time;           // end_time can be stored a time value like 50nsrealtime    rtime;              // rtime = 40.25ps 

real

real型变量可以存储浮点值,可以像整数和reg一样进行赋值。

如:

    real        float;              // float = 12.344  - can store floating numbers

例子

module testbench;integer    int_a;         // Integer variablereal     real_b;       // Real variabletime     time_c;       // Time variableinitial beginint_a   = 32'hcafe_1234;   // Assign an integer valuereal_b   = 0.1234567;     // Assign a floating point value#20;             // Advance simulation time by 20 unitstime_c   = $time;       // Assign current simulation time// Now print all variables using $display system task$display ("int_a   = 0x%0h", int_a);$display ("real_b   = %0.5f", real_b);$display ("time_c   = %0t", time_c);end
endmodule

仿真结果:

ncsim> run
int_a 	= 0xcafe1234
real_b 	= 0.12346
time_c 	= 20
ncsim: *W,RNQUIE: Simulation is complete.

Verilog的字符串

字符串在reg中被还原,reg变量的宽度必须足够大,以容纳字符串。字符串中的每个字符代表一个ASCll值,需要1个字节。如果变量的大小小于字符串,那么Verilog会截断字符串的最左边的位。如果变量的大小大于字符串,那么Verilog会在字符串的左边添加0。

 
// "Hello World" requires 11 bytesreg [8*11:1] str = "Hello World";         // Variable can store 11 bytes, str = "Hello World"
reg [8*5:1]  str = "Hello World";         // Variable stores only 5 bytes (rest is truncated), str = "World"
reg [8*20:1] str = "Hello World";         // Variable can store 20 bytes (rest is padded with zeros), str = "         Hello World"

下面举一个例子进行仿真:

module testbench;reg [8*11:1] str1;reg [8*5:1]  str2;reg [8*20:1] str3;initial beginstr1 = "Hello World";str2 = "Hello World";str3 = "Hello World";$display ("str1 = %s", str1);$display ("str2 = %s", str2);$display ("str3 = %s", str3);end
endmodule

仿真结果:

ncsim> run
str1 = Hello World
str2 = World
str3 =          Hello World
ncsim: *W,RNQUIE: Simulation is complete.

写在最后

  • 个人微信公众号:FPGA LAB

  • 知乎:李锐博恩

  • FPGA/IC技术交流2020

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Verilog初级教程(10)Verilog的always块

博文目录 写在前面正文语法什么是敏感列表&#xff1f;always块是用来干什么的&#xff1f;如果没有敏感列表怎么办&#xff1f;时序逻辑实例组合逻辑实例注意事项 参考资料 写在前面 由于刚毕业&#xff0c;又发生了很多事&#xff0c;在进入工作的准备期&#xff0c;就这样一…

verilog 入门教程

verilog 入门教程 1.1 什么是Verilog HDL? 1.2 Verilog的历史 1.3 Verilog的主要描述能力 2.1 Verilog-模块 2.2 Verilog-时延 2.3 Verilog-assign语句 2.4 Verilog-initial语句 2.5 Verilog-always语句 2.6 Verilog的结构化描述形式 2.7 Verilog-混合设计描述方式 2.8 Veri…

Verilog初级教程(14)Verilog中的赋值语句

文章目录 前言正文合理的左值过程性赋值&#xff08;Procedural assignment&#xff09;连续赋值过程连续性赋值 往期回顾 前言 何为赋值语句&#xff1f;即将值放到线网或者变量上&#xff0c;这种操作称为赋值&#xff0c;英文&#xff1a;assignment. 它有三种基本形式&…

嵌入式开发Verilog教程(二)——Verilog HDL设计方法概述

嵌入式开发Verilog教程&#xff08;二&#xff09;——Verilog HDL设计方法概述 前言一、Verilog HDL语言简介1.1 Verilog HDL语言是什么1.2 Verilog HDL设计复杂数字电路的优点1.2.1 传统设计方法——电路原理图输入法1.2.2 Verilog HDL设计方法与传统设计方法相比较的优势1.2…

嵌入式开发Verilog教程(三)——Verilog HDL基本语法汇总(上)

嵌入式开发Verilog教程&#xff08;三&#xff09;——Verilog HDL基本语法汇总&#xff08;上&#xff09; 前言一、简单的Verilog HDL模块1.1 Verilog HDL程序简单模块1.2 Verilog HDL程序模块结构1.3 Verilog HDL程序模块端口定义1.4 Verilog HDL程序模块内容 二、Verilog H…

SANXIN-B01开发板verilog教程V3电子版

今天给大侠带来“SANXIN-B01开发板verilog教程V3-郝旭帅团队电子版”,V3版本更新了后几章节的高级设计部分,获取电子版资料,请点击左下角阅读原文,跳转叁芯智能科技官方技术论坛下载,或者登录网址www.sxznfpga.com下载。 叁芯智能科技-郝旭帅团队打造“FPGA 设计与研发”学…

Verilog 教程

第一章&#xff1a;Verilog 简介 1.1 Verilog 教程 1.2 Verilog 简介 1.3 Verilog 环境搭建 1.4 Verilog 设计方法第二章&#xff1a;语法要素 2.1 Verilog 基础语法 2.2 Verilog 数值表示 2.3 Verilog 数据类型 2.4 Verilog 表达式 2.5 Verilog 编译指令 第三章…

ol中不同区域加载不同底图

概述 写一篇水文&#xff0c;讲讲如果在openlayers中实现不同的区域加载不同的底图。 效果 实现 通过tileUrlFunction实现不同切片地址的请求。 <!DOCTYPE html> <html><head><title>XYZ</title><link rel"stylesheet" href&qu…

数电/数字电子技术期末考前突击复习(小白稳过,看这一篇就够了)

博主&#xff1a;命运之光 专栏&#xff1a;期末考试必过and不挂科and争高分&#x1f636;‍&#x1f32b;️还有其他科目的考试突击日后会陆续更新 ✨✨✨✨✨点赞&#xff0c;关注&#xff0c;收藏不迷路✨✨✨✨✨ &#x1f984;前言&#xff1a;总结了期末数电大概率可能…

windows 10下载安装mysql5.7

MySQL数据库在日常使用是非常的频繁的&#xff0c;不管是线上还是线下。下面我就分享出我安装MySQL5.7的一步一脚印的教程&#xff0c;本教程只针对windows版本。 下载 MySQL官网下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 选择对应的系统和版本…

【明解STM32】中断系统理论基础知识篇之中断寄存器功能原理

目录 一、前言 二、寄存器概述 三、NVIC寄存器组 四、SCB寄存器组 五、中断屏蔽寄存器组 六、总结 一、前言 在之前的STM32的中断系统理论基础知识之基本原理及NVIC中&#xff0c;分别中断的基本原理&#xff0c;中断的管理机制和中断的处理流程进行了较为详细的论述&…

mysql.exe下载_mysql8 windows 下载安装

一. 下载 点击download 可以注册登录&#xff0c;嫌麻烦的话直接点击NO&#xff0c;thanks… 开始下载 二. 安装 下载完成后得到一个zip包 我是安装板和解压即用版都下了&#xff0c;但用的解压即用版本&#xff0c;比较方便 解压mysql-8.0.17-winx64.zip&#xff0c;得到mysql…

MySQL 64位安装教程,不需要配置my.ini文件

一、下载安装包&#xff0c;官网下载 下载网址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2、MySQLWorkbench 8.0.25下载 二、进行MySql压缩包安装方式配置。 不需要配置环境变量&#xff0c;不需要配置mini文件。下载是这些&#xff0c;自己改一下文件夹名字&…

mysql下载安装(清华源)

鉴于网上大多数MySQL方法均是上官网下载&#xff0c;然而像我这样普通电脑&#xff0c;普通带宽&#xff0c;普通配置的电脑&#xff0c;上那些官网的速度确实不敢恭维&#xff0c;因此写了这篇文章&#xff0c;举个例子&#xff0c;我在家中的是最普通的10M带宽&#xff0c;上…

MySQL 5.6 (Win7 64位)下载、安装与配置图文教程

MySQL是目前十分流行的一种关系型数据库管理系统。官网推出的安装包有两种格式&#xff0c;分别是&#xff1a;ZIP格式和MSI格式。其中MSI格式的可以直接点击安装&#xff0c;按照它给出的安装提示进行安装&#xff0c;一般MySQL将会安装在C:\Program Files\MySQL\MySQL Server…

C++ queue类成员介绍

目录 &#x1f914;queue模板介绍&#xff1a; &#x1f914;queue特点&#xff1a; &#x1f914;queue内存图解&#xff1a; &#x1f914; queue的成员函数 &#x1f50d;queue构造函数&#xff1a; &#x1f50d;queue赋值函数&#xff1a; &#x1f50d;queue判断函…

video标签学习 xgplayer视频播放器分段播放mp4

文章目录 学习链接目标video标签自带视频和制作的视频区别video标签的src属性本地视频文件前端代码播放效果 服务器视频文件示例1后端代码前端代码播放效果 示例2后端代码前端代码播放效果 示例3后端配置前端代码播放效果 video对象video对象创建和获取video的属性video的方法v…

spring cloud Alibaba之Nacos Discovery--服务治理 (二)

接着上一篇文章 搭建的微服务环境, 实现nacos 注册中心实战操作案例 一. 服务治理介绍 先来思考一个问题 通过上一章的操作&#xff0c;我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 &#xff08;ip&#xff0c;端口&#xff09;等硬编码到了代码中&a…

PHPMySQL基础(五):模拟登录后跳转+会话存储功能实现

PHP&MySQL基础&#xff08;一&#xff09;:创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;二&#xff09;:通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客 PHP&MySQL基础&#xff08;三&#xff09;:处理查询SQL返…

excel用条件格式设置隔行变色

1、选中要设置隔行变色的区域 2、点击条件格式—>新建规则—>使用公式确定要设置格式额单元格 3、输入公式 mod(row(),2) 0&#xff0c;点击格式按钮&#xff0c;选择填充的颜色&#xff0c;点击确定。如下图所示&#xff1a; 4、在新建格式规则窗口中点击确定&#x…