我必须使用 Verilog(作业)来划分两个 8 位数字。我必须使用的模块是这个:
module divider(
output reg[7:0] q,
output reg[7:0] r,
input [7:0] a,b);
endmodule
其中 a=b*q+r
我不允许使用重复减法或 / 和 % 运算符。
有人告诉我我可以使用 SRT、Newton-Raphson 或 Goldschmidt 算法来解决它,但我不明白它们是如何工作的......
有什么帮助吗?
我必须使用 Verilog(作业)来划分两个 8 位数字。我必须使用的模块是这个:
module divider(
output reg[7:0] q,
output reg[7:0] r,
input [7:0] a,b);
endmodule
其中 a=b*q+r
我不允许使用重复减法或 / 和 % 运算符。
有人告诉我我可以使用 SRT、Newton-Raphson 或 Goldschmidt 算法来解决它,但我不明白它们是如何工作的......
有什么帮助吗?
第 1 步:从Wikipedia和 Google 开始。牛顿的方法有很多东西。
第 2 步:用你最喜欢的软件语言(Python、Scala、C 等)编写原型。
第 3 步:只有完成前两个步骤后,您才能在 Verilog 中编写解决方案。
牛顿法背后的基本思想是进行猜测,然后在每个时钟周期/迭代中改进你的猜测。你的猜测最终会收敛到正确的答案。一旦新的猜测与之前的猜测几乎相同,您就完成了。