代码编织梦想

前面写了一个门级实现,需要实例话全加器100次,多少有点繁琐,这里我们使用RTL级实现一下(也就是直接使用加法器),但是这里有一个难点,就是如何简单高效的计算出最高位的进位cout呢?下面我会给出我的做法,但是感觉有待改善。

 

module top_module( 
    input [99:0] a, b,
    input cin,
    output cout,
    output [99:0] sum );
    wire [99:0] cout_r;
    assign sum = a + b + cin;
    always @ (*) begin
    for (integer i = 0; i < 100; i++) begin
        if (i == 0)
            cout_r[0] = (a[0]&b[0])|(a[0]&cin)|(b[0]&cin);
        else
            cout_r[i] = (a[i]&b[i])|(a[i]&cout_r[i-1])|(b[i]&cout_r[i-1]);
    end
    end
    assign cout = cout_r[99];
endmodule

其实整个always语句块都是用来求cout的。但是好像非这样做不可,因为每一位都会产生进位,每一位的进位都会影响最高的进位,这里我感觉没办法了已经,如果有读者想到更好的解决方案欢迎交流。 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44830822/article/details/130494838