eda相关的vhdl

2025-02-24 08:22:05
推荐回答(1个)
回答1:

-----------------------------------------------
方案一
------------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY add IS
PORT( A: IN STD_LOGIC;--被加数A
B: IN STD_LOGIC;--被加数B
S: OUT STD_LOGIC;--相加的和S
C: OUT STD_LOGIC);--相加产生的进位C
END ENTITY add;
ARCHITECTURE ART OF add IS
BEGIN
S<=A xor B;--二数相加
C<=A and B;--相加后的进位
END ARCHITECTURE ART;
----------------------------------
程序说明
----------------------------------
半加器真值表如下
输入 输出
A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
-----------------------------
半加器不考虑低位向本位的进位,因此它有两个输入端和两个输出
设加数(输入端)为A、B ;和为S ;向高位的进位为C
函数的逻辑表达式为: S=AB+AB ; C=AB;
等同于: S=A XOR B;C=A AND B;
-------------------------------------------
方案二
-------------------------------------------
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY add IS
PORT(
A: IN STD_LOGIC);--被加数A
B: IN STD_LOGIC;--被加数B
S: OUT STD_LOGIC;--相加的和S
C: OUT STD_LOGIC);--相加产生的进位C
END ENTITY add;
ARCHITECTURE ART OF add IS
SIGNAL S2: STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL A2,B2: STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
A2<='0'&A;--扩展被加数A高位为0
B2<='0'&B;--扩展被加数B高位为0
S2<=A2+B2;--二数相加
S<=S2(0);--相加和的结果
C<=S2(1);--相加后的进位
END ARCHITECTURE ART;
----------------------------------
如下举例说明
----------------------------------
设A=1,B=1,
则 0 1
+ 0 1
-------------------------
1 0
S=0,C=1;
(注:把A、B扩展成2位是为了保留相加后的进位)
----------------------------------
可以在参看四位加法器,原理是一样的:http://zhidao.baidu.com/question/262736966.html