当前位置: 首页 > news >正文

verilog HDLBits刷题“Module addsub”--模块 addsub---加法器-减法器

一、题目

可以通过选择性地否定其中一个 inputs,从 adder 构建 adder-subtractor,这相当于反转 input 然后加 1。最终结果是一个可以执行两个作的电路:(a + b + 0) 和 (a + ~b + 1)。如果您想更详细地解释此电路的工作原理,请参阅 Wikipedia。

在下面构建 adder-subtractor。

你得到了一个 16 位的 adder 模块,你需要实例化它两次:

module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );

当 sub 为 1 时,使用 32 位宽的 XOR 门反转 b 输入。(这也可以看作是 b[31:0] XOR 和 sub 复制 32 次。看复制作员.).还将 sub input 连接到 adder 的 carry-in。

 

模块声明

module top_module(input [31:0] a,input [31:0] b,input sub,output [31:0] sum
);

二、分析

实现32位加减法,输入sub确定加减

1、未知的线命名为b_mid,c_mid;

2、计算b与sub的异或;

3、例化两个16位加法器。 

三、代码实现

module top_module(input [31:0] a,input [31:0] b,input sub,output [31:0] sum
);wire c_mid;wire [31:0]b_mid;assign b_mid=b^{32{sub}};add16 inst1(.a(a[15:0]),.b(b_mid[15:0]),.cin(sub),.cout(c_mid),.sum(sum[15:0]));add16 inst2(.a(a[31:16]),.b(b_mid[31:16]),.cin(c_mid),.cout(),.sum(sum[31:16]));endmodule

四、时序结果

 

http://www.lqws.cn/news/468469.html

相关文章:

  • leetcode 3085. 成为 K 特殊字符串需要删除的最少字符数 中等
  • 实现自动化资源调度与弹性伸缩
  • AWS RDS/Aurora 开启 Database Insights 高级模式全攻略
  • Android 终端模拟器 termux app
  • C++ 第一阶段项目二:温度转换工具
  • ubuntu24.4 + ros2 jazzy 安装gazebo
  • 冰箱压缩机电机驱动板【IPM部分】
  • 【StarRocks系列】建表优化
  • Kettle数据抽取(五)转换控件
  • 《map和set的使用介绍》
  • C#测试调用ClosedXML根据批注设置excel单元格内容
  • 细节/数学/滑动窗口
  • Nginx+tomcat集群
  • 多头注意力机制中全连接函数
  • 成长笔记——多串口发送与接收
  • 面试题-函数类型的重载是啥意思
  • Qt + C++ 入门2(界面的知识点)
  • 吐槽之前后端合作开发
  • FastAPI框架的10个重要知识点总结
  • Typora文档另存与图片迁移的一种思路
  • VR飞夺泸定桥沉浸式历史再现​
  • [C++] STL数据结构小结
  • Linux - 安装 git(sudo apt-get)
  • WPF Style样式 全局样式资源字典
  • Qt/C++应用:防御性编程完全指南
  • leetcode332.重新安排行程:优先队列与DFS实现欧拉路径的行程规划
  • 【智能体】n8n聊天获取链接后爬虫知乎
  • 108. 将有序数组转换为二叉搜索树
  • Vue.js核心概念与实践指南:从实例绑定到数据代理
  • opencv try-catch