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

这篇具有很好参考价值的文章主要介绍了07-层次化设计 -- 全加器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.层次化设计

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

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

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

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

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

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

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

1.3 混合设计

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

2.全加器设计

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

2.1 框图和波形

07-层次化设计 -- 全加器
将顶层模块进行继续划分
07-层次化设计 -- 全加器

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
  • 进行代码编译,检查是否出错
  • 需要将子模块和顶层模块都添加到工程当中进行编译
  • 要使用哪个模块实现功能就将哪个模块例化到当前的代码文件中
    07-层次化设计 -- 全加器

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
  • 添加仿真文件进行仿真
    07-层次化设计 -- 全加器

2.4 上板验证

07-层次化设计 -- 全加器
07-层次化设计 -- 全加器
07-层次化设计 -- 全加器文章来源地址https://www.toymoban.com/news/detail-455200.html

到了这里,关于07-层次化设计 -- 全加器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数电实验2】Verilog—汽车流动转向灯电路设计(层次化文件设计)

    【2022.04西南交大数电实验】 

    2024年02月08日
    浏览(30)
  • 实验四 QUARTUS开发环境实验 设计半加器、全加器和四位全加器 blueee的学习笔记

    一、实验目的 1、通过实验,能熟悉QUARTUS开发环境,能够掌握QUARTUS的原理图输入法设计电路,掌握使用相关仿真工具进行功能和时序仿真的方法; 2、通过实验,加深对全加器电路的理解,并能使用QUARTUS的原理图输入法完成全加器的设计,并能在QUARTUS中完成相关的仿真验证

    2024年02月05日
    浏览(54)
  • Verilog设计_全加器

    一种全加器的设计。 目录 一、全加器 二、代码实现 全加器是用门电路实现两个二进制数相加并求和的组合线路,也称为一位全加器,是一种常用的设计。全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器,例如常用的二进制四位

    2024年02月07日
    浏览(34)
  • 一位全加器的设计与实践

    半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路,其真值表如下 也就是说,这个半加器的输出表达式为S=A⊕B,C=AB,逻辑电路图如下 全加器的真值表如下,其中Ain表示被加数,Bin表示加数,Cin表示低位进位,Cout表示高位进位,Sum表示本位和

    2024年02月08日
    浏览(31)
  • 四位全加器的设计与实践

    通过底层逻辑,我们可以通过组建半加器到一位全加器再到四位全加器,四位全加器可以由四个一位全加器构成,加法器之间可以通过串行方式实现。通过将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相连接 每一次新建一个block文件和Verilog文件,编

    2024年02月09日
    浏览(30)
  • FPGA—基于Quartus软件设计全加器

    本篇博客主要是基于Quartus软件件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。 1、半加器 1、定义: 半加器是能够对两个一位的二进制数进行相加得到半加和以及半加进位的组合电路。 2、真值表: A,B表示

    2024年02月06日
    浏览(32)
  • Verilog学习二:设计一个一位全加器

    本部分将不再介绍Vivado工程的整体流程,将主要精力放在代码上面,具体的流程可参考:https://blog.csdn.net/crodemese/article/details/130438348 本部分代码也已上传到github:https://github.com/linxunxr/VerilogStudy 那么什么是全加器呢?我们都知道加法,即1+1=2,当个位数相加大于9时就需要进位。

    2024年02月08日
    浏览(35)
  • 【FPGA】Verilog:模块化组合逻辑电路设计 | 半加器 | 全加器 | 串行加法器 | 子模块 | 主模块

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:加法器   ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月15日
    浏览(34)
  • FPGA编程入门——基于Quartus件完成一个1位全加器的设计

    基于Quartus件完成一个1位全加器的设计,分别采用:1)原理图输入 以及 2)Verilog编程 这两种设计方法。开发板基于Intel DE2-115。 在此基础上,用原理图以及Verilog 编程两种方式,完成4位全加器的设计,对比二者生成的 RTL差别;使用modelsim验证逻辑设计的正确性,并在DE2-115开

    2024年02月05日
    浏览(46)
  • 【Verilog】期末复习——设计带进位输入和输出的8位全加器,包括测试模块

    数值(整数,实数,字符串)与数据类型(wire、reg、mem、parameter) 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分为哪两类?它们各自的特点是什么? 期末复习——VerilogHDL描述数字逻辑电

    2024年01月23日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包