【FPGA】关于两个数相加的“坑”

【FPGA】关于两个数相加的"坑"

调试生成校验位的时候,发现在FPGA中计算出的校验byte和使用matlab 计算出的校验byte。对不上,最终检查,发现是FPGA中计算正确,而MATLAB的计算有问题。

1、校验byte的计算方法

一系列数据相加,然后取最终相加结果的低8bit.

c 复制代码
A=[XX XX XX ... XX];
check_byte=bitand(sum(A(:)),hex2dec('FF'));

2、FPGA计算两个数相加

RTL design

c 复制代码
//RTL design
module top  (
   input            clk,
   input      [7:0] a,
   input      [7:0] b,
   output reg [7:0] c='d0
    );

    always@(posedge clk)
        c<=a+b;

endmodule

testbench:

c 复制代码
//testbench
module tb_top();
    reg        clk;
    reg  [7:0] a;
    reg  [7:0] b;
    wire [7:0] c;
    
    top u_top(
    .clk(clk),
    .a (a),
    .b (b),
    .c (c)
    );
    
    initial begin
        clk = 0;
        forever #5 clk = ~clk; // 产生周期为10单位时间的时钟信号
    end
    
    integer i;
    initial begin
        a='d252;
        b='d0;
        for(i=0;i<100;i=i+1)begin
            #10
            b=b+'d1;
            $display("at time %t, data_in = %d", $time,  b);
        end
    end
 
endmodule

仿真波形

3、MATLAB计算两个数相加

c 复制代码
a=uint8(240);
b=uint8(0);
for b=0:20
    c=a+b;
    fprintf("c=%d\n",c);
end
whos c

溢出之后,直接是clip到255;

3、C计算两个数相加

c 复制代码
#include <stdio.h>
#include <stdint.h>

int main() {
    uint8_t a = 240;
    uint8_t b = 0;
    uint8_t c = 0;
    for (b = 0; b < 30; b++)
    {
        c = a + b;
        printf("a[%d]+b[%d]=c=%d\n",a,b, c);
    }

    return 0;
}

溢出之后为0,然后再在0~255中循环。

4、总结

对比C语言和RTL的处理结果是一致的,但是MATLAB不一致。

这点一定要注意。

MATLAB的溢出机制是不一样的。

所以,如上所述,要计算校验byte,所有数据加起来之后取低8bit.

加起来就不要让数据溢出。

所以先不要用uint8型,强制转成double型,不会溢出的。

c 复制代码
A=double(A);
check_byte=bitand(sum(A(:)),hex2dec('FF'));

THE END~

相关推荐
LDR0065 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
xiao5kou4chang6kai45 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
坏孩子的诺亚方舟5 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
Luminous.5 天前
C语言--day30
c语言·开发语言
玖玥拾5 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽5 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩5 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
2601_951643885 天前
C语言长文整理,关键字和数据类型
c语言·数据类型·关键字·嵌入式开发·格式化输出
m0_547486665 天前
《C#语言程序设计与实践》 全套PPT课件
c语言·c#·c语言程序设计
bubiyoushang8885 天前
电力线信道“五类噪声”仿真MATLAB
开发语言·matlab