那些年,我们拿下了FPGA-第8章拿下变量数据类型(2)
- UID
- 824598
|
那些年,我们拿下了FPGA-第8章拿下变量数据类型(2)
Trireg型
此线网存储数值(类似于寄存器),并且用于电容节点的建模,只能用于仿真,不可综合。当三态寄存器(trireg)的所有驱动源都处于高阻态,即值为z时,三态寄存器线网保存作用在线网上的最后一个值,也就是当所有驱动源都处于高阻态时,整个仿真就会暂停。在声明语句中,trireg可以指定处于电容状态下的电荷量强度(small,medium,large)。此外,三态寄存器线网的缺省初始值为x。如:
module trireg_module(
ain, bin, //in
cout //out
);
input ain,bin;
output cout;
trireg (large) cout; //trireg 类型声明
assign cout=ain;
assign cout=bin; //trireg 类型多驱动源
endmodule
综合后会出现下面的错误
对上述模块进行仿真,程序如下:
module trireg_test;
reg ain,bin; // Inputs
wire cout; // Outputs
//实例化模块
trireg_module uuu (
.ain(ain),
.bin(bin),
.cout(cout)
);
initial begin
ain = 0;
bin = 0;
#10;
ain = 0;
bin = 1;
#10;
ain = 0;
bin = 1'bx;
#10;
ain = 0;
bin = 1'bz;
#10;
ain = 1;
bin = 0;
#10;
ain = 1;
bin = 1'bx;
#10;
ain = 1;
bin = 1'bz;
#10;
ain =1'b x;
bin = 1'bx;
#10;
ain = 1'bx;
bin = 1'bz;
#10;
ain = 1'bz;
bin = 1'bz; //仿真停止
#10;
ain = 1'b0;
bin = 1'b0; //没有仿真结果
#10;
$stop; $stop;
end
endmodule
仿真结果如下图:
根据上面的仿真结果可以得出多驱动源时trireg型的真值表:
Trireg
| 0
| 1
| X
| Z
| 0
| 0
| X
| X
| 0
| 1
| X
| 1
| X
| 1
| X
| X
| X
| X
| X
| Z
| 0
| 1
| X
| 最后的状态值
|
tri1, tri0型
这类net型变量可用于线逻辑的建模,不可综合。tri0(tri1)线网的特征是,若无驱动源驱动,它的值为0(tri1的值为1)。
module tri0_test(
ain, bin, cin, din, //in
cout, dout //out
);
input ain,bin,cin,din;
output cout,dout;
tri1 cout; // tri1 类型声明
tri0 dout; // tri0类型声明
assign cout=bin;
assign cout=ain; // tri1 类型多驱动源
assign dout=cin;
assign dout=din; // tri0类型多驱动源
endmodule
仿真结果如上图,cout为tri1型的仿真结果,dout为tri0型的仿真结ain,bin为对应的模块的ain,bin和cin,din输入对。
有仿真结果可以得出多驱动时的真值表:
tri0型真值表
tri0
| 0
| 1
| X
| Z
| 0
| 0
| X
| X
| 0
| 1
| X
| 1
| X
| 1
| X
| X
| X
| X
| X
| Z
| 0
| 1
| X
| 0
|
tri1型真值表
tri1
| 0
| 1
| X
| Z
| 0
| 0
| X
| X
| 0
| 1
| X
| 1
| X
| 1
| X
| X
| X
| X
| X
| Z
| 0
| 1
| X
| 1
|
2.寄存器(Register)类型
寄存器(Register)类型可以暂时存储数据,能保持其值,直到它被赋于新的值,大量应用于行为模型描述及激励描述。寄存器类型主要有reg型,memory型,integer型,real型,time型,realtime型六种大门派。
1.reg型为可定义的无符号整数变量,可以是标量(1位)或矢量,是 最常用的寄存器类型。
2.memory型是通过reg型数据的地址范围生成的,是一个reg型数据的数组。
3.integer型是32位有符号整数变量,算术操作产生二进制补码形式的 结果。它其实与32位的reg型数据是在实际意义上是相同的。但integer型不能作为位向量访问。如:
integer ss;
assign ss[10] = 0; //非法赋值语句
综合以后会出现下面的错误。
4.real型为双精度的带符号浮点变量,用法与integer相同,但不可综合。
5.time型是64位无符号整数变量,用于仿真时间的保存与处理。
6.realtime与real内容一致,但可以用作实数仿真时间的保存与处理。
总之,不管是网络(net)连接类型,还是寄存器(Register)类型,都能变出多种类型,总之变量数据类型是变的。 |
|
|
|
|
|