其實,分解一下乘法的原理,就清楚了。
以兩個8bit的乘法為例,就是8個累加,如下:
{8"b0, areg[0]*breg[7:0], } + //i=1,
{7"b0, areg[1]*breg[7:0], 1"b0} + //i=2,
{6"b0, areg[2]*breg[7:0], 2"b0} + //i=3,
{5"b0, areg[3]*breg[7:0], 3"b0} + //i=4,
{4"b0, areg[4]*breg[7:0], 4"b0} + //i=5,
{3"b0, areg[5]*breg[7:0], 5"b0} + //i=6,
{2"b0, areg[6]*breg[7:0], 6"b0} + //i=7,
{1"b0, areg[7]*breg[7:0], 7"b0} //i=8,
回到本程式碼,
areg[14:0]這15bit的每一個bit,單獨來看的話,首先乘以16‘b1000_0000_0000_0000,
然後“加上”被乘數,再依次除以2。
由於以上動作重複15次,因此最低位bit0被除15次,bit1被除14次,依次,bit13被除1次。
以上動作,就完成如上列出的加法。
其實,分解一下乘法的原理,就清楚了。
以兩個8bit的乘法為例,就是8個累加,如下:
{8"b0, areg[0]*breg[7:0], } + //i=1,
{7"b0, areg[1]*breg[7:0], 1"b0} + //i=2,
{6"b0, areg[2]*breg[7:0], 2"b0} + //i=3,
{5"b0, areg[3]*breg[7:0], 3"b0} + //i=4,
{4"b0, areg[4]*breg[7:0], 4"b0} + //i=5,
{3"b0, areg[5]*breg[7:0], 5"b0} + //i=6,
{2"b0, areg[6]*breg[7:0], 6"b0} + //i=7,
{1"b0, areg[7]*breg[7:0], 7"b0} //i=8,
回到本程式碼,
areg[14:0]這15bit的每一個bit,單獨來看的話,首先乘以16‘b1000_0000_0000_0000,
然後“加上”被乘數,再依次除以2。
由於以上動作重複15次,因此最低位bit0被除15次,bit1被除14次,依次,bit13被除1次。
以上動作,就完成如上列出的加法。