Я буду использовать этот пример кода, чтобы задать некоторые общие вопросы о циклах.
Следующий код предназначен для создания простой функции умножения между двумя 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
очевидно) добавить к end результату 'for l oop' (который начинается в строке 10
) - Определение
r
из строки 7
или 9
не переносятся в строку 12
в 'for l oop' - Каждая итерация (или "шаг") 'для l oop 'не переносит вычисленное значение для
r
из до значения индекса i
в последующее значение индекса i
Если эти три вывода верны, то у меня есть следующие вопросы:
- Суммируйте ли 'For Loops' свои итерации после всех возможных шагов?
- Делать 'Для циклов' , а не переносить информацию об идентификаторе в в 'для l oop' , полученном из одного шага , на следующий, несмотря на один и тот же идентификатор появляется в обоих шагах (
r
в данном случае)? Ссылаясь на строку 12
здесь. - Откуда мне знать, что вывод № 1 был правдой? Что является основным правилом (ами)?
Наконец, я понимаю, что «для циклов» не обязательно добавлять, они просто повторяются, если выполняется условие. Только в этом примере добавление 'for l oop'.