> 文章列表 > 【GAOPS055】verilog 乘法、除法和取余

【GAOPS055】verilog 乘法、除法和取余

【GAOPS055】verilog 乘法、除法和取余

    • 乘法硬件原理
      • 结论
      • 思路1
      • 思路2
      • 举例
      • 编码
      • 仿真
      • 综合
    • 除法硬件原理
      • verilog代码
      • 仿真结果
      • 资源占用

乘法硬件原理

结论

可以将乘法A x B转为A的移位相加。
利用乘2n就是左移n位的特性乘2^n就是左移n位的特性2n就是左移n位的特性,将数拆分为2n2^n2n表示

思路1

原始列竖式计算方法ref例2.9
【GAOPS055】verilog 乘法、除法和取余

思路2

B总是可以拆分为:B=(an2n+an−12n−1+...+a121+a020)B=(a_n2^n+a_{n-1}2^{n-1}+...+a_12^1+a_02^0)B=(an2n+an12n1+...+a121+a020)
  例如:B=4’d10=1∗23+0∗22+1∗21+0∗201*2^3+0*2^2+1*2^1+0*2^0123+022+121+020=4’b1010

举例

3∗10=3∗(4′b1010)=3∗(23+21)=3<<3+3<<1=24+6=303*10=3*(4'b1010)=3*(2^3+2^1)=3<<3+3<<1=24+6=30310=3(4b1010)=3(23+21)=3<<3+3<<1=24+6=30

编码

思路1采用原始手算,列竖式思路
【GAOPS055】verilog 乘法、除法和取余

思路2采用移位思路:
【GAOPS055】verilog 乘法、除法和取余

仿真

【GAOPS055】verilog 乘法、除法和取余

综合

思路1综合如下:
【GAOPS055】verilog 乘法、除法和取余

思路2综合如下:
【GAOPS055】verilog 乘法、除法和取余
思路1原始竖式方法的资源:
【GAOPS055】verilog 乘法、除法和取余

思路2移位方法的资源:
【GAOPS055】verilog 乘法、除法和取余

搞半天,原始的方法占资源还少,离谱。

除法硬件原理

我是参考这这个博主的这篇,他写的很好可以先看。
就是手算的思路,改成了硬件方便的实现。移位相减。

verilog代码

【GAOPS055】verilog 乘法、除法和取余

仿真结果

【GAOPS055】verilog 乘法、除法和取余

资源占用

【GAOPS055】verilog 乘法、除法和取余
【GAOPS055】verilog 乘法、除法和取余
可以看到资源占不少啊!并且时序也不好。