码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Verilog基础】8.加法器


    半加器

    半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路。

    1. module half_add4(a,b,sum,cout);
    2. input a,b;
    3. output sum,cout;
    4. reg sum,cout;
    5. always @(a or b)
    6. begin
    7. sum= a^b;
    8. cout=a&b;
    9. end
    10. endmodule

    全加器

    1. module full_add3(a,b,cin,sum,cout);
    2. input a,b,cin;
    3. output sum,cout;
    4. assign {cout,sum}=a+b+cin;
    5. endmodule

    8 位并行加法器

    1. module add_bx(cout,sum,a,b,cin);
    2. output[7:0] sum;
    3. output cout;
    4. input[7:0] a,b;
    5. input cin;
    6. assign {cout,sum}=a+b+cin;
    7. endmodule

    8 位超前进位加法器

    1. module add_ahead(sum,cout,a,b,cin);
    2. output[7:0] sum;
    3. output cout;
    4. input[7:0] a,b;
    5. input cin;
    6. wire[7:0] G,P;
    7. wire[7:0] C,sum;
    8. assign G[0]=a[0]&b[0]; //产生第 0 位本位值和进位值
    9. assign P[0]=a[0]|b[0];
    10. assign C[0]=cin;
    11. assign sum[0]=G[0]^P[0]^C[0];
    12. assign G[1]=a[1]&b[1]; //产生第 1 位本位值和进位值
    13. assign P[1]=a[1]|b[1];
    14. assign C[1]=G[0]|(P[0]&cin);
    15. assign sum[1]=G[1]^P[1]^C[1];
    16. assign G[2]=a[2]&b[2]; //产生第 2 位本位值和进位值
    17. assign P[2]=a[2]|b[2];
    18. assign C[2]=G[1]|(P[1]&C[1]);
    19. assign sum[2]=G[2]^P[2]^C[2];
    20. assign G[3]=a[3]&b[3]; //产生第 3 位本位值和进位值
    21. assign P[3]=a[3]|b[3];
    22. assign C[3]=G[2]|(P[2]&C[2]);
    23. assign sum[3]=G[3]^P[3]^C[3];
    24. assign G[4]=a[4]&b[4]; //产生第 4 位本位值和进位值
    25. assign P[4]=a[4]|b[4];
    26. assign C[4]=G[3]|(P[3]&C[3]);
    27. assign sum[4]=G[2]^P[2]^C[2];
    28. assign G[5]=a[5]&b[5]; //产生第 5 位本位值和进位值
    29. assign P[5]=a[5]|b[5];
    30. assign C[5]=G[4]|(P[4]&C[4]);
    31. assign sum[5]=G[5]^P[5]^C[5];
    32. assign G[6]=a[6]&b[6]; //产生第 6 位本位值和进位值
    33. assign P[6]=a[6]|b[6];
    34. assign C[6]=G[5]|(P[5]&C[5]);
    35. assign sum[6]=G[6]^P[6]^C[6];
    36. assign G[7]=a[7]&b[7]; //产生第 7 位本位值和进位值
    37. assign P[7]=a[7]|b[7];
    38. assign C[7]=G[6]|(P[6]&C[6]);
    39. assign sum[7]=G[7]^P[7]^C[7];
    40. assign cout=G[7]|(P[7]&C[7]); //产生最高位进位输出
    41. endmodule

    半减器

    1. module half_sub(dout,cout,a,b);
    2. output dout,cout; //差位、借位
    3. input a,b; //被减数、减数
    4. reg dout,cout;
    5. always @(*)
    6. begin
    7. dout=a^b;
    8. cout=(~a)&b;
    9. end
    10. endmodule

    减法器-带借位

    1. module sub(dout,cout,a,b,ci);
    2. output dout,cout; //差值、借位
    3. input a,b,ci; //被减数、减数、低位借位
    4. assign dout=a^b^ci;
    5. assign cout=(~a&b) |(~a&ci) |(~b&ci)
    6. endmodule

    减法器的原理,门电路可以参考:【HDL系列】半减器、全减器和减法器原理和设计_纸上谈芯的博客-CSDN博客_半减器的逻辑表达式和真值表

  • 相关阅读:
    20230830比赛总结
    基于Basic auth 的一个C# 示例
    Java-API简析_java.util.Scanner类(基于 Latest JDK)(浅析源码)
    Bayer转换算法
    年中盘点 | 2022年,PaaS 再升级
    Element登录+注册
    华为鸿蒙手表开发之动态生成二维码
    C语言之vs调试实用技巧
    【论文阅读】Dense Passage Retrieval for Open-Domain Question Answering
    Spring Boot面试题(总结最全面的面试题!!!)
  • 原文地址:https://blog.csdn.net/weixin_38967029/article/details/126650145
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号