原创 探讨FPGA中数值计算形式

2012-1-5 21:33 3065 17 22 分类: MCU/ 嵌入式

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形式查看数据波形。

以下是我的功能仿真图:        

未命名.jpg
PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户377235 2013-11-12 22:43

你的仿真文件能看看吗?邮箱smartuman@sina.con谢谢

用户408396 2012-5-23 18:45

定义reg signed [11:0] a;就可以直接比较大小了

用户377235 2012-3-20 14:50

Superb inofrmatoin here, ol'e chap; keep burning the midnight oil.

用户419715 2012-3-9 18:37

认真地读了你这篇博客,你能把它的仿真文件传给我吗?因为我一直想搞明白如何用matlab产生数据,并在tb文件中用读取数据文件的形式,产生激励信号。我的邮箱lijinke0516@sohu.com.谢谢
相关推荐阅读
用户1600457 2012-04-13 15:53
BOA WEB服务器移植
BOA WEB服务器的移植: 下载源码:最新的为0.94.13,之后再没有更新过 解压后进入文件夹的src/下 ./configure产生Makefile 修改Makefil...
用户1600457 2012-04-09 10:52
【博客大赛】(原创) linux进程间通信之有名管道(FIFO)的简单应用
之前写了无名管道方式的通信,这里就验证下有名管道的通信方式。 有名管道他和普通文件一样可以被读写,而且实际存在于存储设备中,一般也即磁盘,但是有名管道在进程结束后通信的信息就自动消失了,而一般...
用户1600457 2012-04-09 10:51
【博客大赛】(原创)linux进程间通信之无名管道(pipe)的简单应用
最近开始学了linux应用编程,懂了点多进程的基础知识,便跃跃欲试,想立即应用起来,以加深印象,学任何东西重在实践,技术尤为如此。 在linux中创建新的进程的函数为fork(),如果成功返回...
用户1600457 2012-04-08 11:02
【博客大赛】(原创)OK6410按键中断实现
这里本人使用中断形式实现按键的驱动,首先还是先呈上源程序: #include <linux/kernel.h> #include <linux/module.h> ...
用户1600457 2012-04-02 15:55
【博客大赛】(原创)OK6410的第一个驱动程序--点灯
开始自己的嵌入式之旅了。一切神秘的面纱均可以由闪亮的LED揭开。 贴上自己的驱动程序: #include<linux/kernel.h> #include<linux/...
用户1600457 2012-03-23 14:03
nor flash 与 nand flash的比较(转)
NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,19***,东芝公司发...
EE直播间
更多
我要评论
4
17
关闭 站长推荐上一条 /3 下一条