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.
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.
Yep, det passer fint Morten.
&& kan ikke give svaret -1 i C.
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
Kernighan & Ritchie side 207