พอรู้ว่าข้อสอบทุกวันน่าจะเหมือนกัน ก็ต้องจัดแล้วนาเซะ~
โจทย์ : จงเขียนโปรแกรมที่แสดงค่าออกมาทาง 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
ยี่สิบนาทีก็ยิ้มแล้ว ขอให้โชคดี ถ้าข้อสอบไม่เปลี่ยนซะก่อนนะ ;)
NarzE 5:19 pm on August 5, 2009 Permalink
thx นุ๊กที่อุ้มกระทู้ให้ครับ *0*
*ถ้าใครคล่องโค้ดแบบอื่นอยู่แล้ว ไม่ต้องจำของเราไปนะ เดี๋ยวลืมแล้วจะงิ่ด