首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

临时需要。希望高手帮助

临时需要。希望高手帮助

本人是菜鸟,基本不会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]

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

“   P<=X*Y;”

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

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

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

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

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

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

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

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类型的数据的符号是

如果处理的。

返回列表