当前位置:首页 > FPGA > 正文内容

全加器(层次化设计)

浩雨2年前 (2022-08-14)FPGA2841

该篇博客根据上一篇半加器的设计,再结合层次化的设计思想来实现一个全加器!


层次化设计理论部分:

数字电路中根据模块层次的不同有两种基本的结构设计方法:自底向上的设计方法 和 自顶向下的设计方法


自底向上(Bottom-Up)

        自底向上的设计是一种传统的设计方法,对设计进行逐次划分的过程是从存在的基本单元出发的,由基本单元构建高层单元,依次向上,直至构建系统,

image.png

自上而下(Top-Down)

        从系统级开始,把系统分为基本单元,然后再把每个单元划分为下一层次的基本单元,一直这样做下去,直到直接可以用EDA元件库中的原件来实现为止。

image.png

混合使用

image.png


全加器设计:

全加器模块框图:

image.png

层次化设计 -- 用两个半加器组成的全加器模块框图:

image.png

代码部分:

选择器代码:在Src文件夹中新建 full_adder.v文件

module full_adder
(
    input   wire  in_1,
    input   wire  in_2,
    input   wire  cin,
    output  wire  sum,
    output  wire  count
);
// 对变量进行重新命名,为了区分来自于哪个半加器
wire    h0_sum;
wire    h0_count;
wire    h1_count;
half_adder half_adder_inst0
(
    .in_1 (in_1),
    .in_2 (in_2),
    .sum  (h0_sum),
    .count(h0_count)
);
half_adder half_adder_inst1
(
    .in_1 (cin),
    .in_2 (h0_sum),
    .sum  (sum),
    .count(h1_count)
);
assign count = (h0_count | h1_count);
endmodule

仿真文件代码:在Sim文件夹中新建 tb_full_adder.v文件

`timescale 1ns/1ns
module tb_full_adder();
reg    in_1 ;
reg    in_2 ;
reg    cin  ;
wire   sum  ;
wire   count;
initial
    begin
        in_1    <=  1'b0 ;
        in_2    <=  1'b0 ;
        cin     <=  1'b0 ;
    end
initial
    begin
        $timeformat(-9,0,"ns",6);
        $monitor("@time %t:in_1=%b,in_2=%b,cin+%b,sum=%b,count=%b", $time, in_1, in_2, cin, sum, count);
    end
always #10 in_1 <= {$random} % 2;
always #10 in_2 <= {$random} % 2;
always #10 cin  <= {$random} % 2;
full_adder full_adder_inst
(
    .in_1 (in_1),
    .in_2 (in_2),
    .cin  (cin),
    .sum  (sum),
    .count(count)
);
endmodule

结果:

打印的日志正常

image.png

波形也正常

image.png

扫描二维码推送至手机访问。

版权声明:本文由我的FPGA发布,如需转载请注明出处。

本文链接:https://myfpga.cn/index.php/post/258.html

分享给朋友:

“全加器(层次化设计)” 的相关文章

FPGA ALARM FPGA多功能闹钟 完整项目 内含上位机

FPGA ALARM FPGA多功能闹钟 完整项目 内含上位机

一、项目简述本项目使用苏州硬禾信息科技有限公司设计的小脚丫FPGA开发板设计了一个完成定时、测温、报警、控制的小项目,并通过上位机显示、下发音乐配置数据。本项目B站介绍:https://www.bilibili.com/video/BV1Vh411k7QV/二、研究进展(一)研究内容:l ...

ALGO C4MB V11引脚参照表(持续更新)

ALGO C4MB V11引脚参照表(持续更新)

功能:常用引脚CLKPIN_E1LED0PIN_G15LED1PIN_F16LED2PIN_F15LED3PIN_D16KEY1PIN_E15KEY2PIN_E16KEY3PIN_M15KEY4PIN_M16RXDPIN_M2TXDPIN_G1功能:VGA引脚VGA_BLUE[0]PIN_C15VG...

基础实验十三,DS18B20温度传感器

基础实验十三,DS18B20温度传感器

//==========================================================================// Author     : ChanRa1n// Description: Training for Intel FPGA/...

SOC 在线修改设备树和FPGA配置文件 并在线配置FPGA

SOC 在线修改设备树和FPGA配置文件 并在线配置FPGA

测试过的平台:     1、DE-10 Cyclone V开发板              ...

Verilog实现串并转换

Verilog实现串并转换

项目文件:SIPO.zip//------------------------------------------------------// File Name        : SIPO.v// Author       &n...

多路选择器

多路选择器

多路选择器:在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路。二选一多路选择器 --- 模块框图in_1:输入信号in_2:输入信号sel:控制选择信号out:输出信号二选一多路选择器 --- 波形图in_1、in_2、sel 的波形是随机的。out 的波形根据控制选通信号而定。当 se...