Verilog 变量声明与数据类型二
上节介绍了wire,reg数据类型及其用法,并对变量定义中的向量的定义及使用做了说明。本节主要介绍其它几种类型。常用的有如下几种:整数integer,实数 real, 时间time,字符串等,他们本质上也是寄存器类型。
  1. 整形integer
整形变量用关键字integer 声明,在声明时不用指定位宽,位宽的大小和编译器有关,一般默认为32位。和reg关键字不同,如没有特别指定,reg型变量是无符号数,而integer声明的变量是有符号数的。integer类型的数据一般作为循环变量用在循环语句中。
例:
reg [31:0] a;
reg [31:0] b;
 
integer i;
 
always@(*)
for (i = 1; i <= 4; i = i + 1)
b[(i*8-1)-:8] = a[(i*8-1)-:8];
上例中,变量i只起到循环辅助作用,真正综合后该变量不存在,实际综合后与下面的代码等效。
reg [31:0] a;
reg [31:0] b;
 
integer i;
 
always@(*)
b[31:0] = a[31:0];
2. 实数(real)类型:
实数用关键字 real 来声明,可用十进制或科学计数法来表示。实数声明不能带有范围,默认值为 0。如果将一个实数赋值给一个整数,则只有实数的整数部分会赋值给整数(采用四舍五入)。例如:
real ra ;
integer ib ;
reg [7:0] temp;
 
initial begin
ib=0;
ra = 4e5 ;
#10
ra=8.7; //ra可以真实得到8.7
ib = ra ; //ib=9
#10 ib=8.49; //ib=8
end
 
always@(*)
temp = ib ; //temp 值变化0----9---8
实数类型不是可以综合的类型,一般在高层建模时用做算法仿真。真正在RTL是现实时应用浮点RTL逻辑实现。
  • 整数,实数仿真文件:
`timescale 1ns/1ps module tb_sim(); reg [31:0] a = 0; reg [31:0] b = 0; integer i; always@(*) for (i = 1; i <= 4; i = i + 1) b[(i*8-1)-:8] = a[(i*8-1)-:8]; initial begin a=0; b=0; #10 a=32'habcd_ef98; #10; end //========================================================== real ra; integer ib; reg [7:0] temp; initial begin ib=0; ra = 4e5; #10 ra=8.7; //ra可以真实得到8.7 ib = ra; //ib=9 #10 ib=8.49; //ib=8 #10 ra=8.49; //ra = 8.49 #10 ib=ra; //ib=8 #200; $stop(); end always@(*) temp = ib; //temp 值变化0----9---8 endmodule
  • modelsim下的仿真波形如图1,
 
 
图1
 
3. 时间(time)
Verilog 使用特殊的时间寄存器 time 型变量,对仿真时间进行保存。其宽度一般为 64 bit,通过调用系统函数 $time 获取当前仿真时间。例如:
time current_time ; initial begin #100 ; current_time = $time ;
//current_time 的大小为 100
end
time类型也是不可综合的,但在仿真时可以提高非常方便的时间统计信息。
4. 存储器类型
存储器变量不是一个新的的变量类型,是reg类型的数组。可用来描述 RAM ,ROM ,FIFO等存储器的行为。
例如:
reg membit [0:15] ;
// 15个1bit存储器,位宽1bit
reg [7:0] mem [0:1023];
// 1Kbyte存储器,位宽8bit
mem[0] = 8'b0 ;
// 令第0个8bit的存储单元值为0
存储器赋初值可以用for循环语句实现。目前在
Intel,Xilinx的FPGA中都有block memory, 只要设置得当在综合时会自动引用block memory。
细节内容见 Verilog ROM 的建模与使用及Verilog RAM 的建模与使用。
5. 字符串
字符串保存在 reg 类型的变量中,每个字符占用一个字节(8bit)。因此寄存器变量的宽度应该足够大,以保证不会溢出。
字符串不能多行书写,即字符串中不能包含回车符。如果寄存器变量的宽度大于字符串的大小,则使用 0 来填充左边的空余位;如果寄存器变量的宽度小于字符串大小,则会截去字符串左边多余的数据。例如,为存储字符串 “www.icfedu.cn”, 需要 13*8byte 的存储单元:
  • 实例
reg [0: 13*8-1] str ;
initial
begin
str = “www.icfedu.cn”;
end

Verilog 变量声明与数据类型二的更多相关文章

  1. javascript的变量声明、数据类型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. javascript的变量声明和数据类型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. JavaScript中变量声明以及数据类型

    JavaScript变量 变量名必须以字母或下划线("_")开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做) 变量名称对大小写敏感(y 和 Y 是不同的变量) 变量可 ...

  4. Go 变量及基本数据类型2

    #### Go 变量及基本数据类型(二)今天学习一下基本数据类型,包括整数类型,小数类型,字符类型##### 整数类型用来存放整数数值的, 如0,1,-10,2222等; 整数型的类型有: 类型 有无 ...

  5. java变量的声明和数据类型

    一.关键字 java程序语言的关键字只有53个.具体如下: 访问控制:private.protected.public 修饰类.方法.属性和变量:abstract.class.extends.fina ...

  6. JavaScript 基础 (变量声明, 数据类型, 控制语句)

    创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...

  7. Javascript用途,语法特点,难点,调试工具,引入方式,命名规范,变量声明及赋值,数据类型,运算符

    JavaScript用来干什么 数据的验证 将动态的内容写入到网页当中(ajax) 对事件做出相应 读写html当中的内容 检测浏览器 创建cookies 模拟动画 语法特点 基于对象和事件驱动的松散 ...

  8. devi into python 笔记(二)元组 变量声明 和列表解析

    元组tuple: 类似list,只是tuple是不可变的list.类似java的String都是不可改变的.注意:tuple没有方法(有待考证),不可以像list那样那个list.pop 或者list ...

  9. TypeScript 变量声明(二)

    ES6 中,变量声明一共有6种,分别是var.function .let.const.class和import. let 基本语法:let 变量名 :类型.其中类型不是必须的. 1.用于声明变量,其用 ...

  10. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

随机推荐

  1. Elasticsearch 实战

    需求 假设现在有这么一个需求,系统接了很多的报文,需要提供全文检索,为了简化,报文目前只有类型,流水号,内容这三个字段. 索引设计 建立msg索引,映射规则如下 PUT /msg { "ma ...

  2. 安装nginx依赖库

    nginx安装headers-more-nginx-module,推荐下面这篇贴,步骤简洁明了,本人ubutu18.0.04版本一次性安装成功: https://www.jianshu.com/p/8 ...

  3. 123data路径

    /zhf/Innosky2021/data/dayantahttp://123.xx.xx.147:8888/cesiumdemo/data/dayanta/tileset.json

  4. Java 并发线程池线程数配置

    1. 如果任务是计算密集型的,线程池大小建议设置为Ncpu + 1 其中N是CPU数量, +1 是为了在某一个线程处于暂停阶段时,有新的线程可以用来执行,减少CPU中断时间. 2. 如果是IO密集型, ...

  5. ts的装饰器

    console.log('装饰器.......') // 装饰器就是一个方法,可以注入到类,方法,属性上来拓展类,属性,方法,参数的功能 // 常见:类装饰器,属性装饰器,方法装饰器,参数装饰器 // ...

  6. 使用Visual Studio工具将ActiveX控件的COM类库转换为窗体控件

    1:转换目的 Windows窗体只能继承Windows 窗体控件.如果要承载ActiveX控件,必须生成AxHost派生的包装器控件. 在使用WPF呈现ActiveX控件的时候,需要将com类库(oc ...

  7. 服务器5M带宽下载速计算

    5M贷款的服务器实际下载速度不是5M每秒,而是640KB/S,是由于服务商口中的宽带指的是bit(比特),而下载速度使用的单位是Byte(字节),1Byte(字节)=8bit(比特),所以,宽带和下载 ...

  8. string 字符串模块操作

    1. 常用方法 2.字符串常量 3.字符串模板Template 通过string.Template可以为Python定制字符串的替换标准,下面是具体列子: >>>from strin ...

  9. 实现分页数据请求的思路/Element UI(Plus)的分页模板(Vue3.x写法),(直接使用<script>引入vue.js)

    实现分页数据请求的思路/Element UI(Plus)的分页模板(Vue3.x写法),(直接使用<script>引入vue.js) 1. 效果图: 2.实现分页数据请求的思路:   分页 ...

  10. TinyMapper使用 对象映射框架

    方便的进行对象转换,仅作使用笔记 https://www.cnblogs.com/arvinzhang/p/8282922.html 例子: var result = new List<Equi ...