语法简述
在Verilog-1995中,只有integer数据类型被转移成有符号数,而reg和wire数据类型则被转移成无符号数。由于integer类型有固定的32位宽,因此它不太灵活。
在Verilog-2001中,有符号形式也被扩展到reg和wire数据类型中。新加一个关键字,signed,可以按照下面的方式定义:
reg signed[7:0] test;
wire signed[7:0] test_w;
下面是一些有符号计算以及赋值语句实例:
可见,在进行有符号运算时,表达式中的变量均应为有符号数,且常数不能限定长度,否则进行无符号运算。
Quartus ii 对有符号运算的综合
在对有符号数进行除二运算时,若不对除数8'd2进行有符号转换,则综合结果是简单的移位运算,而如果对8'd2进行有符号转换,则综合器会由加法器来构成有符号运算电路,详见以下实例。
1 module divid ( 2 input signed[7:0]a, 3 output signed[7:0]c, 4 output signed[7:0]d 5 ); 6 assign c = a/$signed(8'd2); 7 assign d = a/(8'd2);
综合结果如下: