For循环在迭代之间或迭代之后求和吗?Verilog

For循环在迭代之间或迭代之后求和吗?Verilog,verilog,Verilog,我将使用此示例代码询问有关for循环的一些一般问题 以下代码用于在两个3位数字a和b之间创建一个简单的乘法器函数: 1 function [5:0] mult; 2 input [2:0] a,b; 3 reg [5:0] r; 4 integer i; 5 begin 6 if(a[0] == 1) 7 r = b; 8 else 9 r = 0; 10 for(i=1; i<=2; i = i+1) begi

我将使用此示例代码询问有关for循环的一些一般问题

以下代码用于在两个3位数字
a
b
之间创建一个简单的乘法器函数:

1   function [5:0] mult;
2     input [2:0] a,b;
3     reg [5:0] r;
4     integer i;
5   begin
6     if(a[0] == 1)
7       r = b;
8     else
9       r = 0;
10    for(i=1; i<=2; i = i+1) begin
11       if(a[i]==1)
12         r = r + b <<i;
13    end
14    mult = r;  // set function name equal to product
15  end
16  endfunction
1函数[5:0]多;
2输入[2:0]a、b;
3注册[5:0]r;
4整数i;
5开始
6如果(a[0]==1)
7 r=b;
8其他
9 r=0;

10(i=1;i这里的逻辑非常简单。考虑<代码> a=3)> 011 < /代码>和<代码> b=5>101 < /代码>。您可以使用以下方案计算:

   101 (b=5)
x  011 (a=3)
 -----
   101 (t1)
  101  (t2)
+000   (t3)
 -----
=01111 (15)
7
9
用于计算表示为
t1
的值,
for loop
用于计算
t2
t3
。因此:

  • 6
    a[0]=1
    。因此,行
    7
    中的
    r=00101

  • 11
    i=1
    a[1]=1
    。因此,
    r=00101+101示例中的
    for
    循环与任何其他编程语言中的
    for
    循环之间没有区别。其工作原理完全相同。
    始终
    块中的所有运算符都是按顺序执行的,它们之间除了行号

    第7行或第9行(显然取决于第6行)添加到“for循环”(从第10行开始)的最终结果中

    这是一个正常的
    if
    运算符,与任何其他语言一样。它首先执行,并根据
    a[0]
    的值为
    r
    分配一个初始值

    第7行或第9行中r的定义未被带入“for循环”中的第12行


    不确定您在这里的意思。前面的
    if
    操作符设置了
    r
    的初始值,它在循环中的第一个take
    if
    语句中用作
    r=r+b,我还没有测试它。它取自Verilog basics教程。时间戳是38:09。我相信
    end
    的数量是正确的。总共应该有两个:一个用于
    ,一个用于
    开始的
    。注意:为了简单起见,我的代码与英特尔的略有不同。他们的代码处理8位numbers@Qiu你的回答很有帮助。所以你应该
    r+(b