文本值和数据类型

文本值和数据类型

文本赋值增强

parameter	SIZE=64reg	[SIZE-1:0] data	;
data = 0;
data = 'bz ;
data = 'bx ;

verilog可以为变量赋全0,全z和全x,但对赋全1很不方便。只能写成如下形式

assign data = 16'hFFFFassign data = ~0//实现全1赋值

SV除了可以像上述实现全0,全x全z外,'b1可以将变量所有位置1.

数据类型

verilog数据类型

reg/integer/time每一位有0、1、z、x四种逻辑

wire/wor/wand等线网类型每一位有120种值(四态逻辑+多个强度级)

SV数据类型

SV使用logic代替reg

logic [63:0] addr	;//64位四态变量
wire logic [63:0] addr	; //64位四态数据类型

bit、byte、shortint、int、longint主要用在更高抽象级。两台类型也可综合,编译器对两态和四态同样对待,但两态会影响仿真。

另外可综合RTL模型中可使用int类型作为for循环的控制变量。

去掉了verilog对wire、reg使用环境的限制,放宽变量应用

module compare(
	output logic lt,eq,gt,
	input	logic	[63:0] a,b);
	
	always @(a,b)
		if(a<b)	lt = 1'b1;
		else	lt = 1'b0;
		
	assign ge = (a>b)	;
	comparator u1(eq,a,b);
endmodule

module	comparator(
	output logic eq ,
	input	[63:0] a, b
);
	always @(a,b)
		eq = (a==b) ;
endmodule

尽管SV对变量应用有所放宽,但一般还是不允许出现多驱情况,一个变量只能有一个源。

强制类型转换

7+int`(2.0*3.2)//将2.0*3.0结果转换为整型
logic [15:0] a,b,y ;
y=a+b**16`(2)//将文本值2强制转换为16位宽
y=y-signed`({a,b});//将拼接结果强制转换为有符号值

数据类型转换

静态强制转换

可以强制转换,但如果出错工具无法检查。比如s3+1就会超出states_t的范围

typedef enum {s1,s2,s3} states_t;
states_t state,next_state;
always_comb begin
    if(state !=s3)
		next_state = states_t`(state+1);
	else
		next_state = s1;
end

动态强制类型转换

int radius,area;
always @(posedge clock)
	$cast(area,3.154*radius**2);
typedef enum {s1,s2,s3} states_t ;
states_t state,next_state ;
always_latch begin
	$cast(next_state,state+1);
end

转换失败会报错。

静态转换可综合,但综合工具可能不支持动态地$cast。

常数

const logic [23:0] C1 = 7;//24位常数
const int C2 = 15 ; // 32位常数
const real C3 = 3.14 //实数常数
const C4 = 5 //错误声明
posted @   骑猪上树的少年  阅读(155)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
回到顶部
点击右上角即可分享
微信分享提示

目录导航