本人是菜鸟,基本不会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。
不是这样的吧,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类型的数据的符号是
如果处理的。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |