等精度频率计计算过程出问题了,求助!

2019-03-25 10:52发布

今天在搞频率计的时候发发现一个问题:原程序如下:
module Fxprocess (Fx_count,Fs_count,Fh_count,Fx_valu,Fx_Duty);
input  [31:0] Fx_count;
input  [31:0] Fs_count;
input  [31:0] Fh_count;
output [31:0] Fx_valu;
output [7:0]  Fx_Duty;
parameter Fs = 50_000_000;  //板载标准频率50MHz
reg [31:0] Fx_valu;
reg [7:0] Fx_Duty;
always @(Fx_count or Fs_count or Fh_count)
begin
  Fx_valu <= Fs/Fs_count*Fx_count;
  Fx_Duty <= Fh_count/Fs_count*100;
end
endmodule
1)、在之前的计数模块里面我是设计了一个十进制计数器来计算Fs_count、Fx_count、Fh_count
假设我之前的计算模块得到的值分别是50_000_000、1000、25_000_000
经过  Fx_valu <= Fs/Fs_count*Fx_count;
         Fx_Duty <= Fh_count/Fs_count*100;
计算后输出居然是都是0,真是郁闷啊。

2)、要是在之前的计数模块里面我是设计了一个二进制计数器来计算Fs_count、Fx_count、Fh_count
经过  Fx_valu <= Fs/Fs_count*Fx_count;
         Fx_Duty <= Fh_count/Fs_count*100;
计算后就可以得出正确的输出。
不知是什么原因,有知道的给我指点下! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
wenhuawu
1楼-- · 2019-03-25 22:40
< / 没有遇到过类似问题,但是猜测是与数据类型转换有关的。其实在写的这几句话中都隐含有数据类型转型转换在里边。因为你的语句中既有二进制数又有十进制数,得首先把他们转换成一种类型的,然后才进行计算。只是这些是由系统自己做了,你看不到。但是如果是十进制计数器,得出的值最后得化为二进制数赋给Fx_value等,这里就有可能出错。
andriy
2楼-- · 2019-03-26 04:00
细细想过之后发现了问题所在
就是进制不同造成的,BDC码和二进制的转换问题
详见:http://www.ourdev.cn/bbs/bbs_con ... o=1&bbs_id=1029
找到了问题 但是还没解决问题
Sea_eeworld
3楼-- · 2019-03-26 06:11
你试试在十进制计数下,将此程序中的Fs_count、Fx_count、Fh_count直接输出,看看得到的是不是正确的值
andriy
4楼-- · 2019-03-26 09:54
 精彩回答 2  元偷偷看……

一周热门 更多>