热度 22
2012-1-5 21:33
3036 次阅读|
4 个评论
FPGA中数值的计算都是以补码形式进行的。因为对于机器而言,他们只能识别数值0和1,而不能像人脑那样判断符号位,然后判断正负再进行计算。对于原码,补码,反码可以在我收录的一篇文章中学习: http://bbs.ednchina.com/BLOG_ARTICLE_2114396.HTM 以下我写了个程序来验证数值绝对值的比较: module minus_judge(clk,rst, dina,dinb, result); input clk,rst; input dina,dinb; output result; reg result; reg 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 ==1) dina_r = ~(dina-1'b1); else dina_r = dina; if(dinb ==1) dinb_r = ~(dinb-1'b1); else dinb_r = dinb; end end //比较绝对值大小 always@(*) begin if(dina_r =dinb_r ) result = 1; else result = 0; end endmodule 其中的仿真数据输入可以借用verilog的读数据函数readmemh("filename.txt",datamenm)。以16进制读取,个人感觉这样比较方便,16进制显示MATLAB产生也方便。对于负数,在输入时候可以是最高位取反,具体算法是比如我们要产生12位的数据,最高位为符号位,则数据为负数时候需要加上2^12,使得最高位取反,在modelsim中可以以decmal形式查看数据波形。 以下是我的功能仿真图: