微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 乘法器问题 高手指点

乘法器问题 高手指点

时间:10-02 整理:3721RD 点击:
乘法器代码如下:
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,

进位被抛弃了
temp1 = "1011",temp2 = "10110", (temp1 + temp2)本应为"100001",但仿真工具将(temp1 + temp2)设为和temp2位宽一致,故实际结果为"00001",将最高位抛弃了,你可以将temp1、te'mp2。temp3和temp4的位宽都设为8位,或者在相加时补足8位就不会出现这个问题

谢谢楼上的朋友

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top