verilog带符号数运算

Verilog带符号数运算摘要:介绍了Verilog带符号数的不同运算。因为Reg和Wire数据默认情况下是无符号的,而在数据处理的情况下,Verilog既要对带符号数据进行各种运算,也要对无符号数和带符号数进行运算,所以简单使用Verilog提供的运算符是不够的。因此研究不同类型数据运算的通用方法是必要的。关键词:Verilog;带符号数;补码;算术运算中图分类号:TN911?34文献标识码:A文章编号:1004?373X(2015)03?0160?03OperationofnumberswithsymbolsbyVerilogHUIWei?jun,SHENZhao?jun(YanchengInstituteofTechnology,Yancheng224051,China)Abstract:DifferentoperationsofdatawithsymbolsbyVerilogareintroduced.RegandWiredatainthecaseofdefaultisunsigned,butinthecaseofdataprocessing,avarietyofoperationsofdatawithsymbolsareperformedbyVerilog,andtheunsignedandsignedwithnumbersneedtobeprocessed.However,itisnotenoughtousetheoperationsymbolsprovidedbyVerilog.Itisnecessarytoresearchthegeneralmethodforvarioustypesofdataoperation.Keywords:Verilog;numberwithsymbol;twoscomplement;arithmeticoperation0引言Verilog语言是目前流行的一种硬件描述语言。它的最大的优点是简单、规范,语法规则与C语言十分相似。然而,作为一种描述语言,Verilog不具备C语言丰富的数据类型和数据处理能力。Verilog95中能处理带符号数数据类型是整型,而整型的默认位宽是32位,且位宽不能改变,因而限制了整型数的使用。为了解决这个问题,Verilog2001版本增加了对带符号数处理的支持,虽然如此,Verilog对数据处理仍然有很多问题。本文以Verilog2001为版本,重点讨论带符号数的算术运算,并给出Verilog程序和仿真结果,同时,本文也讨论了带符号数的其他运算情况。1加、减运算Verilog2001处理带符号数加减运算很简单,只要在定义数组是使用关键字signed即可:moduleadd_signed(a,b,sum);inputsigned[7:0]a,b;outputsigned[7:0]sum;assignsum=a+b;endmodule仿真结果如图1所示。图1加法仿真结果Verilog处理带符号数和无符号数运算时候,默认是把带符号数转换为无符号数。因此,对于带进位加法或者带借位减法运算,如果不加处理就会发生错误:moduleaddc(a,b,c,sum);inputsigned[7:0]a,b;inputc;outputsigned[8:0]sum;assignsum=a+b+c;endmodule仿真如图2所示,可知结果是错误的,原因是a和b高位扩展加零。改进的方法是把带符号数进行符号扩展:assignsum={a[7],a}+{b[7],b}+c;图2带符号数和无符号数加法仿真错误结果图3所示仿真表明结果是正确的。也可以用系统函数把无符号数转换为带符号数参加运算:assignsum=a+b+$signed(c);所得仿真结果将会相同。不同的是,系统函数$signed不能综合,具有$signed的代码只能用于仿真。图3带符号数和无符号数加法仿真正确结果2乘法运算两个带符号数乘法运算的处理与加法运算相似,只需在定义端口的时候使用关键字signed即可:modulemult(a,b,prod);inputsigned[7:0]a;inputsigned[7:0]b;outputsigned[15:0]prod;assignprod=a*b;endmodule如图4所示的仿真表面结果是正确的。当然,实现一个带符号数和无符号数的乘法的时候,默认是把带符号数高位全部扩展为零,因而,用乘法运算符实现的乘法结果将会是错误的,如图5所示。modulemult(a,b,prod);inputsigned[7:0]a;input[7:0]b;outputsigned[15:0]prod;assignprod=a*b;endmodule图5带符号数与无符号数乘法仿真错误结果解决方法是可以用函数$signed把上述代码中的无符号数b转换为带符号数,此时代码就不可综合。实现通用的两个数乘法的算法,基本的思路是用移位加的方式实现。其算法基础是认为补码是一个权重码,位宽为n的向量存放补码,其MSB的权为[-2n-1,]其他位的权为[2i,]i的取值范围为0≤i≤n-2。当两个位宽为n的数相乘时,从右向左,逐位考察乘数索引为i的位的值,若为1,将被乘数左移i位,作为部分和加到结果中。若乘数最高为位1,因为权为[-2n-1,]所以被乘数要先取反加一,然后再左移n-1位。两个位宽为n的数相乘,...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?