Suponiendo que me hayan dado tres números de dos bits, a1a0, b1b0, c1c0, ¿cuál es la mejor manera de diseñar un circuito que obtenga los dos más grandes de los tres y los agregue?
Suponiendo que me hayan dado tres números de dos bits, a1a0, b1b0, c1c0, ¿cuál es la mejor manera de diseñar un circuito que obtenga los dos más grandes de los tres y los agregue?
Podemos buscar los dos más grandes o podemos buscar el más pequeño y sumar los otros dos.
En mi opinión, encontrar el más pequeño se siente más intuitivo que encontrar los dos más grandes.
Veamos en pseudocódigo cómo se puede lograr eso.
//find smallest, and sum the others
s0=0 //introduce another 2-bit variable called s
s1=0 //it essentially keeps the sign of the addition between the comparisons
if(a>b){
s0=1
}
if(b>c){
s1=1
}
//mini truth table
//s1 s0 verdict sum
// 0 0 b<=c a<=b => a is smallest b+c
// 0 1 b<=c a>b => b is smallest a+c
// 1 0 b>c a<=b => either a or c is smallest b+?
// 1 1 b>c a>b => c is smallest a+b
// looks like we need a third check for s1 = 1 and s0 = 0
s2=0
if(a>c){
s2=1
}
//s2 s1 s0 verdict sum
// 0 1 0 b<=c a<=b a<=c => a is smallest b+c
// 1 1 0 b<=c a<=b a>c => c is smallest b+a
Así que aquí está mi resultado en una pizarra blanca.
Siesteesunniveldemasiadoaltoparasusnecesidades,luegoconviertaelmuxenlaspuertasANDdelasqueestáhechoyhagasusumadorde2bitsconlaspuertasdelasqueestáhecho.
Nofue100%correctoenelprimerintento,meequivoquécons1=1ys0=0.Eignorés1=1ys0=1.Estoseráapruebadebalasydefinitivamentefuncionará.Heactualizadoelpseudocódigoanteriorparaqueseacorrecto.
Aquíestáeldiagramadebloquescorrecto.
Lea otras preguntas en las etiquetas digital-logic design multiplexer comparator