Verilog 加法器和减法器(4)

      类似于行波进位加法器,用串联的方法也能够实现多位二进制数的减法操作。  比如下图是4位二进制减法逻辑电路图。   

image

      8位二进制减法的verilog代码如下:

复制代码
module subn(x, y, d,cin);
  parameter n=8;

  input [n-1:0] x;
  input [n-1:0] y;
  output reg[n-1:0] d; //diff
  output reg cin; //borrow from high bit
  reg [n:0] c;
  integer k;

  always @(x,y) begin
    c[0] = 1'b0;
	 for(k = 0; k < n; k = k + 1) begin
	   d[k] = x[k]^y[k]^c[k];
		c[k+1] = (~x[k]&(y[k]^c[k]))|(y[k]&c[k]);
	 end
	 cin = c[n];

  end

endmodule
复制代码


复制代码
module subn( x, y, d,cin);

  parameter n=8;
  input [n-1:0] x;
  input [n-1:0] y;
  output [n-1:0] d;
  output  cin;


  assign {cin, d} = x - y ;

endmodule
复制代码


复制代码
module subn( x, y, d,cin);
  parameter n=8;
  input [n-1:0] x;
  input [n-1:0] y;
  output [n-1:0] d;
  output  cin;

  wire [n:0] c;
  genvar k;
  assign c[0]=0;
  assign cin=c[n];

  generate
	 for(k = 0; k <= n-1; k = k + 1) begin:subbit
       fullsub stage(c[k],x[k],y[k],d[k],c[k+1]);
	 end
  endgenerate

endmodule
复制代码


testbench 代码如下:

复制代码
`timescale 1ns/1ns
`define clock_period 20

module subn_tb;
  reg [7:0] x,y;

  wire cin;
  wire [7:0] d;
  reg clk;

  subn #(.n(8)) subn_0(
						.x(x),
						.y(y),
						.d(d),
						.cin(cin)
                  );

  initial clk = 0;
  always #(`clock_period/2) clk = ~clk;

  initial begin
     x = 0;
     repeat(20)
	    #(`clock_period) x = $random;

  end

  initial begin
     y = 0;
     repeat(20)
	    #(`clock_period) y = $random;

  end


  initial begin
     #(`clock_period*20)
	  $stop;
  end


endmodule
复制代码


功能验证的波形图如下。注意:我们选择了radix为unsigned

image













posted on   迈克老狼2012  阅读(4032)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示