verilog基础:数据类型定义

Verilog中的数据类型包括nettypes和variabletypes。nettypes如wire、tri、supply用于描述组件间的连接,而variabletypes如reg用于存储值。wire是最常用的数据类型,reg则常在always块中用于组合逻辑建模。此外,还包括整数和实数类型,以及数组类型来处理多元素数据。
摘要由CSDN通过智能技术生成

verilog中的数据类型大体可以分成net types和variable types。在verilog中的数据表示如下形式:

<bits>'<representation><value>

比如说4'b0001表示这个数据定义为四位宽,二进制类型,除此之外还可以定义为16进制4'h1,八进制4'01,十进制4'd1,除了这些常见数据之外,verilog还有两个特殊变量:'x'和'z','x'表示的是未知数据,'z'表示的是设置为高阻态,数据定义方法跟其他一样:4'bx。下面讲述数据类型

  1. net type

net数据用来描述不同组件之间的物理联系,本身不能用于存储数据或者驱动数据,通常使用assign来将数据复制到到线上,比如说:

assign a=1'b1;

wire

最常用的数据类型,我们使用线网类型来声明信号,这些信号是我们设计中非常基本的点对点连接,可以理解为电路中导线。

wire a;

assign a=1'b1;

wor&wand

这个类型的是将基本逻辑门插入电路,wor是逻辑或门,wand是逻辑与门,在我们使用这个类型的时候我们必须多次分配信号。我们这样做是因为每个赋值代表底层逻辑门的一个输入。我们可以很容易地在verilog中使用线类型来建模组合逻辑。因此,不建议使用wor和wand类型。

wor a;

wand b;

wire c,d;

//c也创建或门

assign a=c;

//d创建与门

assign b=d;

tri,triand,trior

使用这些类型的方式与wire、wor和wand类型完全相同。事实上,这些类型的功能完全相同。然而,我们可以使用它们来更清楚地显示我们的设计意图,verilog设计中也可以很容易地使用wire类型来表示它们的功能,不经常用。

tri a;

assign tri=1'bz;

suppy0 & supply1

我们可以使用这些类型将信号绑定到二进制1或0的常量值。由于这会产生一个与接地或Vcc相连的网络,因此我们不需要为这种类型分配数据,也能用wire来实现。

supply0 a;// assign a=0;

supply1 b;//b=1;

  1. variable type

我们在verilog中使用variable类型来存储值。当我们为变量类型赋值时,它会保持该值,直到再次赋值。

reg

verilog中最常用的变量类型是reg类型。每当需要在设计中存储值时,我们都可以使用此类型,用于对verilog中的组合逻辑进行建模。我们需要在always模块下使用赋值。

reg a;

always@(posedge clk)begin//时钟过后触发a

a<=b;

end

numeric variable type

verilog有两种常见的数字类型,整形和实型,出这两种之外的类型都用于单个数据位。

integer type

整数类型,是一个32位的2s补码数,可以用来表示verilog中任何整数,当我们使用整数类型时,我们为变量分配数值而不是二进制值,我们通常在verilog中使用整数作为常量或循环变量。

integer i;

for(i=0;i<=32;i=i+1)begin

a<=1;

end

real type

除了整数类型,我们还可以在verilog中使用实数类型。我们使用这种类型来存储非整数,即也有小数部分的数字。实数类型通常在verilog中实现为64位浮点数。因此,它不能直接合成,我们通常只在verilog的testbench使用真实类型,我们可以使用十进制或科学记数法为实数类型赋值。

real a;

a=2.5;

#1000

a=1e-3;

除了numerical type,所有的类型都是一个数据位宽我们在verilog中也可以通过数据总线来传输数据,因此可以定义数据位宽。size是[位宽-1:0]/[位宽:1]表示几个位宽

<type><size><variable_name>

reg [3:0] a;//a为4位宽

always@(posedge clk)begin

a<=4'b1010;

//a<=4'ha;//16进制

end

  1. 数组

我们还可以在verilog中创建和使用数组类型,我们只需在变量名后面添加一个额外的字段,该字段声明数组中有多少元素。<elements>字段来声明数组的大小。

<type><size><variable_name><elements>

reg [2:0] a [7:0];//3位宽的数组,数组中有8个元素

我们可以使用方括号访问数组类型中的各个元素。例如,下面的verilog代码显示了如何将5h值分配给示例数组中的最后一个元素。

a[7] =3'h5;

参考:An Introduction to Verilog Data Types and Arrays - FPGA Tutorial

这是个好网站!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值