问答题 写出上例余3码加法器的VHDL程序。
【正确答案】根据上题解题思路设计的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;
【答案解析】