 In this video, we're going to explain the difference between what is known as HardWire control unit and micro program. And as the name suggests, these are two possible strategies to implement the control that is in charge of generating all the control signals that are needed to make sure that the data path performs the operations that is required. And with the data path, we include also the bus and the registers. So what we know so far about how instructions get executed, if I have a certain instruction, this typically translates into a collection of signal control signals. We can draw them like an array, this would be an array of multiple signals, and some of them need to be active at certain times, let's say at this time we have these three. In the next step, we have the same array, and in this case, this one, this one, this one, and this one or one. So basically, this is an array of control signals. And we have several of these steps until we reach the last step of the instruction, we have maybe a one here, a one here, a one here, and a one here. So these sequence of steps taken to execute these instructions reflect the values of zeros and ones that have to be assigned to these control signals. Which block is in charge of doing this? The block in charge of generating these signals is the control unit. So at each time, the execution of an instruction, the control unit has to generate a sequence, a predefined sequence of these control signals. So another way of looking at it is that the control unit has to go or traverse the sequence and change zeros and ones and generate at each point a different array with the values zeros and ones. Now there are two possible strategies to implement this functionality within a processor. Number one is with a finite state machine, a construction that we have studied a while ago. This construction uses a block of combinational logic that receives input mainly from the instruction register and also from the status of the calculations. This logic then produces an array of signals which are the control signals. And this finite state machine of course has some register here to store the state in which this machine is. Now with this technique over here, what we can see is that the control signals correspond to all the signals that are required for executing an instruction and we can foresee how this finite state machine can be implemented such that depending on the value that is present on the instruction register, this machine will work through these steps and produce these signals or depending on the here will be different sequence of signals but they will implement or they will control the data path such that it implements or it executes the instruction loaded in the register. This approach here is what is widely known as hard wire control. The reason why it's hard wire is because all the intelligence to generate these sequence of signals is contained within this finite state machine. The alternative approach number two, what is known as a micro program and the idea is very simple. We are basically applying the capacity of the microprocessor again but this time to generate these sequence of instructions. So the idea is the following. We will have the notion of a micro instruction. A micro instruction will have certain fields which are called micro operation one, micro operation two, a jump if needed and the destination of it. Now this micro instruction will correspond to a set of fixed control units, sorry control signals. In other words, is as if one of these vectors that contains all the zeros and ones required to control the data path is then encoded as one much more compact code. So we assign one code per set of signals and this code is put together forming a micro instruction. Now what we hear is a sequence of micro instructions, like the one shown here and this sequence of micro instructions is known as a micro program. So what it ends up happening here is that in order for the data path to execute a given instruction, this given instruction will execute a given micro program and what we have here is a circuit that reads a micro instruction, generates the control signals and then execute next micro instruction or jump. So this is another approach to generate the sequence of these arrays of signals rather than having a finite state machine that contains these steps encoded in this logic. What we have is a program which is called the micro program and this program is sitting on a memory and the micro processor hanging on the value of the instruction register always the instruction register decides to execute this micro program and this micro program will be interpreted and translated into the array of zeros and ones that are the appropriate ones, the appropriate control signals for this data path to execute the given instruction. So these in conclusion are the two approaches for designing the control unit of a micro processor. We either have it hardwired as a finite state machine or we follow a micro program approach in which all these arrays are encoded into zeros and ones and these codes are generated and generate the sequence.