Board logo

标题: 临时需要。希望高手帮助 [打印本页]

作者: zhuaitongzai    时间: 2007-9-13 23:50     标题: 临时需要。希望高手帮助

本人是菜鸟,基本不会VHDL,希望用VHDL编一个ALU。

其功能能实现加,减,乘,与,或运算。输入数据的格式

为定点补码表示法,字长为8位,其中最高位(第七位)为符号位。

小数点位定在符号位后面,其格式如下

7            6   5  4  3  2  1  0

-----------------

| 符号 |   尾数|

------------------

相对于十进制数表示范围为:-1<=X<=1-2-7

对于结果有进位的应该保存

对于一个8*8的无符号乘法VHDL程序应该为

--------------------------------------------------

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

entity vmul8x8i is

 port(

      X:in UNSIGNED (7 downto 0);

     Y:in UNSIGNED(7 downto 0);

      Put  UNSIGNED(15 downto 0);

);

end vmul8x8i;

architecture vmul8*8i_arch of vmul8x8i is

begin

   P<=X*Y;

end vmul8x8i_arch;

--------------------------------------------------------

那么对于该数据格式的定点补码表示的数据乘法,这个应该怎么改呢?

另外还需要保存进位输出。

[em06]


作者: zhuaitongzai    时间: 2007-9-14 00:56

对于其他的运算,The operation to perform is determined by the 3-bit address bus


作者: caopengly    时间: 2007-9-14 22:24

“   P<=X*Y;”

vhdl不能这样乘,没有乘法指令。

你要实现一个alu不是一件简单的事,一般可以做本科毕业设计了。而你的路还很长。

乘法需要你用数字电路来实现,当然还要有机器码译指,执行等,相当于小型cpu。


作者: zhuaitongzai    时间: 2007-9-15 11:36

不是这样的吧,IEEE std_logic_arith库定义有乘法函数,适用于SIGNED和UNSIGNED类型

,这些函数直接用“*”操作。该乘法函数是利用移位-累加算法进行定义的


作者: zhuaitongzai    时间: 2007-9-15 11:48

刚编译通过,上面的代码似乎有点问题,修改后应该是

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use IEEE.std_logic_unsigned.all;

entity vmul8x8i is

 port(

      X:in UNSIGNED (7 downto 0);

     Y:in UNSIGNED(7 downto 0);

      Put  UNSIGNED(15 downto 0)

);

end vmul8x8i;


architecture vmul8x8i_arch of vmul8x8i is

begin

   P<=X*Y;

end vmul8x8i_arch;

因为是定点小数,而且几乎没牵扯到整数位,那么是不是可以当作整数处理呢?

至于符号位,就另外考虑。我不知道该库函数对于SIGNED类型的数据的符号是

如果处理的。






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0