建议先把课本上的 半加器与全加器理解一下,再来写 半减器和全减器
点这里查看 哔哩哔哩上的视频 《半加器与全加器》(讲得挺清晰的)
点这里查看 哔哩哔哩上的视频 《什么是全减器》(讲得挺清晰的)
文章目录
代码仿真效果
注意:半减器和或门 要放在同一个工程目录下
半减器:
LIBRARY IEEE;--引用库
USE IEEE.STD_LOGIC_1164.ALL;--调用库中的函数
ENTITY h_subter IS--实例化一个半减器
PORT(
A : IN STD_LOGIC;
B : IN STD_LOGIC;
DI : OUT STD_LOGIC;--结果位
BO : OUT STD_LOGIC --借位端
);
END ENTITY h_subter ;--结束实例化
ARCHITECTURE fh1 of h_subter IS --声明一个半减器结构体
BEGIN
DI <= A XOR B ; --A 异或 B
BO <= NOT A AND B;-- 非A 与 B
END ARCHITECTURE fh1;--结束结构体的声明
或门:
LIBRARY IEEE;--引用库
USE IEEE.STD_LOGIC_1164.ALL;--调用库中的程序包
ENTITY or2a IS --实例化 或门
PORT ( a, b : IN STD_LOGIC;
c : OUT STD_LOGIC );
END ENTITY or2a;
ARCHITECTURE one OF or2a IS
BEGIN
c <= a OR b; --c = A | B
END ARCHITECTURE;
全减器:
LIBRARY IEEE; --全减器顶层设计描述
USE IEEE.STD_LOGIC_1164.ALL; --调用库函数中的程序包
ENTITY a_subter IS
PORT ( ain, bin, cin : IN STD_LOGIC;
diff, sub_out : OUT STD_LOGIC );
END ENTITY a_subter;
ARCHITECTURE fd1 OF a_subter IS
COMPONENT h_subter --调用半减器声明语句
PORT ( A, B : IN STD_LOGIC;
DI, BO : OUT STD_LOGIC );
END COMPONENT;
COMPONENT or2a --调用或门声明语句
PORT ( a, b : IN STD_LOGIC; c : OUT STD_LOGIC );
END COMPONENT;
SIGNAL net1, net2, net3 : STD_LOGIC; --定义3个信号作为内部的连接线(看电路图会更加清晰)
BEGIN
u1 : h_subter PORT MAP(A=>ain, B=>bin, DI=>net1, BO=>net2 );--例化语句
u2 : h_subter PORT MAP(A=>net1, B=>cin, DI=>diff, BO=>net3); --简写的语句
sub_out <= net2 or net3;
END ARCHITECTURE;