在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1659|回复: 2

乘法器问题 高手指点

[复制链接]
发表于 2007-9-14 16:53:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
乘法器代码如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity multi_4 is
port(x,y:in std_logic_vector(3 downto 0);
put std_logic_vector(7 downto 0));
end multi_4;
architecture ach of multi_4 is
signal temp1: std_logic_vector(3 downto 0);
signal temp2: std_logic_vector(4 downto 0);
signal temp3: std_logic_vector(5 downto 0);
signal temp4: std_logic_vector(6 downto 0);
begin
--process(x,y)
--begin
temp1<= x when y(0)='1' else "0000";
temp2<= (x(3 downto 0)&'0') when y(1)='1' else "00000";
temp3<= (x(3 downto 0)&"00") when y(2)='1' else "000000";
temp4<= (x(3 downto 0)&"000") when y(3)='1' else "0000000";
p<=temp1+temp2+temp3+('0'&temp4);
--end process;
end ach;

为什么当x*y值大于32家计算不正确了?总是和正确积相差32
譬如x=3,y=11,
应该计算结果p=33;
而仿真结果p=1,
发表于 2007-9-14 18:04:46 | 显示全部楼层

进位被抛弃了

temp1 = "1011",temp2 = "10110", (temp1 + temp2)本应为"100001",但仿真工具将(temp1 + temp2)设为和temp2位宽一致,故实际结果为"00001",将最高位抛弃了,你可以将temp1、te'mp2。temp3和temp4的位宽都设为8位,或者在相加时补足8位就不会出现这个问题
 楼主| 发表于 2007-9-14 21:58:05 | 显示全部楼层
谢谢楼上的朋友
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 05:27 , Processed in 0.018371 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表