「Verilog学习笔记」串行进位加法器

本文介绍了作者在学习Verilog过程中对基本模块如全加器、半加器的设计,以及在牛客网刷题网站上的应用。详细展示了`add_full`模块的结构,包括使用生成器生成的4个全加器实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

 

`timescale 1ns/1ns

module add_4(
   input         [3:0]  A   ,
   input         [3:0]  B   ,
   input                Ci  , 

   output	wire [3:0]  S   ,
   output   wire        Co   
);
    wire [3:0] C ; 
    genvar i ; 
    generate 
        for (i = 0 ; i < 4 ; i = i + 1) begin 
            add_full u1(.A(A[i]), .B(B[i]), .Ci(i ? C[i - 1] : Ci), .S(S[i]), .Co(C[i])) ; 
        end
    endgenerate

    assign Co = C[3] ; 

endmodule

module add_half(
   input                A   ,
   input                B   ,
 
   output	wire        S   ,
   output   wire        C   
);
    assign S = A ^ B;
    assign C = A & B;
endmodule

module add_full(
   input                A   ,
   input                B   ,
   input                Ci  , 

   output	wire        S   ,
   output   wire        Co   
);
    wire c_1;
    wire c_2;   
    wire sum_1;

add_half add_half_1(
   .A   (A),
   .B   (B),
         
   .S   (sum_1),
   .C   (c_1)  
);
add_half add_half_2(
   .A   (sum_1),
   .B   (Ci),
         
   .S   (S),
   .C   (c_2)  
);

    assign Co = c_1 | c_2;
endmodule
### 四位串行进位加法器FPGA上的实现 #### 1. 基本原理 四位串行进位加法器通过串联多个一位全加器来完成多位二进制数相加的任务。每一位的进位信号会传递到下一位,形成逐级传递的效果[^2]。 #### 2. Verilog代码实例 下面是一个简单的四位串行进位加法器模块定义: ```verilog // 定义4位串行进位加法器 module adder_4bit_serial ( input [3:0] a, // 输入A input [3:0] b, // 输入B input cin, // 初始进位输入 output reg [3:0] sum,// 输出求和结果 output cout // 最终进位输出 ); wire c_out[2:0]; // 中间进位线 always @(*) begin {c_out[0], sum[0]} = a[0] + b[0] + cin; {c_out[1], sum[1]} = a[1] + b[1] + c_out[0]; {c_out[2], sum[2]} = a[2] + b[2] + c_out[1]; {cout, sum[3]} = a[3] + b[3] + c_out[2]; end endmodule ``` 此设计采用组合逻辑方式实现了四位串行进位加法功能,在实际应用中可根据具体需求调整为寄存器传输级别(RTL)描述以优化性能或资源占用情况[^3]。 #### 3. 测试平台构建 为了验证上述加法器的功能正确性,还需要编写相应的测试程序(Testbench),用于模拟各种可能的数据输入场景,并观察其运算结果是否符合预期。 ```verilog // 测试平台:用于验证4位串行进位加法器的行为 module tb_adder_4bit_serial(); reg [3:0] A; // 测试用输入A reg [3:0] B; // 测试用输入B reg Cin; // 测试用初始进位输入 wire [3:0] Sum; // 预期得到的结果S wire Cout; // 预期得到的最终进位C adder_4bit_serial uut( .a(A), .b(B), .cin(Cin), .sum(Sum), .cout(Cout) ); initial begin $monitor("At time %t : A=%d , B=%d , Cin=%d -> S=%d C=%d", $time,A,B,Cin,Sum,Cout); // 初始化条件设置 A=4'b0000; B=4'b0000; Cin=0; #10; // 尝试不同数据模式下的计算过程... A=4'b0011; B=4'b0011; Cin=0; #10; A=4'b1111; B=4'b0001; Cin=1; #10; ... end endmodule ``` 以上展示了如何利用Verilog HDL语言在一个典型的FPGA开发环境中创建并检验一个基本的四位串行进位加法电路的设计思路与实践步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做模拟IC的KS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值