BaudGeneratorInc = (Baud<<BaudGeneratorAccWidth)/ClkFrequency;
上面的设计中存在一个错误: "BaudGeneratorInc"的计算是错误的, 因为 Verilog 使用 32 位的默认结果, 但实际计算过程中的某些数据超过了32位,所以改变一种计算方法。
parameter BaudGeneratorInc = ((Baud<<(BaudGeneratorAccWidth-4))+(ClkFrequency>>5))/(ClkFrequency>>4);
这行程序也使得结果成为整数,从而避免截断。
应该是一个挺简单的问题,可是我就是没有弄明白后面这个公式是如何推导出来的,那位朋友帮忙详细解释一下!谢谢了。 |