Hardware Syn Lab Midterm Solution 

พอรู้ว่าข้อสอบทุกวันน่าจะเหมือนกัน ก็ต้องจัดแล้วนาเซะ~ โจทย์ : จงเขียนโปรแกรมที่แสดงค่าออกมาทาง 7seg สี่ตัวและ LED โดย - มี 6 States ซึ่งเปลี่ยนทุกๆ 0.5-1 วินาที ในที่นี้จะใช้บิทที่ 28-26 ของ count เป็นตัวกำหนด - มีการแสดงเลข State ออกมาบน LED[7:4] ซึ่งก็คือ 0000 > 0001 > 0010 > 0011 > 0100 > 0101 ใช้ count[28:26] ต่อกับ LED[6:4] (LED[7] ไม่ใช้ ปล่อยมันไป) - มีการแสดงการ Toggle State บน LED[0] ซึ่งจะสลับเปิด ปิดไปทุก State 0>1>0>1>0>1 สังเกตว่ามันเหมือน LED[4] เป๊ะๆ ก็เลยจับ count[26] ไปโคลนนิ่ง ออกมาในนาม Toggle ไปต่อกับ LED[0] ได้เลย สารรูปโค้ด
module test( input clock, output reg [7:0] seg, output reg [3:0] enable, output reg [28:0] count //จัดให้ counter เป็น output ซะเลย ง่ายดี output toggle //ใช้เพื่อ Toggle ); reg [7:0] D3,D2,D1,D0; reg reset; assign toggle = count[26]; always@(posedge clock)begin if(reset) count<=0; else count<=count+1; end always@(posedge clock)begin  //Scanning technic case(count[10:9]) //สแกนทุกๆ count[10:9] งกตัวแปรจริงๆ ตู 0: begin enable<=4′b1110; seg<=D0; end //เลือก Segตัวแรก (ขวาสุด) 1: begin enable<=4′b1101; seg<=D1; end //.. 2: begin enable<=4′b1011; seg<=D2; end //.. 3: begin enable<=4′b0111; seg<=D3; end //เลือก Seg ตัวสุดท้าย (ซ้ายสุด) endcase end always@(*)begin reset=0; //อย่าลืมบรรทัดนี้ เดี๋ยว reset จะไม่กลับเป็น 0 และ Clock จะหายไป! case(count[28:26]) //เอา count มาใช้เป็น Present State 0:begin D3=8′b01010101; D2=8′b10101010; D1=8′b11111111; D0=8′b00000000; end  //แล้วแต่โจทย์กำหนด แล้วเอาไปผูก seg[3],seg[2],seg[1],seg[0] ตามลำดับ จากซ้ายไปขวา 1:begin D3=8′bBLAHBLAH; D2=8′bBLAHBLAH; D1=8′bBLAHBLAH; D0=8′bBLAHBLAH; end 2:begin D3=8′bBLAHBLAH; D2=8′bBLAHBLAH; D1=8′bBLAHBLAH; D0=8′bBLAHBLAH; end 3:begin D3=8′bBLAHBLAH; D2=8′bBLAHBLAH; D1=8′bBLAHBLAH; D0=8′bBLAHBLAH; end 4:begin D3=8′bBLAHBLAH; D2=8′bBLAHBLAH; D1=8′bBLAHBLAH; D0=8′bBLAHBLAH; end 5:begin D3=8′bBLAHBLAH; D2=8′bBLAHBLAH; D1=8′bBLAHBLAH; D0=8′bBLAHBLAH; end 6:begin reset=1; end //พอครบทุก state ก็ reset count ซะ endcase end endmodule
ยี่สิบนาทีก็ยิ้มแล้ว ขอให้โชคดี ถ้าข้อสอบไม่เปลี่ยนซะก่อนนะ ;)