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. 动手学强化学习 第二章 多臂tiger机问题 阅读笔记

    第二章 多臂tiger机问题 第一节 简介 强化学习是一种试错型学习范式. 第二节 问题介绍 多臂tiger机(multi-armed bandit,MAB)不存在状态信息,只有动作和奖励.有一个拥有 ...

  2. vue页面点击按钮增加和删除标签

    1.在data()里定义一个空数组: conditions:[], 2.给数组一个容器,并且遍历数组 <div v-for="item in conditions">& ...

  3. 谷歌Chrome浏览器网页中看视频出现绿屏、闪烁和花屏等显示问题解决方法

    方法一(推荐): 1.在chrome地址栏输入chrome://flags/2.搜索Hardware-accelerated video encode把Enabled改成Disabled 3.搜索Ha ...

  4. saml login的流程

    用户会访问首页/, 然后进入到指定的一个URL, 就是admin在site-settings里面的设置的那个地址, 发现权限不够,进入到403accesslogin, 然后调用user4032logi ...

  5. Verilog仿真遇到的问题

    1.Vivado 15.4仿真时编译没有报错,但是仿真不成功,逻辑很简单,full为高电平时,rd_en要拉高,但全程没有拉高! 检查语法发现语句" else if( empty == 'b ...

  6. TPM 2.0 - could not load "libtss2-tcti-tabrmd.so.0"

    报错: TPM 2.0 - could not load "libtss2-tcti-tabrmd.so.0" 解决:sudo apt install libtss2-tcti-t ...

  7. Demo of canvas, canvas optimization and svg

    It used the canvas to draw the curves in the old project, and the client felt that it was vague, so ...

  8. 【STM32】电能表抄表功能实现|自学笔记

    一.抄表的原理 抄表就是读电能表的测量参数,一般有电能,电压,电流,实时功率,功率因数等,用单板抄表其实就是读电能表种相应寄存器中的值.智能电表目前主流协议有DLT645国标各家通用,MODBUS各家 ...

  9. DIV CSS遮罩层(弹窗窗口)

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

  10. CF1786E题解

    容易为本题的弱化版CF1786C想出一个贪心: #include<bits/stdc++.h> using namespace std; #define int long long int ...