ฉันไม่คุ้นเคยกับเครื่องมือของ Xilinx แต่ฉันอยู่กับ Altera ดังนั้นฉันจะบอกคุณเกี่ยวกับพวกเขา Xilinx และอื่น ๆ ไม่ควรแตกต่างกัน
Verilog
สิ่งแรกที่คุณจะต้องทำคือการเรียนรู้Verilog สิ่งนี้จะทำให้คุณปวดหัวเพราะ Verilog (และ VHDL ที่ค่อนข้างคล้ายกัน) ได้รับการออกแบบเป็นแบบจำลองเป็นครั้งแรกภาษาและโครงสร้างจำนวนมาก (เช่น#5
ซึ่งหมายความว่า "รอ 5 ขั้นตอนเวลา" ซึ่งเป็นขั้นตอนเวลามักจะเป็นเสี้ยววินาที) ดังนั้นจึงมีข้อ จำกัด มากมายที่คุณต้องจำไว้เพื่อทำให้รหัส Verilog ของคุณสามารถสังเคราะห์ได้เช่นรวบรวมเป็นบิตสตรีมสำหรับ FPGA
สิ่งที่น่าตกใจที่สุดก็คือสิ่งที่คุณเขียนใน Verilog (และ VHDL) คือ พฤติกรรมที่คุณคาดหวังจากระบบและคอมไพเลอร์จะอ้างเหตุผลที่เหมาะสมจากคำอธิบายของคุณ หากคุณไม่ระวังคุณจะได้รับข้อบกพร่องที่น่ารังเกียจมากมายจากสิ่งนี้
ตัวอย่างเช่น D flip-flop ดูเหมือนว่า:
always @(posedge RESET or posedge CLK)
begin
if(RESET)
Q <= 1'b0;
else if(CLK_ENA)
Q <= D;
end
สิ่งนี้อธิบายถึงวิธีการทำงานของ DFF และคอมไพเลอร์ต้องวิเคราะห์และคิดว่าคุณต้องการ DFF @(...)
จะเรียกว่าเป็นรายการไวซึ่งเป็นรายการของสัญญาณที่เรียกประเมินของบล็อกรหัสที่; ดังนั้นในบล็อกนี้Q
จะเปลี่ยนแปลงเฉพาะในกรณีที่มีขอบที่เพิ่มขึ้นRESET
หรือCLK
(สำหรับการรีเซ็ตที่ใช้งานสูง) หากคุณลืมบางสิ่งในรายการความไว (ซึ่งควรมีตัวแปรทางด้านขวาทั้งหมดโดยไม่มีposedge
หรือnegedge
ตัวดัดแปลงสำหรับบล็อกเชิงตรรกะเชิงผสม) คอมไพเลอร์จะสังเคราะห์แลตช์ตามต้องการแทนที่จะเรียกว่าเกิดข้อผิดพลาด บ้า แต่มันเป็นอย่างนั้นเพราะ Verilog เป็นภาษาจำลองที่ซ่อนรายละเอียดการติดตั้ง (และไม่จำเป็นต้องใช้) VHDL เหมือนกัน แต่ verbose มากขึ้น
ในที่สุด Verilog เวอร์ชั่นใหม่ที่ชื่อว่าSystemVerilogได้รับการเผยแพร่เมื่อไม่กี่ปีที่ผ่านมาซึ่งทำให้การเขียนโค้ดที่สามารถสังเคราะห์ได้ง่ายขึ้นมากมาก ถ้าเป็นไปได้ให้เรียนรู้ภาษานี้เพราะ Xilinx ISE และ Altera Quartus II รองรับทั้งสองอย่าง ปัญหาหลักคือการขาดวัสดุอ้างอิงที่ดีที่สุด
รุ่น SystemVerilog ของ DFF ล้างสิ่งเล็ก ๆ น้อย ๆ สองอย่าง:
always_ff @(posedge RESET, posedge CLK)
begin
if(RESET)
Q <= '0;
else if(CLK_ENA)
Q <= D;
end
โปรดทราบว่าสัญญาณในรายการความไวจะถูกคั่นด้วยเครื่องหมายจุลภาค นี่เป็นเพราะor
สับสนเพราะand
ไม่สามารถทำงานได้ที่นั่น นอกจากนี้ให้สังเกตการแทนที่1'b0
(หนึ่ง0
บิต) ด้วย'0
(สัญลักษณ์ที่ขยายออกไปอย่างไรก็ตาม0
จำเป็นต้องมีบิตจำนวนมากขึ้นอยู่กับสิ่งที่มันถูกมอบหมายให้; มีความยืดหยุ่นมากขึ้นกับโมดูลพารามิเตอร์) ในที่สุดให้สังเกตการแทนที่always
(ซึ่งสามารถนำไปใช้เพื่ออะไรก็ได้; ตรรกะเชิงผสม, แลตช์และฟลิปฟล็อป) always_ff
ซึ่งต้องการเนื้อหาเพื่อสังเคราะห์เป็นฟลิปฟลอป นอกจากนี้ยังมีรายการalways_comb
ที่จะกำจัดรายการความไวเนื่องจากมันเพียงแค่กำจัดความไวจากอินพุตไปยังบล็อก
การออกแบบซอฟต์แวร์ Altera เรียกว่า Quartus II และคุณจะได้รับการมองหาWeb Edition (รุ่นการสมัครรับข้อมูลค่อนข้างแพงและจำเป็นสำหรับรุ่น FPGA ที่เร็วที่สุดหรือล่าสุดเท่านั้น)
ส่วนที่น่าเศร้าคือฉันไม่ได้พบหนังสือที่ดีเกี่ยวกับเรื่องนี้ สิ่งที่ฉันได้เรียนรู้ฉันได้รับจากการรวบรวมสิ่งต่าง ๆ เข้าด้วยกันจากหลาย ๆ แหล่งเช่นหนังสือ Verilog ที่ทำงานได้ไม่ดีในการบอกคุณว่าสิ่งใดที่สามารถสังเคราะห์ได้ Quartus II มีคำสั่ง "แทรกเทมเพลต" ที่แทรกรหัสเทมเพลตสำหรับโครงสร้างทั่วไปหลายอย่างตั้งแต่ D flip-flop ไปจนถึงเครื่องสถานะ
ฮาร์ดแวร์สาธิต
เมื่อคุณติดตั้งโปรเซสเซอร์ใน Verilog คุณจะต้องสร้างมันขึ้นมา ในขณะนี้ให้ Quartus เลือกชิป (คุณต้องเลือกครอบครัว; ฉันแนะนำ Cyclone IV) และ pinout คุณจะรู้ว่าคุณต้องการชิปมากแค่ไหน มันจะบอกคุณว่าองค์ประกอบตรรกะจำนวนมาก flip flops, RAM บิต ฯลฯ ที่คุณใช้ ตรวจสอบให้แน่ใจว่าคุณไม่เกิน 50% สำหรับผู้ใดก็ตาม หากคุณเป็นเช่นนั้นให้ดูที่ชิปที่คอมไพเลอร์เลือกและเลือกชิปที่ใหญ่กว่า (ในองค์ประกอบทางตรรกะ) ตัวถัดไปซึ่งมีพินอย่างน้อยที่สุดเท่าที่จะเป็นไปได้
จากนั้นไปซื้อกระดานสาธิตที่มีชิปอย่างน้อยใหญ่เท่ากับบอร์ดที่คุณสร้างในที่สุด ตรวจสอบว่ามีอุปกรณ์ต่อพ่วงและ / หรือตัวเชื่อมต่อ I / O ที่คุณต้องการ ไม่ใช่เรื่องแปลกที่จะสร้าง daughtercard ที่เสียบเข้ากับตัวเชื่อมต่อส่วนขยายเพื่อมอบฮาร์ดแวร์ที่ขาดหายไป
ตอนนี้คุณได้เลือกฮาร์ดแวร์ของคุณแล้วคิดหา pinout จริงและใช้ Pin Planner เพื่อวางสัญญาณที่ถูกต้องบนหมุดขวา บอร์ดสาธิตจะมีคู่มือผู้ใช้ที่บอกคุณว่าพินใดที่เชื่อมต่อกับอุปกรณ์ใดหรือพินตัวเชื่อมต่อบนบอร์ดสาธิต
เมื่อคุณตั้งค่าพินแล้วให้สร้างขึ้นอีกครั้งเพื่อใช้พินที่คุณต้องการ โปรดจำไว้ว่าสัญญาณบางอย่างเช่นนาฬิการะบบจะต้องมีพินอินพุตโดยเฉพาะ (ดังนั้นพวกมันจึงส่งตรงไปยัง PLL ภายใน)
ใช้โปรแกรมเมอร์เพื่อดาวน์โหลดงานออกแบบของคุณลงใน FPGA โดยตรง (นั่นคือ shift register ที่ฉันพูดถึงไปสักพักหนึ่ง) ตอนนี้คุณอยู่ในวงจรการแก้ไขข้อบกพร่องที่คอมไพล์แล้ว เอาชนะมันจนกว่าจะได้ผล
เมื่อทำงานแล้วคุณสามารถใช้โปรแกรมเมอร์เพื่อดาวน์โหลดรหัสลงในอุปกรณ์การกำหนดค่าออนบอร์ดเพื่อให้โปรแกรมของคุณจะโหลดและทำงานบนเปิดเครื่อง
มันค่อนข้างยาวและฉันหวังว่ามันจะช่วยได้บ้าง มีอะไรมากมายให้เรียนรู้ มันไม่เหมือนกับการเรียนรู้ภาษาการเขียนโปรแกรมใหม่มากเท่ากับการเรียนรู้กระบวนทัศน์การเขียนโปรแกรมใหม่เช่นการเปลี่ยนจากขั้นตอนไปเป็นภาษาที่ใช้งานได้ Verilog เป็นภาษาพร้อมกัน รหัสส่วนใหญ่มักจะดำเนินการอยู่เสมอ
โชคดี!