Verilog实现四位加/减法器(逻辑表达式)

这篇具有很好参考价值的文章主要介绍了Verilog实现四位加/减法器(逻辑表达式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  起因是老师要我们以逻辑表达式的形式交作业,强调是逻辑表达式,在网上找了许久,没有找到,便从一些文章中找到了灵感,特分享


说明: 此代码为四位加/减法器的Verilog代码实现(用的是逻辑表达式)


  • 第一种表达:

module plus (
    input [3:0] P,
    input [3:0] G,
    input op,
    output [3:0] C
);
    /*
参数说明
op 是运算符号,op = 0时是加法, op = 1时是减法
P 和 G 是两个操作数,C 是结果
即 P op G = C
*/

    // 定义一个变量辅助计算
    wire [3:0] ci;
    // 用ci记录进位,异或运算进行不进位加法
    assign C[0]  = (G[0] ^ op) ^ P[0] ^ op;
    assign ci[1] = (G[0] ^ op) & P[0] | op & ((G[0] ^ op) | P[0]);

    // 计算第二位的结果和进位
    assign C[1]  = (G[1] ^ op) ^ P[1] ^ ci[1];
    assign ci[2] = (G[1] ^ op) & P[1] | ci[1] & ((G[1] ^ op) | P[1]);

    // 计算第三位的结果和进位
    assign C[2]  = (G[2] ^ op) ^ P[2] ^ ci[2];
    assign ci[3] = (G[2] ^ op) & P[2] | ci[2] & ((G[2] ^ op) | P[2]);

    // 计算第四位的结果
    assign C[3]  = (G[3] ^ op) ^ P[3] ^ ci[3];

endmodule
//~ `New testbench

`timescale 1ns / 10ps

module tb_plus;

    // plus Inputs
    reg  [3:0] P = 0;
    reg  [3:0] G = 0;
    reg        op = 0;

    // plus Outputs
    wire [3:0] C;

    plus plus (
        .P (P[3:0]),
        .G (G[3:0]),
        .op(op),
        .C (C[3:0])
    );

    initial begin
	// 测试样例1:
	// 2 + 4 = 6
        P  = 4'b0010;
        G  = 4'b0100;
        op = 0;
        #5;
	// 测试样例2:
	// 9 + 3 = C
        P  = 4'b1001;
        op = 0;
        G  = 4'b0011;
        #5;
	// 测试样例3:
	// 8 + 2 = A
        P  = 4'b1000;
        G  = 4'b0010;
        op = 0;
        #5;
	// 测试样例4:
	// A - 4 = 6
        P  = 4'b1010;
        G  = 4'b0100;
        op = 1;
        #5;
	// 测试样例5:
	// 9 - 7 = 2
        P  = 4'b1001;
        G  = 4'b0111;
        op = 1;
        #5;
	// 测试样例6:
	// C - 1 = B
        P  = 4'b1100;
        G  = 4'b0001;
        op = 1;
        #5;
        $stop;
    end

endmodule
  • 第二种表达:

module plus (
    input [3:0] P,
    input [3:0] G,
    input op,
    output [3:0] C
);
    /*
参数说明
op 是运算符号,op = 0时是加法, op = 1时是减法
P 和 G 是两个操作数,C 是结果
即 P op G = C
*/

    // 定义一个变量辅助计算
    wire [3:0] ci;
    // 用ci记录进位,异或运算进行不进位加法
    assign C[0]  = (G[0] ^ op) ^ P[0] ^ op;
    assign ci[0] = ((G[0] ^ op) & P[0]) || ((G[0] ^ op) & op) || (P[0] & op);

    // 计算第二位的结果和进位
    assign C[1]  = (G[1] ^ op) ^ P[1] ^ ci[0];
    assign ci[1] = ((G[1] ^ op) & P[1]) || ((G[1] ^ op) & ci[0]) || (P[1] & ci[0]);

    // 计算第三位的结果和进位
    assign C[2]  = (G[2] ^ op) ^ P[2] ^ ci[1];
    assign ci[2] = ((G[2] ^ op) & P[2]) || ((G[2] ^ op) & ci[1]) || (P[2] & ci[1]);

    // 计算第四位的结果
    assign C[3]  = (G[3] ^ op) ^ P[3] ^ ci[2];

endmodule
//~ `New testbench

`timescale 1ns / 10ps

module tb_plus;

    // plus Inputs
    reg  [3:0] P = 0;
    reg  [3:0] G = 0;
    reg        op = 0;

    // plus Outputs
    wire [3:0] C;

    plus plus (
        .P (P[3:0]),
        .G (G[3:0]),
        .op(op),
        .C (C[3:0])
    );

    initial begin
        $dumpfile("a.vcd");
        $dumpvars;

	// 测试样例1:
	// 2 + 4 = 6
        P  = 4'b0010;
        G  = 4'b0100;
        op = 0;
        #5;
	// 测试样例2:
	// 9 + 3 = C
        P  = 4'b1001;
        op = 0;
        G  = 4'b0011;
        #5;
	// 测试样例3:
	// 8 + 2 = A
        P  = 4'b1000;
        G  = 4'b0010;
        op = 0;
        #5;
	// 测试样例4:
	// A - 4 = 6
        P  = 4'b1010;
        G  = 4'b0100;
        op = 1;
        #5;
	// 测试样例5:
	// 9 - 7 = 2
        P  = 4'b1001;
        G  = 4'b0111;
        op = 1;
        #5;
	// 测试样例6:
	// C - 1 = B
        P  = 4'b1100;
        G  = 4'b0001;
        op = 1;
        #5;
        $finish;
    end

endmodule

这是上面的波形图verilog四位加法器,fpga开发


参考链接:
原码, 反码, 补码 详解
Verilog——串行四位加法器和超前四位加法器74HC283文章来源地址https://www.toymoban.com/news/detail-516090.html

到了这里,关于Verilog实现四位加/减法器(逻辑表达式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Verilog常用运算符及表达式

    本文详细介绍了Verilog常用的运算符和表达式,特别是分享了处理“计算位宽溢出”和“负数”的可行方式,帮助读者更加轻松地理解和掌握Verilog语言的运算符。 算数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%) 赋值运算符:非阻塞赋值(=)、阻塞赋值(=);

    2024年02月08日
    浏览(39)
  • Verilog基础:表达式中的整数常量(integer)

    相关文章 Verilog基础专栏 https://blog.csdn.net/weixin_45791458/category_12263729.html ​         整数常量可以由十进制、十六进制、八进制或二进制格式指定。         整数常量有两种表现形式。         第一种表现形式是一个简单的十进制数,应指定为0到9的数字序列,可以选

    2024年02月08日
    浏览(37)
  • Verilog基础:表达式位宽的确定(位宽拓展)

    相关文章 Verilog基础专栏 https://blog.csdn.net/weixin_45791458/category_12263729.html 表达式位宽         如果想要在计算表达式时获得和谐一致的结果,那么控制表达式中的位宽就很重要。很多时候方法很简单。例如,如果在两个16位数据的reg变量上做位与操作,那么计算结果很显然

    2023年04月18日
    浏览(24)
  • 计算机组成原理 实验一 四位加法器设计

    实验开发平台:武汉华亨科技公司的EDA/SOPC实验开发平台由NIOSII—EP3C40核心板、EDA/SOPC系统板和HH-SEXT-1扩充子板组成。  芯片编号:EP3C40F780C8  软件:Quartus II 64-Bit 13.1.0.162  启动Quartus 13.1 创建子项目full_adder,芯片选择EP3C40F780C8   新建Verilog HDL File,输入一位全加器代码并保

    2024年02月07日
    浏览(31)
  • verilog实现除法器运算

    本文通过verilog实现了一个位宽参数可配置的除法运算模块 我们要计算 a_data/b_data = div_data ----remain_data ; 🌿 确定位宽 :若a_data的位宽为A_WIDTH, b_data的位宽为B_WIDTH;则div_data的最大位宽为A_WIDTH, remain_data的位宽为B_WIDTH; 🍃 计算div_data的最高位 :若a_data = (b_data(A_WIDTH-1)), 则di

    2024年02月06日
    浏览(26)
  • Python学习笔记:正则表达式、逻辑运算符、lamda、二叉树遍历规则、类的判断

    序号 实例 说明 1 . 匹配任何字符(除换行符以外) 2 d 等效于[0-9],匹配数字 3 D 等效于[^0-9],匹配非数字 4 s 等效于[trnf],匹配空格字符 5 S 等效于[^trnf],匹配非空格字符 6 w 等效于[A-Za-z0-9],匹配单字字符 7 W 等效于[^A-Za-z0-9],匹配非单字字符 8 [ab]cdef 匹配acdef或bcd

    2024年02月11日
    浏览(51)
  • 数字IC经典电路(3)——经典除法器的实现(除法器简介及Verilog实现)

    除法器是一种用于执行除法运算的电路或器件。在数字电路中,除法器经常被用作重要的计算单元,其主要功能是将一个数除以另一个数并给出商和余数。 与加法器和减法器类似,除法器也属于算术逻辑单元(ALU)的一种。不同的是,加法器和减法器能够执行加法和减法运算,

    2024年02月02日
    浏览(31)
  • Verilog实现超前进位加法器

    在CPU等对性能要求较高的电路中,一般都会采用超前进位加法器,因为超前进位加法器的延时相对来说比较小。下面讲述超前进位加法器的原理: 我们知道,一个三输入,二输出的全加器,其逻辑关系为 S = A ⊕ B ⊕ C i n S=Aoplus Boplus C_{in} S = A ⊕ B ⊕ C in ​ C o u t = ( A B ) ∣

    2023年04月08日
    浏览(26)
  • 基于verilog的除法器的实现

    本文应该是目前全网最通俗易懂,而且比较全面的用verilog实现除法器的文章。首先说明一下本文的探讨的重点。我们首先从整数的除法开始讲起,然后慢慢延伸到小数的除法,和负数的除法。 对于一个除法器来说,他的实现框架应该是下面这个图: 在这个框架图中,A是被除

    2024年02月05日
    浏览(19)
  • 数字IC经典电路(2)——经典乘法器的实现(乘法器简介及Verilog实现)

    数字电路中乘法器是一种常见的电子元件,其基本含义是将两个数字相乘,并输出其乘积。与加法器不同,乘法器可以实现更复杂的运算,因此在数字电路系统中有着广泛的应用。 乘法器的主要用途是在数字信号处理、计算机科学以及其他数字电路应用中进行精确的数字乘法

    2024年02月06日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包