 This time, we're going to look at what happens when we have a couple of simple crosstalk faults. A stuck-at-zero or a stuck-at-one fault occurs when you have some crosstalk between wires. We've got all sorts of wires that are running all over the place. And if two of them are too close together, then there may be some leakage between them. A stuck-at-one or a stuck-at-zero fault occurs when that leakage is fixed to a specific logical value, sort of like it would be with a power line. The power always has a constant voltage, so that would be interpreted as having a constant logical value. In this case, the result is that some line gets stuck at either the value of zero or one. We'd like to be able to detect when this happens and also determine whether or not our processor is still usable. So for our first example, we'll consider what would happen if the source register one field had bit zero stuck. So this is the least significant bit in this field. This is the five bits that are coming in on our RS field. And we're going to say that the least significant bit there is always stuck at zero or always stuck at one. And we're going to look at what happens. If we begin with the case where this value is stuck at zero, then that will tell me that I can only put in even numbered registers for source one. I can't get any odd numbered registers because those would require that I assert that least significant bit. That's the plus one bit, so that's the one that's going to convert any even number into an odd number. I can detect this by using an operation that has two potential inputs, where the input that I'll get from either of those registers will be different depending on what I get. So I might start by setting the value of, say, register one, the assembler temporary to the value of one, and then doing a simple add instruction. Now I could read off the value of t zero. If t zero is one, then my operation completed successfully. I had one in a t, I have zero and register zero, so one plus zero should give me one. But if I have a stuck at zero fault here, this assembler temporary would turn into another dollar zero. That least significant bit would get changed, so instead of referencing register dollar at, it would end up referencing dollar zero for the first source register. Then zero plus zero would be zero, and I'd be able to detect that I had the stuck at zero fault. Now if I had a stuck at one fault instead, then the least significant bit going into source one would always be odd, and in this case I could do about the same thing to check for this. I can put one into my assembler temporary again, and then add register dollar zero to register dollar zero. If the hardware is working properly, zero plus zero gives me zero, and I end up with zero and t zero. But if it's not, then the least significant bit in this register zero gets set to the value of one. That means that this hardware would then be looking at register one instead of register zero, so it would pull in the one from the assembler temporary, and then one plus zero would give me one. So now we'd probably like to know if this hardware is still usable if we have either the stuck at zero or the stuck at one fault. So in this case, having a stuck at zero or a stuck at one fault means that I'm not going to be able to access half of my registers as the first source register. At first this seems like it might not be too big of a problem. It means I can't access half of my registers as the first source, but I could always use them as the second source. But we should also consider instructions that only use the RS field as a source register. So is this a problem if perhaps a load word instruction can only access even numbered registers or odd numbered registers? That doesn't seem to be too big of an issue. We can just make sure that their data is an even numbered register or an odd numbered register. What if we want to implement a return instruction? So normally I'd have jump register $RA, but $RA is always an odd numbered register. Can I get around that? If I can only access odd numbered registers, then I don't have any problem. If I can only access even numbered registers, then I can't just pull the address out of the $RA register. But I could perhaps put it into a different register. Maybe I can stick it into $8. So in that case I could do an add instruction where my second source is the return address. And I'm just copying it over to t0 because I know I can access t0 from source 1. So in this case it doesn't look like it's going to be a problem whether I can only access even numbered registers or odd numbered registers. But that's not always going to be the case.