Hello and welcome to this short lecture on legal and illegal conditions of a checker. So, I have declared a checker for my check. And inside that I have a variable my bit of type bit. Now in the initial block, you would like to assign a value to this variable my bit, but that is illegal. Now, that seems like a real limitation. But there are ways around it.
And one of the ways that you can assign a value directly during the declaration of the variable. So if you say bit my beta equal to one, then that is legal. But what if you want to have some kind of a complex condition here, some addition, subtraction, or shift operation or something like that, you cannot do that directly in the initial block. So there is a way around it that I'll show you in the next slide. In addition I have to get the same checker here with the same bit my bit. And I'm instantiating my check here, with MC k one being the instance name, I'd like to display my bit from the instance MC k one.
So normally, you would do this if you had a module and everything would be fine. But you cannot hierarchically reference a variable in the instance of a checker. That is illegal. And you can pass declare a formal here and then get an actual during the instantiation. And that is another way that you can access internal base, but that's kind of a workaround, you cannot directly access hierarchical bits or hierarchical references. So as I showed in the previous slide, if you do want to assign up value to a variable inside the initial blog, you can do that we are using a function.
So you can have a function call on the right hand side, and then you can assign whatever value the function returns to your variable. So here what I've done is I have declared a function called return a value, and I'm returning a plus one. So a will be equal to a plus one. But the important thing to note here is that big a, I have not passed it, when I call return a value because it is visible since the function is within the scope of the checker. So that's a good feature. And so this is one way you can assign values to variables in the initial block and then you can have anything complex that you like here or you can do anything you like to go in a function.
This is a very simple point here. I have declared Add my bus to be of type logic a bit wide. And what I'm saying is that at the edge of claw assign one colon zero equal to zero and assign seven colon one equal to one. And you know notice that the big one is overlapping between these two parts selects, that is illegal in a module. This is also from a design point of view illegal button system or one complaint. The if you run a link type to then the Link Type tool will flag this as a violation.
Because you know you probably did that by a typewriter for example. So, if you do not overlap one colon zero and seven colon two, then everything is fine. Meaning you can assign values to parts elects in a checker. This is another finer point. Again, in the checker, my check I have two inputs buss and I bought our four bits wide. Now inside the initial block, I'm saying that bus I bus that uses is an index will be some return value.
This part is the same as what I showed you in the earlier slide. So I'm just returning bus plus one. Now, in my module, my mod, I'm instantiating the checker twice my check am one and here I'm passing two variables data from bus and bus index. Well, these index i cannot be a variable. So you cannot pass a non constant value on bus index bus index is the actual for I formal, but you can indeed Pass a constant value on the index. So the rule of thumb is that it is illegal to pass non constant index value to a checker variable which is used on the left hand side of an assignment.
There is another point also that if you insane shit a checker meaning let's say you want to create multiple checkers from a loop, then the loop index cannot be used as actual for the checker variable. So that's another thing that you may miss. And hopefully this clarifies it. So that's all very short and sweet lecture. Hopefully it's of help to you. Thank you.