【发布时间】:2020-08-14 18:06:43
【问题描述】:
我将使用这个示例代码来询问一些关于 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
我相信这会产生预期的结果,但我只能在以下情况下理解它:
-
7或9行(显然取决于6行)添加到“for 循环”的 end 结果(从行开始)10) -
r的定义来自7或9行不 被引入到'for 循环'中的12行 - “for 循环”的每次迭代(或“步骤”)不会将其计算的
r值从 先前 索引值i带入 后续 em> 索引值i
如果这三个结论是正确的,那么我有这些问题:
- 在完成所有可能的步骤后,“For 循环”是否对它们的迭代求和?
- “For 循环”不将有关标识符的信息在从一个步骤派生的“for 循环”传递到下一步,尽管两个步骤中出现相同的标识符(在这种情况下为
r)?在此处引用12行。 - 我怎么知道结论 #1 是真的?基本规则是什么?
最后,我明白“for 循环”不一定要添加,如果满足条件,它们只会重复。仅在此示例中添加了“for 循环”。
【问题讨论】:
-
我没有测试过。它取自Intel's Verilog 基础教程。时间戳为 38:09。我相信
ends 的数量是正确的。总共应该有 2 个:一个用于for,一个用于begin。注意:为简单起见,我的代码与英特尔的代码略有不同。他们处理 8 位数字
标签: verilog