使用下列语句计算时结果为零,实际结果应该为 42949:
parameter F_WORD = (1<<32) * 500 / SYS_CLK_FREQ;
问题原因:parameter 位宽只有32 位,不够
解决办法:
结算过程中尽量避免出现大数。
parameter F_WORD = 500*85899/1000; // 85899/1000 = (2**32)/SYS_CLK_FREQ = 85.899
加作者薇信:jiyuyun18, 交流电子技术
留言:CSDN FPGA 入群,加入 FPGA 技术交流群
还有一种办法,将变量的位宽设置的大一些,比如64位:
wire [63:0] F_WORD = freq_dst*85899/1000; // 85899/1000 = (2**32)/SYS_CLK_FREQ = 85.899