สรุปการนำเสนอ วันที่ 17 มิ.ย. 2553
"Introduction to Verilog HDL"นำเสนอโดย มณฑล ไวยครุท
การทดลองที่ได้นำเสนอ เป็นตัวอย่างการสร้างวงจรดิจตอลบน FPGA ซึ่งใช้ชิป FPGA ตระกูล Spartan-3E ของ Xilinx และใช้โปรแกรม Xilinx ISE 9.2i ในการสังเคราะห์วงจร สำหรับตัวอย่างการสร้างวงจรที่นำเสนอเป็นการสร้างวงจรหารความถี่ จากความถี่ 50 MHz ให้มีความถี่ 5 Hz โดยใช้ IP Core ของ Xilinx ที่ชื่อว่า DCM (Digital Clock Manager) นำมาใช้งานร่วมกับการสร้างวงจรที่โปรแกรมด้วยภาษา Verilog HDL ซึ่งมีบล็อกไดอะแกรมดังรูป
จากรูปวงจรจะมีการทำงานแบ่งออกเป็น 3 ส่วน คือ
1. DCM เป็นวงจรหารความถี่จากสัญญาณ clk 50 MHz ลง 10 เท่า คือวงจรจะให้ค่า Output มีความถี่เท่ากับ 5 MHz
2. DIV1_1000 เป็นวงจรหารความถี่ในชุดที่ 2 โดยการนำสัญญาณ clk ความถี่ 5 MHz มาหารลง 1000 เท่า ซึ่ง Output ของวงจรในส่วนนี้จะให้ความถี่เท่ากับ 5 KHz
3. DIV2_1000 เป็นวงจรหารความถี่ในชุดที่ 3 โดยการนำสัญญาณ clk ความถี่ 5 KHz มาหารลง 1000 เท่า ซึ่ง Output ของวงจรในส่วนนี้จะให้ความถี่เท่ากับ 5 Hz ซึ่งเป็น Output ของระบบไปใช้งาน
ขั้นตอนการทดลอง1. เริ่มต้นการใช้งาน WebPack ISE ดับเบิ้ลคลิ๊กที่ไอคอน Xilinx ISE 9.2i
2. Project Name: Counter (ชื่อโปรเจคที่ต้องการสร้าง)
3. เลือก Next
4. เติมรายละเอียดดังนี้ ดังรูป
Family : Spartan3E
Device : XC3S500E
Package : FG320
Speed Grade : -4 (10 nano sec : ns.)
Top-Level Module Type : HDL
Synthesis Tool : XST (VHDL/Verilog)
Simulation : ISE Simulation (VHDL/Verilog)
Preferred Language : Verilog
5. เลือก Next
6. เลือก New Source ใช้เมาส์คลิกไปที่ Verilog Module และพิมพ์ชื่อลงใน File Name ชื่อ
Div1_1000
7. เลือก Next จะปรากฏหน้าต่าง Define Module ให้กำหนด ชื่อพอร์ท ทิศทางของพอร์ท ดังนี้
clk_50M : input
rst : input
clk_out : output
8. เลือก Next จะปรากฏหน้าต่าง ที่รายงาคุณสมบัติเบื้องต้นของ Source และเลือก Finish
9. เลือก Next
10.เลือก Finish ดังรูป
11.ทำการเขียนโปรแกรมต่อจาก output (copy file จากไฟล์ชื่อ Div1_1000) ดังตัวอย่าง
module Div1_1000(clk_50M, rst, clk_out);
input clk_50M;
input rst;
output reg clk_out;
reg [9:0] count;
always @ (posedge clk_50M or negedge rst) begin
if(!rst)
clk_out = 0;
else
if(count != 1000)
count = count + 1;
else begin
count = 0;
clk_out = !clk_out;
end
end
endmodule
12. ตรวจสอบความถูกต้อง คิกเมาส์ ที่เครื่องหมายบวกหน้า Implement Design ในหน้าต่าง Processes for Source จะปรากฏดังรูป
13. ทำการ Simulation โดยคลิกขวาที่ Div1_1000 ของหน้าต่าง Source เลือก New Source…. ดังรูป
14. จะปรากฏหน้าต่าง Select Source Type เลือก Test Bench Waveform พิมพ์ชื่อลงใน File Name : sim_Div1 คลิก Next ----> Next ----> Finish
15. จะปรากฏหน้าต่าง initialize Timing และกำหนดค่าดังรูป คลิก Finish
16. จะปรากฏหน้าต่าง และกำหนดค่าที่พอร์ท rst_in ดังรูป
17. ทำการ Save และในหน้าต่าง Source เลือก Behavioral Simulation ซึ่งจะเห็นไฟล์ชื่อ sim_Div1.tb
18. ทำการเลือก sim_Div1.tbw ในหน้าต่าง Process คลิกเครื่องหมายบวกที่ Xilinx Simulation ดับเบิ้ลคลิกที่ Simulate Behavioral Model จะปรากฏผลการ Simulation ดังรูป
19. ทำการเขียนโปรแกรม Div2_1000 โดยกลับไปที่หน้าต่าง Synthesis/Implementation คลิกขวาที่ Div1_1000 ของหน้าต่าง Source เลือก New Source
20. ทำการตั้งชื่อ Div2_1000 และทำการเขียนโปรแกรม (copy file จากไฟล์ชื่อ Div2_1000) และ Save
21. ทำการเรียก DCM โดย คลิกขวาที่ Div1_1000 ของหน้าต่าง Source เลือก New Source
22. เลือก IP(Coregen & Architecture Wizard) พิมพ์ชื่อ File name : Gen_5M และคลิก Next ดังรูป
23. ในหน้าต่าง Select IP เลือก Single DCM v9.1i จากหัวข้อ FPGA Features and Design ---> Clocking ---> Spatan-3 แล้วคลิก Next จนกระทั่ง Finish
24. ในหน้าต่าง Xilinx Clocking Wizard-General Setup ใส่ค่าตามรูป และคลิก Next จนกระทั่ง Finish
25. ทำการเชื่อมต่อวงเข้าด้วยกันด้วยการเขียนโปรแกรม คลิกขวาที่ Div1_1000 ของหน้าต่าง Source เลือก New Source
26. ทำการตั้งชื่อ Topmodel และทำการเขียนโปรแกรม (copy file จากไฟล์ชื่อ Topmodel) และ Save
27. ทำการ Simulation โดยคลิกขวาที่ Topmodel และทำตามข้อที่ 13-18
28. ทำการโปรแกรมลงชิป(Hardware Configuration) คลิกขวาที่ Topmodel ของหน้าต่าง Source เลือก New Source
29. เลือก ไฟล์ UCF พิมพ์ชื่อ File Name : map Next จนกระทั่ง Finish
30. ที่ map.ufc และทำการเขียนโปรแกรม (copy file จากไฟล์ชื่อ map) ลงใน User Constraint File และ Save
31. ทำการสร้าง Configuration File (.bit) เพื่อโปรแกรมลงชิป FPGA ดับเบิ้ลคลิก และทำการโปรแกรมดังรูป