prosesador en digitales
DESCRIPTION
estructura digital del proceso de calculos en la electronicaTRANSCRIPT
P3.1 ESPECIFICACIÓN ESTRUCTURAL(continuación)
Lluís TerésInstituto de Microelectrónica de Barcelona, IMB-CNM (CSIC)Universitat Autònoma de Barcelona (UAB)
recursos de cálculo
go to
selección salidaselección entrada
{X(i)}
banco de registros
2 DESCRIPCIÓN DE BLOQUES (cont.) P3.12.3 BANCO DE REGISTROS number := 0;
loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
2
(banco de registros)
number := 0;loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
Especificación Funcionalloopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := reg_in; left_out := don't care; right_out := don't care;
when (DATA_INPUT, k, j) => X(k) := reg_in; left_out := don't care; right_out := don't care;
when (DATA_OUTPUT, i, j) => left_out := don't care; right_out := X(j);
when (OUTPUT_VALUE, i, A) => left_out := don't care; right_out := don't care;
when (OPERATION, i, j, k, f) => left_out := X(i); right_out := X(j); X(k) := reg_in;
when (JUMP, N) => left_out := don't care; right_out := don't care;
when (JUMP_POS, i, N) => left_out := X(i); right_out := don't care;
when (JUMP_NEG, i, N) => left_out := X(i); right_out := don't care;
end case;end loop;
P3.1banco de registros
{X(i)}
3
2.4 RECURSOS DE CÁLCULO number := 0;loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
P3.1
go to
selección salidaselección entrada
{X(i)}
banco de registros
recursos de cálculo
4
(recursos de cálculo)
number := 0;loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
Especificación Funcionalif f = 0 then result := left_in + right_in;else result := left_in ‐ right_in;end if;
P3.1
recursos de cálculo
5
2.5 GO TO (instrucción siguiente) number := 0;loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
P3.1
go to
selección salidaselección entrada
{X(i)}
banco de registros
recursos de cálculo
go to
6
(go to) P3.1
number := 0;loopcase program(number) iswhen (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if data > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if data < 0 then number := N; else number := number + 1; end if;
when others => number := number + 1;
end case;end loop;
number := 0;loopcase program(number) iswhen (ASSIGN_VALUE, k, A) => X(k) := A; number := number + 1;
when (DATA_INPUT, k, j) => X(k) := IN(j); number := number + 1;
when (DATA_OUTPUT, i, j) => OUT(i) := X(j); number := number + 1;
when (OUTPUT_VALUE, i, A) => OUT(i) := A; number := number + 1;
when (OPERATION, i, j, k, f) => X(k) := f(X(i), X(j)); number := number + 1;
when (JUMP, N) => number := N;
when (JUMP_POS, i, N) => if X(i) > 0 then number := N; else number := number + 1; end if;
when (JUMP_NEG, i, N) => if X(i) < 0 then number := N; else number := number + 1; end if;
end case;end loop;
7
RESUMEN
Descripción estructural completada
Descripción funcional de los bloques: Banco de redistros, Recursos de cálculo, Bloque go to.
P3.1
8