Sorry for the confusion and vague ness.
What I have is eight command decoders which watch eight data steams and if a command decoder detects data for it the data is latched to a 16 byte register. Each command decoder operates asynchronous with respect to the others. Because each command decoder is connected to a different receiver which has it's own clock recovery unit and transmiton paths to each receiver can very.
What we are trying to do is determine what the most common 16 bit value among all eight of the command decoder outputs. This is to serve as a redundancy of eight in case of errors and or one or more of the receivers die. I want to do the comparison based on all 16 bits together not just bit wise in case of weird errors.
Example of operation:
channel 1, 3, 4,5,7,8 have the same 16 bit value and (1≠2≠6) so use the value on channel 1
channel 3, 4, 5 have the same 16 bit value and all the others are different from each other ( 1 ≠2 ≠5 ≠6 ≠7≠8 i.e. channel 1,2,6,7,8 ether died or have errors) so use the value on channel 3.
I would like to do this comparison asynchronous with a resettable one shot (triggers by the Commander decoders data ready output) to latch the final result in. This is because in our application memory elements are to be avoided when ever possible. The reason for the resettable one shot is so the final value will not be latched in or acted upon, what ever the case may be, until most or all of the command decoders revive the command word (another design problem all together...) .
I think I have come up with a solution which simulates functional fine but it is a horrific monstrosity of a piece of VHDL code which I had to generate in c...
If their are any Ideas of elegant/gate saving solutions out their it would be appreciated.
Lastly the final target is an ASIC but i posted here because the question seems more VHDL related an this is where I see most of that discussion. I am new and not very BBS savvy so flame me if I am out of place.
Thanks Jason
---------- Post added at 05:20 ---------- Previous post was at 05:10 ----------
Sorry for the confusion and vague ness.
What I have is eight command decoders which watch eight data steams and if a command decoder detects data for it the data is latched to a 16 byte register. Each command decoder operates asynchronous with respect to the others. Because each command decoder is connected to a different receiver which has it's own clock recovery unit and transmiton paths to each receiver can very.
What we are trying to do is determine what the most common 16 bit value among all eight of the command decoder outputs. This is to serve as a redundancy of eight in case of errors and or one or more of the receivers die. I want to do the comparison based on all 16 bits together not just bit wise in case of weird errors.
Example of operation:
channel 1, 3, 4,5,7,8 have the same 16 bit value and (1≠2≠6) so use the value on channel 1
channel 3, 4, 5 have the same 16 bit value and all the others are different from each other ( 1 ≠2 ≠5 ≠6 ≠7≠8 i.e. channel 1,2,6,7,8 ether died or have errors) so use the value on channel 3.
I would like to do this comparison asynchronous with a resettable one shot (triggers by the Commander decoders data ready output) to latch the final result in. This is because in our application memory elements are to be avoided when ever possible. The reason for the resettable one shot is so the final value will not be latched in or acted upon, what ever the case may be, until most or all of the command decoders revive the command word (another design problem all together...) .
I think I have come up with a solution which simulates functional fine but it is a horrific monstrosity of a piece of VHDL code which I had to generate in c...
If their are any Ideas of elegant/gate saving solutions out their it would be appreciated.
Lastly the final target is an ASIC but i posted here because the question seems more VHDL related an this is where I see most of that discussion. I am new and not very BBS savvy so flame me if I am out of place.
Thanks Jason