Sida 1 av 1

3 to 1 MUX i VHDL, latch?

Postat: 17 december 2008, 16:56:20
av arte
Hej,

Jag skall göra 3-1 MUX i VHDL men är lite osäker.

Jjag behöver MUXa 3 signaler, en 4MUX är onödig då.

case cmd is
when "00" =>
r<=data1;
when "01" =>
r<=data2;
when "10" =>
r<=data3;
when "11" =>
when others =>
end case;

Detta kommer att skapa en latch, vad exact innebär detta i hårdvara?
Kommer detta att innebära att när cmd = "11" så kan vad som helst finnas på ut porten?

CMD kommer aldrig att bli "11"

Det skall tilläggas att det är i en FPGA, och att en 4-1 MUX tar 64 LUTS medans ovanstående tar 65.

Postat: 17 december 2008, 17:42:33
av blueint
I din kod borde rimligtvis den gamla statusen bli bevarad i fallet "11". Och för att åstdakomma det kommer förmodligen en minnesbit att allokeras. Vilket tar mer utrymme. Så kanske "r<=data0" för "11" vore en lösning?

Du får låsa ner strukturen så att endast 00, 01, 10 kan förekomma.

Postat: 17 december 2008, 17:52:58
av rehnmaak
Strunta i when "11" och ersätt med when others => null så borde det fungera:

Kod: Markera allt

case cmd is 
  when "00" => 
     r<=data1; 
  when "01" => 
    r<=data2; 
  when "10" => 
    r<=data3; 
  when others => 
    null;
end case; 

Postat: 17 december 2008, 20:23:53
av arte
grejen är att jag får en warning av synth verktyget där den säger att en latch kan skapa timing problem.

Men ifall jag aldrig kommer skicka in värder "11" så kanske det inte spelar någon roll??

Postat: 18 december 2008, 07:02:10
av toffe
Du får en latch om det finns vägar i din kod där signalen inte tilldelas. Då måste ju signalen behålla sitt gamla värde och för det krävs ett minneselement (latch).

Oftast är det inte det du vill så undvik det. Latchar skapar problem för timinganalysen dessutom ...