[Chisel] Queue.enq.valid vs deq.valid
Overview
When communicating data using a Queue, the following operations are possible:
Queue.io.enq.valid: When set to false, data will not be added.
Queue.io.deq.valid: When set to false, data will not be retrieved.
Here is a summary of these uses:
Queue.io.enq.valid
Set this to false when you " don't want to put data in if a certain condition is met." Since the data will not be put into the queue, it will not be taken out and processed.
Queue.io.deq.valid
Set this to false when you "don't want to retrieve the data now". In other words, you will retrieve it sometime.
Unlike enq.valid, the queue is occupied and the next data cannot be retrieved until it is retrieved.
Which to use
If the data doesn't meet the conditions for processing, set enq.valid to false.
If the data will be processed but not now, set deq.ready to false.
Of course, you could check the condition after retrieving it and discard it if it is not met, but this would waste one cycle and take up space in the queue.
Recent Posts
See AllPhenomenon There is an array Check whether the index variable is within the size of the array, and access the element only if it is...
What I want to do There are multiple similar units Most of processes are the same, only some differences. Select an appropriate unit...
What want to do ★ There are multiple modules of the same type Select one of these that meets the specified condition. To achieve this, I...
Comments