Brainer: Nu med Verilog

lør apr 17, 2010 (Anders Enggaard)

Vores brainer med touch-følsom ram gav mange gode svar. Vi viste et diagramudsnit, hvor fejlen var en ren klassiker: et ben var markeret som “RFU” i symbolet og ikke forbundet – men i den virkelig komponent var det et vigtigt input til noget bank select. Glem aldrig aldrig “symbol review” for alle symboler i diagrammet.

Denne gang har vi en helt anden problemstilling – i Verilog!!!

Vi plejer at sige at alle der kan VHDL kan lære Verilog på under en uge… men kan du regne den her ud i en fart?

input [3:0] sig_a;
input [3:0] sig_b;
output [3:0] sig_c;
output sig_d;
assign sig_c = sig_a && sig_b;
assign sig_d = (sig_c == 4'b0010) ? 1'b1 : 1'b0;

For hvilke værdier værdier af sig_a og sig_b er sig_d høj?

Svar i kommentarerne – først med et rigtigt svar høster æren.

Kommentarer (3)

  1. Morten Piil added on 20. april 2010

    Tja, nu kan jeg ikke VHDL eller Verilog – men hvis vi nu går ud fra at det opfører sig som C og C++.
    Så bliver sig_d aldrig høj, fordi der er skrevet && som betyder logisk and, og som giver svaret 1 eller -1 (afhængig af compiler) hvis a og b er begge er forskellige fra 0. Så svaret bliver aldrig 2. og derfor bliver sig_d aldrig 1.
    Mit gæt er at der skulle have stået et enkelt &, som ville have betydet bitvise and, og ville have lavet d høj hvis bit nr. 2 var høj i begge signaler og resten af bitene var 0 eller forskellige i de to signaler.

  2. Peter Stuge added on 20. april 2010

    Yep, det passer fint Morten.

  3. Thomas Jespersen added on 20. april 2010

    && kan ikke give svaret -1 i C.
    1 && 1 = 1
    1 && 0 = 0
    0 && 1 = 0
    0 && 0 = 0
    Kernighan & Ritchie side 207

Hvad mener du?