[MUSIC] In this lesson we will complete the specification of our processor. Its structural specification is a block diagram that consists of five blocks. Two of them have already been described, so that it remains to define the function of the three remaining blocks. First, we define the working of the register bank block. This block is a set of 16 memory elements X0, X1, X2 and so on. The values stored within those memory elements can be updated through the Xk input, this one, and can also be read from the outputs Xi and Xj. The instructions that update one of the memory elements, or that read one or two memory elements, have been underlined in the functional specification of the processor. It is important to observe that, as regards the reading operations, in the case of the "data output" instruction, Xj is the rightmost output of the register bank. In the case of the "operation2 instruction, both register bank outputs Xi and Xj are read in parallel, and in the case of the "conditional jump" instructions, Xi is the leftmost output of the register bank. Thus, the register bank inputs are reg_in and the instruction; reg_in comes from the input selection block. And its outputs are left_out and right_out. And this is the functional specification of the register bank. In the case of instructions that update X, but do not read X, that is to say "assign a value" and "data input", then Xk is updated with the reg_in input, but the value of left_out and right_out do not matter. In the case of the DATA_OUTPUT instruction, then the value of Xj must be read, so that right_out is updated. In the case of the "operation" instruction then both outputs are read and furthermore Xk is updated (Xk updated and both outputs are updated). For both conditional jump instructions, the leftmost output. Xi, must be read; so, left_out is updated. And in the case of the "jump" instruction and of the "output value" instruction, the register bank contents are neither updated nor read (in those cases). The specification of the computation resources block is very simple: there is only one instruction, namely "operation i, j, k, f" that uses this block. The computation resources block has two inputs "left_in" and "right_in", connected to the register bank outputs; an input that defines the operation to be performed (addition or subtraction) and an output "result". It is described by this very simple algorithm: if f is equal to 0 then the output result is the sum of the inputs left_in and right_in. And in the case that f is equal to 1 then the result is the difference between left_in and right_in. The "go to" block updates, at each step of the program execution, the value of the output "number". The next instruction number is the current value of number plus 1 in almost all cases, but in the case of a jump, or in the case of a conditional jump when the condition holds true. The "go to" block has two inputs: the instruction and the data that comes from the register bank left most output and whose value "positive" or "negative" is used in the case of conditional jumps. It has an output "number" that represents the number of the next instruction to be executed. And this is its functional specification. If the instruction is "jump", then the next value of "number" is the value N included within the instruction. If the instruction is a conditional jump, then the new value of number is N, a value included within the instruction when the condition holds true, and is the current value plus 1 when the condition doesn't hold true. And finally, in all other cases, the next value of number is the current value plus 1. Summary. The structural description has been completed and the working of the three remaining blocks, the register bank, the computation resource, and the "go to" block, has been described.