3.1 一位全加器设计3.1.1 基本的输入方式
对于一位全加器,下面只给出相应的实现方式,以及其中比较特殊的需要说明的地方,其它的编译和仿真过程可以参考一位半加器。
1. 原理图输入方式1. 层次化原理图输入方式
根据图 3-2 可知,一位全加器可以由两个一位半加器外加一个两输入的或门来实现,下
面介绍如何实现这种层次化的设计。
1) 在半加器 h_add 工程中打开一个半加器设计文件(vhdl,原理图均可),然后选择File-Create/Update-Create Symbol Filesfor Current File 为当前的半加器创建 symbol 符号,弹出的保存 symbol 文件的窗口,选择默认设置点击确定。
2) 新建一个原理图,在空白处双击添加两个半加器符号(如图 3-71 所示)和一个或门,并按连好(如图 3-72 所示),以 f_add_1 为名保存原理图文件。1. VHDL 语 言 输 入VHDL 语言描述设计通常有三种描述方式:数据流描述、行为描述和结构体描述。数据流描述是指用逻辑表达式的方式描述设计,这一描述最接近底层的逻辑电路实现。行为描述是指在算法的层次对设计进行描述,较数据流描述更抽象,只关心设计功能的描述而忽略底层逻辑电路的实现。结构体描述是指利用层次化设计方法,用现有的设计生成component 组件, 以便于在设计中调用。下面用一位全加器的 VHDL 为例,给出三种不同的描述方式。
首先新建一个 VHDL 文件,选择 File-New,如图 3-73 所示。<instance_name>组件例化名称,此处需要例化两个半加器,依次取名为h_add1 和h_add2;
<component_name> 使用的组件名称,此处为使用的组件 h_add_vhd; generic map 对使用组件中的类属性进行配置,此处无;
port map 对管脚进行映射,主要是给出例化组件的管脚和外部管脚的连接情况,具体可见图 3-83,此处请深入理解管脚映射中的管脚连接情况,并注意图中信号S1、CO1 和 CO2 是中间连线。
最终的两个例化组件语句修改如下:
h_add1: h_add_vhd port map
(
A => A, B=> B, S => S1,
CO => CO1
);
h_add2 : h_add_vhd
port map (
A => S1, B => CIN, S => S,
CO => CO2
);
最后添加进位赋值语句:
CO <= CO1 or CO2;小结:
1) 三种结构体描述方式最终的technology map 视图图 3-77、图3-79 和图3-84 是一致的,
而有差别的是RTL 视图图 3-76、图 3-78 和图 3-83;
2) technology map 视图一致说明三种全加器描述方式最终的硬件实现是一致的—均是使用两个 LUT 分别计算 S 和 CO;
3) RTL 视图不一致说明三种全加器采用的描述方式不一致,即算法不一样。
4) 通过这个全加器的例子,大家不仅对结构体的数据流描述、行为描述和结构化描述有深入的理解,也对RTL 视图和 technology map 视图有进一步的体会。
1. 全加器的 IP 核实现
此处可以参照半加器的IP核实现进行,注意图 3-85 所示的设置,最终的原理图如图 3-86
所示。
|