首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

探讨FPGA中数值计算形式

探讨FPGA中数值计算形式

FPGA中数值的计算都是以补码形式进行的。因为对于机器而言,他们只能识别数值0和1,而不能像人脑那样判断符号位,然后判断正负再进行计算。对于原码,补码,反码可以在我收录的一篇文章中学习:
http://bbs.ednchina.com/BLOG_ARTICLE_2114396.HTM
以下我写了个程序来验证数值绝对值的比较:
module minus_judge(clk,rst,
                   dina,dinb,
                   result);
                  
input clk,rst;
input[11:0] dina,dinb;
output result;

reg result;
reg[11:0] dina_r,dinb_r;

//计算数据的绝对值
always@(posedge clk or negedge rst) begin
    if(!rst) begin dina_r <= 0; dinb_r <= 0; end
    else begin
        if(dina[11]==1) dina_r <= ~(dina-1'b1);
        else dina_r <= dina;
        if(dinb[11]==1) dinb_r <= ~(dinb-1'b1);
        else dinb_r <= dinb;
    end
end
//比较绝对值大小
always@(*) begin
   if(dina_r[10:0]>=dinb_r[10:0]) result <= 1;
   else result <= 0;
end

endmodule   


其中的仿真数据输入可以借用verilog的读数据函数readmemh("filename.txt",datamenm)。以16进制读取,个人感觉这样比较方便,16进制显示MATLAB产生也方便。对于负数,在输入时候可以是最高位取反,具体算法是比如我们要产生12位的数据,最高位为符号位,则数据为负数时候需要加上2^12,使得最高位取反,在modelsim中可以以decmal形式查看数据波形。
以下是我的功能仿真图:        
返回列表