Comparar y sumar números usando multiplexores y comparadores

0

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?

    
pregunta Brout

1 respuesta

0

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.

  • Elsigno/significaelanchodebitsdelcable.
  • Laxrojasignificaquetiroelresultado.
  • Algunasdelasentradasalosagregadoresobtuvieronun-,esoeselcomplementode2.

Siesteesunniveldemasiadoaltoparasusnecesidades,luegoconviertaelmuxenlaspuertasANDdelasqueestáhechoyhagasusumadorde2bitsconlaspuertasdelasqueestáhecho.

Editar

Nofue100%correctoenelprimerintento,meequivoquécons1=1ys0=0.Eignorés1=1ys0=1.Estoseráapruebadebalasydefinitivamentefuncionará.Heactualizadoelpseudocódigoanteriorparaqueseacorrecto.

Aquíestáeldiagramadebloquescorrecto.

    
respondido por el Harry Svensson

Lea otras preguntas en las etiquetas