首页 > 其他分享 >7.半加器拓展练习:使用与非门实现半加器

7.半加器拓展练习:使用与非门实现半加器

时间:2024-07-01 21:56:53浏览次数:22  
标签:Cout Sum 练习 reg 半加器 adder 与非门 half ex

使用always语句实现半加器:

(1)报错:[HDL 9-806] Syntax error near "non-printable character with the hex value '0xef'". 
原因:Verilog中带有中文字符

(2)Verilog代码:

module ex_half_adder(A,B,Cout,Sum);
    
    input A;
    input B;
    
    output reg Cout;
    output reg Sum;
    
    always@(*)
        {Cout,Sum} = A + B;
    
endmodule

(3)仿真文件代码:

`timescale 1ns/1ns

module half_adder_tb;

    reg A;
    reg B;
    
    wire Cout;
    wire Sum;
        
    ex_half_adder ex_half_adder_inst(
        .A(A),
        .B(B),
        .Cout(Cout),
        .Sum(Sum)
    );
    
    initial begin
        A <= 1'd0;
        B <= 1'd0;
        #2000;
        $stop;
    end
    
    always #10    A<= {$random} % 2;
    always #10    B<= {$random} % 2;
    
endmodule

(4)RTL视图

(5)仿真波形:

使用与非门实现功能:

(1)真值表以及分析过程:

(2)Verilog实现代码:

module ex_half_adder(A,B,Cout,Sum);
    
    input A;
    input B;
    
    output  Cout;
    output  Sum;
    
    assign Cout = !(!(A & B) & 1'd1);
    assign Sum  = !((!(!(B & 1'd1)& A)) & (!(!(A & 1'd1) & B)));
    
endmodule

(3)仿真文件代码:

`timescale 1ns/1ns

module half_adder_tb;

    reg A;
    reg B;
    
    wire Cout;
    wire Sum;
        
    ex_half_adder ex_half_adder_inst(
        .A(A),
        .B(B),
        .Cout(Cout),
        .Sum(Sum)
    );
    
    initial begin
        A <= 1'd0;
        B <= 1'd0;
        #2000;
        $stop;
    end
    
    always #10    A<= {$random} % 2;
    always #10    B<= {$random} % 2;
    
endmodule

(4)RTL视图:

(5)仿真波形:

标签:Cout,Sum,练习,reg,半加器,adder,与非门,half,ex
From: https://blog.csdn.net/2301_80417284/article/details/140059726

相关文章

  • 中文翻译老挝语只推荐一个神器《老挝语翻译通》App,老挝语口语发音练习,支持老挝文OCR识
    出国旅游去探索东南亚的神秘国家:老挝,不会老挝语怎么办?不用怕,下载《老挝语翻译通》App帮助你把中文翻译成老挝语。功能亮点:实时翻译:实时把中文翻译成老挝语,老挝语单词或者句子均可均可准确翻译。语音识别翻译:无需打字,对着说话就能翻译,老挝语实时对话,流畅交流。OCR文字识别:......
  • 6.29~7.1 比赛和练习
    6.29CYEZXXSRound活动安排题目大意:给定\(n\)个线段,求最少划分为几个集合,使得每个集合内线段不交。\(n\le100\)解题思路:可以\(O(n^2)\)对于每一个线段,找到距离当前右端点最近的左端点然后跳到那个线段的右端点。可以\(O(n\logn)\)用优先队列维护。完成度:\(100\%\)......
  • C++ //练习 14.17 你在7.5.1节的练习7.40(第261页)中曾经选择并编写了一个类,你认为它应
    C++Primer(第5版)练习14.17练习14.17你在7.5.1节的练习7.40(第261页)中曾经选择并编写了一个类,你认为它应该含有相等运算符吗?如果是,请实现它;如果不是,解释原因。环境:LinuxUbuntu(云服务器)工具:vim 代码块classDate{ public: Date(); Date(size_ty,size_tm,siz......
  • 力扣刷题练习 四【283. 移动零】
    前言数组篇练习题目。记录四【283.移动零】一、题目阅读给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例......
  • 通信原理练习题解析(详细版)
    文章目录说明选择填空简答分析计算说明部分内容,仅为个人观点,如有错误之处,欢迎交流!选择属于数字信号的是(A)​A:PCM信号B:PAM信号C:PDM信号D:PPM信号PCM信号(PulseCodeModulation,脉冲编码调制):P将模拟信号转换为数字信号的方法PDM信号(PulseDensityModula......
  • 操作系统期末复习习题练习一
    单选题1.分时系统中的当前运行进程连续获得了两个时间片,原因可能是()。A.该进程的优先级最高地B.就绪队列为空C.该进程最早进入就绪队列D.该进程是-一个短进程正确答案:B答案解析:进程运行时,当一个时间片到时,返回队列,如果就绪队列为空,则现只有该进程,故将继续调度......
  • HDLBits练习Shift18 Verilog逻辑右移和算数右移的区别
    算术右移时,移入的是移位寄存器中数字(本例中为q[63])的符号位,而不是逻辑右移时的零。右移n位,即加入n位符号位。即若符号位为1,在左边补1;若符号位为0,就补0。算术右移的另一种思路是,它假定被移位的数字是带符号的,并保留符号,因此算术右移是右移n位将带符号的数字除以2的n次幂。......
  • 大数据复习练习
    大数据复习练习题填空题简答题简单分析题程序设计题程序设计题填空题(数据)过观察、实验或计算得出的结果。(消息)是较为宏观的概念,它是由数据的有序排列组合而成。大数据的数据类型包括(结构化数据)和(非结构化数据),前者占10%左右,后者占90%左右。HDFS伪分布式配置中属性df......
  • Java学习 - MySQL存储过程、函数和触发器练习实例
    存储过程存储过程是什么存储过程是一组已经编译好的SQL语句存储过程优点有什么安全性能高提高代码复用性创建存储过程的语法DELIMITER$#不能加分号CREATEPROCEDURE存储过程名(IN|OUT|INOUT参数名参数类型)BEGIN存储过程语句块END;$DELIMIT......
  • 重新格式化部门表(sql练习)
    表 Department:+---------------+---------+|ColumnName|Type|+---------------+---------+|id|int||revenue|int||month|varchar|+---------------+---------+在SQL中,(id,month)是表的联合主键。这个表......