For循环在迭代之间或迭代之后求和吗?Verilog
我将使用此示例代码询问有关for循环的一些一般问题 以下代码用于在两个3位数字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
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
的初始值,它在循环中的第一个takeif
语句中用作r=r+b,我还没有测试它。它取自Verilog basics教程。时间戳是38:09。我相信end
的数量是正确的。总共应该有两个:一个用于的,一个用于开始的。注意:为了简单起见,我的代码与英特尔的略有不同。他们的代码处理8位numbers@Qiu你的回答很有帮助。所以你应该r+(b