原创 VHDL的有符号运算

2010-6-12 17:12 8346 11 16 分类: FPGA/CPLD
                   

VHDL的有符号整型运算 (by Wind330)

   
最近做了一个色域空间转换的RTL设计,中间有涉及加法、减法、乘法等运算,很好地学了VHDL相关的有符号整型运算。

相关知识

有符号整型运算相关的库是 ieee.numeric_std,相关的数据类型有 signedunsigned,相关的函数有 to_signedto_unsigned。其中函数 to_signed 可以直接把你输入的负数转换为有符号整型。

问题

下面讲述一个我遇到的问题,在设计中我有如下定义:

  signal SignedY    : signed(8 downto 0);
  signal SignedX    : signed(8 downto 0);
  signal SignedZ    : signed(9 downto 0);
  ...
  SignedZ <= SignedX + SignedY;
  ...
当有符号加法器输入SignedX和SignedY分别为'0'&X"01"与'0'&X"FF",SignedZ得到的仿真结果为"11"&X"00",而正确的结果应该是"01"&X"00"。个人认为造成这种结果的原因是仿真器行为,也就是说SignedX与SignedY相加得到一个9-bit的结果,其赋值行为是将9-bit的结果进行符号位扩展后赋于SignedZ,而不是wind330理所当然的认为SignedX与SignedY相加得到一个10-bit的有符号数。

解决办法

把SignedX和SignedY定义为与SignedZ相同的位宽,如下:

  signal SignedY    : signed(9 downto 0);
  signal SignedX    : signed(9 downto 0);
  signal SignedZ    : signed(9 downto 0);
  ...
  SignedZ <= SignedX + SignedY;
  ...

注意

上述的结果都在Modelsim仿真得出,未上FPGA验证。

 

文章评论5条评论)

登录后参与讨论

用户328621 2011-5-10 17:38

您好,我最近在学习VHDL语言,遇到一个问题,如何编写一个程序,实现两个8位二进制数进行卷积运算, 邮箱:ariesfan@163.com 谢谢!

用户1122702 2010-6-22 11:02

这位朋友,有问题可以直接提出,如不方便的话,可以使用“站内短信”功能。

用户1553604 2010-6-21 09:52

求助专业搞FPGA

用户1122702 2010-6-20 21:39

在库numeric_std有定义的,表示有符号向量,注意不能和库std_logic_arith同时使用。

用户1502065 2010-6-20 16:10

signal SignedY : signed(9 downto 0); 其中的signed是什么意思,没见过这种定义。

用户900892 2008-4-7 14:28

小二也玩风筝?? 80到120的我用过,上天一分钟就被撕裂了!再也用不了了/

用户1441679 2008-4-3 21:04

不用啊80-120都有啊

用户900892 2007-6-19 11:35

这个风筝要490块人民币。这是翻滚风筝的入门风筝.

用户1108907 2007-6-9 12:37

请问这个风筝多少钱?
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
我要评论
5
11
关闭 站长推荐上一条 /2 下一条