【正确答案】根据上题解题思路设计的VHDL程序如下:
LIBRARY ieee;
USE ieee.Std_logic_1164.ALL;
USE ieee.Std_logic_arith.ALL;
USE ieee.Std_logic_unsigned.ALL;
ENTlTY xiti435a 1S
PORT(a,b:IN Std_logic_vector(3 downto 0);co:OUT Std_logic;sum:OUT Std_logic_vector(3 downto 0));
END xiti435a:
ARCHITECTURE xiti435a_ar OF xiti435a IS
SIGNAL m1.m2:Integer range 255 downto 0;
SIGNAL n1.n2:Integer range 15 downto 0;
SIGNAL q:Std_logic_vector(4 downto 0);
SIGNAL P:Std_logic_vector(4 downto 0);
BEGIN
n1<=CONV_INTEGER(a);n2<=CONV_INTEGER(b);一一向量类型转整数类型
m1<=n1+n2;
q<=CONV_STD_LOGIC_VECTOR(m1,5);——整数类型转向量类型
co<=q(4); ——进位输出
PROCESS(n1.n2)
BEGIN
IF m1<=15 THEN
m2<=m1+13; ——补码加法
ELSE
m2<=m1+3:
END IF:
p<=CONC_STD_LOGIC_VECTOR(m2,5);——整数类型转向量类型
sum<=p (3 downto 0); ——本位和输出
END PROCESS:
END xiti435a_ar;
在VHDL程序中,可以不将减法运算变成补码加法运算,直接进行减法运算,上面的VHDL程序的结构体可改为
ARCHITECTURE xiti435b_ar OF xiti435b IS
SIGNAL m1,m2:Integer range 255 downto 0;
SIGNAL n1,n2:Integer range 15 downto 0;
SIGNAL P:Std_logic_vector(4 downto 0);
BEGIN
n1<=CONV_INTEGER(a);n2<=CONV_INTEGER(b);m1<=n1+n2;
PROCESS(n1.n2)
BIGIN
IF m1<=15 THEN
m2<=m1-3; ——直接进行减法运算
ELSE
m2<=m1+3;
END IF;
D<=CONV_STD_LOGIC_VECTOR(m2,5);
CO<=p(4);sum<=p(3 downto 0);
END PROCESS;
END xiti435b_ar;
【答案解析】