首页 > 其他分享 >07-层次化设计 -- 全加器

07-层次化设计 -- 全加器

时间:2023-05-22 22:22:46浏览次数:44  
标签:层次化 count 全加器 -- sum wire adder 模块 h0

1.层次化设计

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

1.1 自底向上的设计方法(Bottom-Up)

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

  • 首先对现有的功能块进行分析,只用这些已经存在的模块,搭建比较大的功能块

1.2 自上而下的设计方法(Top-Down)

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

  • 先确定顶层模块
  • 划分子模块
  • 对子模块进行分解
  • 实现最小的模块

1.3 混合设计

2.全加器设计

  • 使用半加器实现一个全加器
  • 使用按键KEY1,KEY2,KEY3表示in_1,in_2,c_in
  • LED1,LED2分别表示sum,c_out

2.1 框图和波形


将顶层模块进行继续划分

2.2 代码编写

  • 顶层模块和子模块放在同一个文件夹下,顶层模块可以例化子模块
module half_adder(
  input wire in_1,
  input wire in_2,

  output wire sum,
  output wire count
);

  assign {count,sum} = in_1 + in_2;
  
endmodule
module full_adder(
  input wire in_1,    // 输入两个加数和一个低位进位
  input wire in_2,
  input wire cin,  
  
  output wire sum,    // 输出和 进位
  output wire count
);

// 例化过程中需要引出的线,单独进行命名
// 第一个半加器的输出 sum -- 顶层没有定义子模块的输出,所以要自己定义


// 声明两个变量,将第一个半加器的输出引出来
// 可以对变量进行重新进行命名
wire h0_sum;
wire h0_count;
// 将第二个半加器的输出引出来
wire h1_count;

half_adder half_adder_inst1(
  .in_1 (in_1),     // 输入in_1 in_2
  .in_2 (in_2),
  .sum  (h0_sum),   // in_1 ^ in_2
  .count (h0_count) // in_1 & in_2
);

half_adder half_adder_inst2(
  .in_1 (cin),    // 输入是第一个半加器的输入和进位
  .in_2 (h0_count), 
  .sum  (sum),    // 输出是 in_1 ^ in_2 ^ cin
  .count (h1_count) // 进位是 (in_1 ^ in_2) & cin + in_1 & in_2 
);

assign count = (h0_count | h1_count);
endmodule
  • 进行代码编译,检查是否出错
  • 需要将子模块和顶层模块都添加到工程当中进行编译

2.3 Testbench

`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: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
  • 添加仿真文件进行仿真

2.4 上板验证



标签:层次化,count,全加器,--,sum,wire,adder,模块,h0
From: https://www.cnblogs.com/Icer-newer/p/17421643.html

相关文章

  • 2023 5 22
    #include<iostream>#include<fstream>#include<string>usingnamespacestd;classDog{public:Dog(){}Dog(intage,intwei){this->m_Age=age;this->m_Wei=wei;}intm_Wei;intm_Age;......
  • 四、Jenkins集成Docker
    重用之前的my_test项目增加Jenkins集成Docker。之前是构建完项目后,上传jar包并执行sh脚本启动jar包。现在是将jar包上传到Docker服务器上,并用Dockerfile构建镜像,启动容器。一、Jenkins新增SSHserver 找到SSHServers:  Jenkins部署在阿里云云主机上,这里用另一台云主机,......
  • JavaScript函数
    1函数定义使用function关键字来定义,即functionfName(para,...){statment;...;},可使用在函数声明语句与函数定义表达式这两种形式中函数名称标识符fName。是函数声明语句必需的部分。它的用途就像变量的名字,新定义的函数对象会赋值给这个变量但对函数定义表达式来说......
  • Qt 的Cmake方式如何创建资源文件和添加类
    CLion(误,QTCreator)添加资源文件时选择Qt然后选择QtResourceFile单击choose,然后给你的资源文件输入一个名字比如res单击下一步,然后完成,保存这时候工程和上面添加类是一样的,看不到添加的资源文件,还是要手动到CMakeList.txt文件在里面手动输入res.qrc然后单击X关掉CMakeList......
  • 《代码大全》读后感2
    第五章软件构建中的设计> 设计的限制:设计是一个“险恶”的问题:只有通过解决或至少部分解决,才能明确地定义它。设计中会有很多错误和修正的过程。设计有诸多限制,要针对限制与需求进行取舍。设计是不确定的,是启发式的过程,是自然而然的。> 管理复杂度:把任何人在同一时间需要......
  • Qt程序打包和发布
    准备工具1、QtCreator,记录QtCreator的安装路径2、NSIS空白脚本程序和NSIS汉化脚本程1Windows下打包与发布1.1打包成zip发布1、通过QtCreatorbuild应用程序,选择Relaeasebuild的应用程序占用空间少(推荐),选择Debugbuild的应用程序占用空间大。2、进入到build产物路径下,......
  • 2023.5.22编程一小时打卡
    一、问题描述:线性代数中的矩阵可以表示为一个row*column的二维数组,当row和column均为1时,退化为一个数,当row为1时,为一个行向量,当column为1时,为一个列向量。建立一个整数矩阵类matrix,其私有数据成员如下:introw;intcolumn;int**mat;建立该整数矩阵类matrix构造函数;建立一个*(......
  • Mac下存储环境变量相关文件
    配置bash首先,说明下MacOS系统的环境变量主要由下面几个文件和文件夹所决定,并且他们的加载顺序如下:/etc/profile/etc/paths/etc/bashrc~/.bash_profile 或 ~/.bashrc ~/.bash_login其中,/etc/profile, /etc/paths, /etc/bashrc 是系统级别配置文件,系统启动就会加载......
  • 力扣---1161. 最大层内元素和
    给你一个二叉树的根节点 root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请返回层内元素之和最大的那几层(可能只有一层)的层号,并返回其中 最小的那个。 示例1:输入:root=[1,7,0,7,-8,null,null]输出:2解释:第1层各元素之和为1,第2层各元素......
  • C++ 手搓 CNN 卷积神经网络
    代码请自取https://github.com/xoslh/CNN-MNIST-CPP-1卷积神经网络-CNN的基本原理​ 卷积神经网络(ConvolutionalNeuralNetworks,CNNs)是一种深度学习算法,特别适用于图像处理和分析。其设计灵感来源于生物学中视觉皮层的机制,是一种强大的特征提取和分类工具。1.1Layers......