首页 > 技术文章 > Verilog中的符号数运算

huangqiwei 2014-12-19 14:58 原文

语法简述
在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); 
View Code

综合结果如下:

推荐阅读