1 / 13
文档名称:

verilog带符号数运算.doc

格式:doc   大小:29KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

verilog带符号数运算.doc

上传人:992006838 2020/8/27 文件大小:29 KB

下载得到文件列表

verilog带符号数运算.doc

相关文档

文档介绍

文档介绍:Verilog带符号数运算摘要:介绍了Verilog带符号数的不同运算。因为Reg和Wire数据默认情况下是无符号的,而在数据处理的情况下,Verilog既要对带符号数据进行各种运算,也要对无符号数和带符号数进行运算,所以简单使用Verilog提供的运算符是不够的。因此研究不同类型数据运算的通用方法是必要的。关键词:Verilog;带符号数;补码;算术运算中图分类号:TN911?34文献标识码:A文章编号:1004?373X(2015)03?0160?03 OperationofnumberswithsymbolsbyVerilog HUIWei?jun,SHENZhao?jun (YanchengInstituteofTechnology,Yancheng224051,China) Abstract:,butinthecaseofdataprocessing,avarietyofoperationsofdatawithsymbolsareperformedbyVerilog,,. Keywords:Verilog;numberwithsymbol;plement;arithmeticoperation 0引言 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