การเรียนรู้การเขียนโปรแกรมสำหรับ FPGA โดยใช้ SystemVerilog เอฟพีจีเอ มาทำความเข้าใจว่าวงจรลอจิกที่ตั้งโปรแกรมได้ทำงานอย่างไรและเหตุใดจึงดี การใช้ PLS ในอุปกรณ์สมัยใหม่

FPGA (Programmable Logic Integrated Circuit) เป็นวงจรรวมที่ออกแบบมาเพื่อสร้างวงจรดิจิทัลจากคำอธิบายในภาษาการเขียนโปรแกรมพิเศษ กล่าวอีกนัยหนึ่ง FPGA คือชิปที่ดูเหมือนว่าจะประกอบด้วยองค์ประกอบหลายอย่าง เช่น 74HCxx องค์ประกอบเชิงตรรกะเหล่านี้จะเป็นอย่างไร การเชื่อมต่อระหว่างองค์ประกอบเหล่านั้น และการเชื่อมต่อใดที่วงจรผลลัพธ์จะมีกับโลกภายนอกจะถูกกำหนดในขั้นตอนการเขียนโปรแกรม FPGA

บันทึก:เท่าที่ฉันสามารถหาได้ ในภาษารัสเซียในปัจจุบัน คำว่า FPGA และ FPGA (Field-Programmable Gate Array, User-Programmable Gate Array) ถือว่าใช้แทนกันได้ ซึ่งจะถูกนำมาใช้เพิ่มเติมในข้อความ อย่างไรก็ตาม มันก็คุ้มค่าที่จะรู้เกี่ยวกับการมีอยู่ของมุมมองทางเลือกอื่นตามที่ FPGA (FPGA) เป็นหนึ่งใน FPGA (PLD, อุปกรณ์ลอจิกที่ตั้งโปรแกรมได้)

พื้นฐาน FPGA

ในการเขียนโปรแกรม FPGA จะใช้ภาษาคำอธิบายฮาร์ดแวร์ (HDL, ภาษาคำอธิบายฮาร์ดแวร์) ในหมู่พวกเขา Verilog ที่ได้รับความนิยมมากที่สุด (และภาษาถิ่นโดยเฉพาะ SystemVerilog) รวมถึง VHDL ภาษามีความคล้ายคลึงกันหลายประการ แต่มีไวยากรณ์ต่างกันและมีรายละเอียดบางอย่างต่างกัน หาก Verilog เป็น C ของโลกแห่งคำอธิบายฮาร์ดแวร์ ดังนั้น VHDL ก็คือ Pascal เท่าที่ฉันรู้ VHDL ค่อนข้างได้รับความนิยมน้อยกว่า โดยเฉพาะอย่างยิ่งเนื่องจากมีคำฟุ่มเฟือยเมื่อเทียบกับ Verilog ในบรรดาข้อดีของ VHDL (หรือข้อเสียขึ้นอยู่กับใคร) ที่เราสามารถตั้งชื่อได้ เข้มงวดการพิมพ์แบบคงที่ Verilog บางครั้งอนุญาตให้มีการคัดเลือกประเภทโดยนัย เพื่อทำการเปรียบเทียบกับ C และ Pascal ต่อไป ภาษาก็ไม่ได้แตกต่างกันมากจนคุณไม่สามารถเรียนรู้ทั้งสองอย่างได้

บน ช่วงเวลานี้ผู้ผลิต FPGA ชั้นนำ ได้แก่ Altera (ปัจจุบันเป็นเจ้าของโดย Intel) และ Xilinx จากข้อมูลจากแหล่งต่าง ๆ รวมกันแล้วครองตลาดได้ไม่ต่ำกว่า 80% ผู้เล่นอื่น ๆ ที่น่าสังเกต ได้แก่ Actel (ได้รับจาก Microsemi), Lattice Semiconductor, Quicklogic และ SiliconBlue คุณสามารถทำงานกับฮาร์ดแวร์ Xilinx จากสภาพแวดล้อมการพัฒนา Xilinx เท่านั้น (เรียกว่า Vivado) และสภาพแวดล้อมการพัฒนา Altra (เรียกว่า Quartus) เข้าใจเฉพาะฮาร์ดแวร์ Altera เท่านั้น นั่นคือการล็อคผู้ขายแบบเต็ม และเมื่อเลือก FPGA เฉพาะสำหรับโครงการของคุณ คุณจะเลือกเครื่องมือการพัฒนาของผู้ผลิตที่เกี่ยวข้องโดยอัตโนมัติ การสนับสนุนทางเทคนิค, เอกสารประกอบ เงื่อนไขการอนุญาตให้ใช้สิทธิ์ซอฟต์แวร์ นโยบายเกี่ยวกับการยุติการสนับสนุนฮาร์ดแวร์ และอื่นๆ

FPGA มักใช้ในงานที่คุณต้องการเพิ่มความเร็วในการคำนวณบางอย่างอย่างมากโดยนำไปใช้ในฮาร์ดแวร์โดยตรง ตัวอย่างเช่น FPGA พบการใช้งานอย่างกว้างขวางในด้านการประมวลผลสัญญาณ เช่น ในออสซิลโลสโคป เครื่องวิเคราะห์สเปกตรัม เครื่องวิเคราะห์ลอจิก เครื่องกำเนิดสัญญาณ วิทยุที่กำหนดโดยซอฟต์แวร์ และแม้กระทั่งจอภาพบางจอ โดยเฉพาะอย่างยิ่ง LimeSDR ใช้ Altera Cyclone IV และออสซิลโลสโคป Rigol DS1054Z ใช้ Xilinx Spartan-6 รวมถึง ProASIC 3 จาก Actel แอปพลิเคชันอื่นๆ ที่ฉันเคยได้ยิน ได้แก่ คอมพิวเตอร์วิทัศน์ การรู้จำเสียง และชีวสารสนเทศศาสตร์ มีโครงการอื่นๆ โดยเฉพาะการพัฒนาเว็บเซิร์ฟเวอร์และ DBMS ที่ทำงานบน FPGA แต่เท่าที่ฉันรู้ ทิศทางนี้ยังอยู่ในช่วงทดลองอยู่มาก

Xilinx หรือ Altera?

ดังคำกล่าวที่ว่า ลินุกซ์ที่ดีที่สุดอันที่กูรู Linux เพื่อนของคุณใช้

เพื่อนของฉันซึ่งเป็นกูรู FPGA ในนามของ Dmitry Oleksyuk แนะนำให้ฉันเริ่มต้นด้วยบอร์ดพัฒนา Arty Artix-7 จาก Digilent FPGA ที่ใช้ในมันคือ Artix-7 จาก Xilinx Digilent เองไม่ได้จัดส่งไปยังรัสเซีย แต่อุปกรณ์ดังกล่าวมีจำหน่ายใน AliExpress แม้ว่าจะมีมาร์กอัปที่เห็นได้ชัดเจน (ราคาอย่างเป็นทางการคือ $ 99) มีขายบนอีเบย์ด้วย นี่เป็นบอร์ดที่ทรงพลังพอสมควรซึ่งมีราคาค่อนข้างสมเหตุสมผล

ความเป็นจริงที่สนุก!หากคุณต้องการเขียนโปรแกรมใน Verilog หรือ VHDL คุณไม่จำเป็นต้องซื้อบอร์ด FPGA ใดๆ ในตอนแรกคุณสามารถ จำกัด ตัวเองให้อยู่ในเครื่องจำลองได้ซึ่งจะกล่าวถึงงานด้านล่าง

หนึ่งในคุณสมบัติที่น่าสนใจของบอร์ดคือการจัดเรียงซ็อกเก็ตในลักษณะที่เข้ากันได้กับโล่ Arduino สิ่งที่รวมอยู่ในบอร์ดคือส่วนแทรกที่คุณสามารถรับใบอนุญาตสำหรับ Vivado ซึ่งเปิดความสามารถทั้งหมดของมัน ใบอนุญาตมีอายุหนึ่งปีนับจากเวลาที่เปิดใช้งาน และยังเชื่อมโยงกับคอมพิวเตอร์เครื่องเดียวตามประเภทระบบปฏิบัติการและที่อยู่ MAC

เมื่อจัดส่งแล้ว ฉันได้ยินมาว่าอุปกรณ์ที่มี FPGA บนเครื่องมีโอกาสสูงที่จะไม่ผ่านศุลกากร ร้านค้า AliExpress ซึ่งเป็นลิงก์ที่ฉันให้ไว้ข้างต้นจัดส่งบอร์ดไปยังรัสเซียผ่านทาง บริการจัดส่งสปสอาร์. เพื่อผ่านพิธีการศุลกากร จำเป็นต้องกรอกแบบฟอร์มออนไลน์พร้อมข้อมูลหนังสือเดินทาง (ข้อมูลเท่านั้น ไม่มีรูปถ่าย) และหมายเลขโทรศัพท์ติดต่อ ตามที่กฎหมายรัสเซียปัจจุบันกำหนด หลังจากนั้น คณะกรรมการก็ถูกส่งตรงไปที่ประตูโดยไม่ต้องถามคำถามใดๆ

การติดตั้งวิวาโด

สภาพแวดล้อมการพัฒนา Vivado พร้อมให้ดาวน์โหลดจากเว็บไซต์ Xilinx เตรียมพร้อมจิตใจสำหรับความจริงที่ว่าก่อนที่จะดาวน์โหลดคุณจะต้องลงทะเบียนและกรอกแบบฟอร์มที่มีรายละเอียดพอสมควรเกี่ยวกับตัวคุณเอง ดาวน์โหลดไฟล์เก็บถาวรชื่อ “Vivado HLx 2017.2: ตัวติดตั้ง OS ทั้งหมดดาวน์โหลดไฟล์เดียว” อย่าสับสนกับ “โซลูชัน Vivado Lab” บางอย่างโดยไม่ได้ตั้งใจ เพราะนี่ไม่ใช่สิ่งที่คุณต้องการอย่างแน่นอน ไฟล์เก็บถาวรมีน้ำหนักมากกว่า 20 GB ดังนั้นเราจึงต้องอดทน

แตกไฟล์เก็บถาวรและเรียกใช้โปรแกรมติดตั้ง ติดตั้ง Vivado HL System Edition เวอร์ชันเต็มจะใช้พื้นที่ดิสก์ถึง 47 GB โดยส่วนตัวแล้ว ฉันได้ยกเลิกการเลือกชุดพัฒนาซอฟต์แวร์และเหลือการสนับสนุนสำหรับอุปกรณ์ซีรีส์ 7 เท่านั้น ซึ่งลดขนาดลงเหลือ 12 GB เมื่อมองไปข้างหน้าเล็กน้อย ฉันจะทราบว่าการกำหนดค่านี้ค่อนข้างเพียงพอแล้ว

ก่อนที่จะเปิดตัว Vivado คุณต้องเพิ่มการรองรับ Arty Artix-7 เนื่องจากเมื่อแกะกล่องจะไม่รู้อะไรเกี่ยวกับบอร์ดนี้เลย มันทำสิ่งนี้:

cd ~/ opt/ xilinx/ Vivado/ 2017.2 / data/ บอร์ด/ board_files
wget https:// github.com/ Digilent/ vivado-boards/ archive/ master.zip
คลายซิป master.zip
mv vivado-boards-master/ ใหม่/ board_files/* ./
rm -r vivado-boards-master
rm master.zip

เรายังดาวน์โหลดและบันทึกไฟล์ Arty_Master.xdc ไว้ที่ใดที่หนึ่งด้วย เราจะต้องการมันในภายหลัง ไฟล์นี้มีคำอธิบายของ LED, สวิตช์ และอื่นๆ ที่อยู่บนบอร์ด หากไม่มีมัน การกะพริบไฟ LED บน Verilog จะไม่ใช่เรื่องง่าย

โปรเจ็กต์แรกบน SystemVerilog

ใน Vivado เราพูดว่า File → New Project... เลือก RTL Project เป็นประเภทโปรเจ็กต์ ทำเครื่องหมายที่ช่อง Do not specified Sources at this Time ในกล่องโต้ตอบการเลือกประเภทบอร์ด ให้ค้นหา Arty ในรายการ

ก่อนอื่น ให้เพิ่มไฟล์ XDC ที่ดาวน์โหลดไว้ก่อนหน้านี้ลงในโปรเจ็กต์ คัดลอกไปยังไดเร็กทอรีที่มีโปรเจ็กต์ จากนั้นเราพูดว่า File → Add Sources... → Add or create constraints → Add Files ค้นหาสำเนาของไฟล์ คลิก Finish ในแผนผังไฟล์โปรเจ็กต์ (แหล่งที่มา) ในกลุ่มข้อจำกัด ไฟล์ Arty_Master.xdc หรืออะไรก็ตามที่คุณตั้งชื่อสำเนาจะปรากฏขึ้น เปิดและยกเลิกหมายเหตุบรรทัดทั้งหมดในกลุ่มสัญญาณนาฬิกา สวิตช์ และไฟ LED

ต่อไปเราพูดว่าไฟล์ → เพิ่มแหล่งที่มา… → เพิ่มหรือสร้างแหล่งการออกแบบ → สร้างไฟล์ ในประเภทไฟล์ ให้เลือก SystemVerilog ป้อนข้อความเช่น hello ในชื่อไฟล์ เราพูดว่าเสร็จสิ้น ถัดไป กล่องโต้ตอบกำหนดโมดูลจะปรากฏขึ้น ซึ่งจะแจ้งให้คุณคลิกที่อินเทอร์เฟซของโมดูล กล่องโต้ตอบค่อนข้างไร้ประโยชน์ เนื่องจากสะดวกกว่าในการทำสิ่งเดียวกันโดยตรงในโค้ด ดังนั้นคลิกยกเลิก

ในต้นทางที่เราพบ ไฟล์ใหม่ hello.sv มันจะอยู่ในกลุ่ม Design Sources เปิดและเขียนโค้ดต่อไปนี้:

`ไทม์สเกล 1ns/1ps

โมดูลสวัสดี(
ตรรกะอินพุต CLK100MHZ,
ลอจิกอินพุต [ 3 : 0 ] sw,
ลอจิกเอาต์พุต [3:0] นำ
) ;

เสมอ @ (posge CLK100MHZ)
เริ่ม
ถ้า (สว[ 0 ] == 0 )
เริ่ม
นำ<= 4"b0001 ;
จบ
อื่น
เริ่ม
นำ<= 4"b0000 ;
จบ
จบ

สิ้นสุดโมดูล

หากทุกอย่างถูกต้อง ในขั้นตอนนี้ Vivado จะมีลักษณะดังนี้ (คลิกได้, PNG, 71 KB):

การรวบรวมโปรแกรมดำเนินการในสองขั้นตอน - การสังเคราะห์และการนำไปใช้ ในขั้นตอนการสังเคราะห์ โปรแกรมจะถูกแปลเป็นวงจรนามธรรมของลอจิคัลเกตและองค์ประกอบอื่นๆ ในขั้นตอนการใช้งาน จะมีการตัดสินใจว่าจะแฟลชวงจรนี้ไปยังฮาร์ดแวร์เฉพาะอย่างไร

มาเริ่มการสังเคราะห์โดยพูดว่า Flow → Run Synthetic หรือเพียงแค่กด F11 ที่มุมขวาบน คุณจะเห็นข้อความว่ากระบวนการอยู่ในระหว่างดำเนินการ อาจใช้เวลานานพอสมควรขึ้นอยู่กับคอมพิวเตอร์ของคุณและความซับซ้อนของโปรแกรม บนแล็ปท็อปของฉันการสังเคราะห์โปรแกรมข้างต้นเสร็จสิ้นภายในเวลาประมาณ 10 วินาที หากคุณพูดว่า Flow → Open Synthesized Design คุณจะเห็นภาพที่สวยงามเช่นนี้:

ถึงเวลาแฟลชบอร์ดของเราแล้ว เราพูดว่า Flow → Run Implementation จากนั้น Flow → Generate Bitstream เราเชื่อมต่อบอร์ดกับคอมพิวเตอร์ผ่าน USB ใน Vivado เราพูดว่า Flow → Open Hardware Manager → เปิดเป้าหมาย → เชื่อมต่ออัตโนมัติ → อุปกรณ์โปรแกรม คุณจะต้องระบุเส้นทางไปยังไฟล์บิต สำหรับฉันมันเป็นดังนี้:

./first-project.runs/impl_1/hello.bit

เราว่าโปรแกรม. ตอนนี้ไฟ LED LD4 บนบอร์ดจะสว่างขึ้นหากสวิตช์ SW0 ลดลง (ดูรูปบอร์ดด้านบน) หากยกสวิตช์ขึ้น ไฟ LED จะไม่สว่างขึ้น แน่นอนว่าเรียบง่าย แต่มันคือ "สวัสดีชาวโลก" คุณคาดหวังอะไร? :)

การจำลอง

การจำลองคือการเรียกใช้โค้ด Verilog หรือ VHDL เสมือนบนคอมพิวเตอร์ของคุณโดยตรง โดยไม่ต้องใช้ FPGA ใด ๆ มันเป็นทั้งเครื่องมือแก้ไขจุดบกพร่องและเป็นกรอบงานสำหรับการครอบคลุมโค้ดด้วยการทดสอบ

เมื่อฉันลองจำลองสถานการณ์ สิ่งแรกที่ฉันค้นพบคือมันไม่ได้ผลสำหรับฉัน บันทึกนั้นเรียบง่าย:

ข้อผิดพลาด: ไม่สามารถคอมไพล์ไฟล์ C ที่สร้างขึ้น [...] xsim_1.c

สำหรับข้อผิดพลาดนี้ Google พบเพียงเรื่องไร้สาระทุกประเภทในรูปแบบ "ลองปิดการใช้งานโปรแกรมป้องกันไวรัสของคุณ" เป็นผลให้การเพิ่มแฟล็ก -v 2 ให้กับสคริปต์ ~/opt/xilinx/Vivado/2017.2/bin/xelab ช่วยแก้ปัญหาได้ ด้วยความช่วยเหลือนี้ ฉันพบว่า Clang ซึ่งเป็นไบนารี่ที่ Vivado ติดตัวไปด้วย ขัดข้องโดยมีข้อผิดพลาดต่อไปนี้:

/a/long/path/to/clang: เกิดข้อผิดพลาดขณะโหลดไลบรารีที่แชร์:
libncurses.so.5: ไม่สามารถเปิดไฟล์อ็อบเจ็กต์ที่แชร์ได้: ไม่มีไฟล์ดังกล่าวหรือ
ไดเรกทอรี

และข้อผิดพลาดนี้และวิธีแก้ไขได้อธิบายไว้ใน Arch Wiki แล้ว โดยส่วนตัวแล้ว ฉันเพิ่งคัดลอกไฟล์ที่มีอยู่แล้วจากไดเร็กทอรี Vivado_HLS:

cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5

... หลังจากนั้นทุกอย่างก็ทำงาน เอาล่ะ จริงๆ แล้ว นี่คือตัวอย่างของการจำลอง

โดยการเปรียบเทียบกับวิธีที่เราสร้าง hello.sv ก่อนหน้านี้ เราจะสร้างไฟล์ใหม่ hello_sim.sv ในกลุ่ม Simulation Sources ในไฟล์เราเขียนโค้ดต่อไปนี้:

`ไทม์สเกล 1ns/1ps

โมดูล hello_sim() ;
ตรรกะ cck_t;
ตรรกะ [ 3 : 0 ] sw_t;
ตรรกะ [ 3 : 0 ] led_t;

สวัสดี hello_t(clck_t, sw_t, led_t);

เริ่มต้นเริ่มต้น
คลิก_t<= 0 ;
sw_t<= 4"b0000 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
ยืนยัน (led_t === 4"b0001 ) ;

สว_ต<= 4"b0001 ; # 1 ; clck_t <= 1 ; # 1 ; clck_t <= 0 ; # 1 ;
ยืนยัน (led_t === 4"b0000 ) ;
จบ

สิ้นสุดโมดูล

ในแผนผังต้นทาง คลิกขวาที่ไฟล์และเลือก คุณสมบัติโหนดต้นทาง ในส่วนใช้ใน ให้ยกเลิกการเลือกกล่องการสังเคราะห์และการนำไปใช้ เราไม่ต้องการให้การทดสอบใดๆ ขัดขวาง FPGA ที่เป็นยางใช่ไหม

ตอนนี้เราพูดว่า Flow → Run Simulation → Run Behavioral Simulation เป็นผลให้คุณจะเห็นสิ่งนี้:

จะเห็นได้ว่าเมื่อ sw เป็นศูนย์ led เป็นหนึ่ง และในทางกลับกัน ในกรณีนี้การเปลี่ยนแปลงทั้งหมดจะเกิดขึ้นที่ขอบของสัญญาณนาฬิกา ดูเหมือนว่าโปรแกรมจะทำงานได้อย่างถูกต้อง ไม่มีอะไรตกไปจากคำยืนยันซึ่งดูเหมือนว่าจะบอกเป็นนัย

บทสรุป

คุณสามารถดาวน์โหลดไฟล์เก็บถาวรที่มีโครงการที่อธิบายไว้ข้างต้นได้ ฉันอยากจะแนะนำแหล่งข้อมูลเพิ่มเติมต่อไปนี้:

  • หากคุณสนใจในรายละเอียดเกี่ยวกับฮาร์ดแวร์โปรดใส่ใจ

ลองนึกภาพว่า แทนที่จะดำเนินการชุดคำสั่งเฉพาะ โปรเซสเซอร์จะถูกสร้างขึ้นใหม่สำหรับแต่ละโปรแกรม และเปลี่ยนอัลกอริทึมเป็นฮาร์ดแวร์โดยตรง นี่คือวิธีการทำงานของ FPG อย่างแน่นอน ในบทความวันนี้ ผมจะบอกคุณว่าสิ่งนี้เป็นไปได้อย่างไร และจะแนะนำให้คุณรู้จักกับวิธีการออกแบบ FPGA ต่างๆ

ในการเริ่มต้นคุณต้องเข้าใจเล็กน้อยเกี่ยวกับตรรกะดิจิทัลของชิป ASIC แต่การเริ่มต้นด้วยพวกมันนั้นยากและมีราคาแพงมากและเป็นการดีกว่าที่จะเริ่มต้นด้วย FPGA แทน

FPGA คืออะไร?

เอฟพีจีเอย่อมาจากอาร์เรย์เกทที่ตั้งโปรแกรมได้ภาคสนาม (อาร์เรย์เกทที่ผู้ใช้ตั้งโปรแกรมได้, FPGA) โดยทั่วไปเรียกว่า FPGA - วงจรรวมลอจิกที่ตั้งโปรแกรมได้

เมื่อใช้ FPGA คุณสามารถออกแบบไมโครวงจรดิจิทัลได้อย่างแท้จริงขณะนั่งอยู่ที่บ้านโดยมีบอร์ดดีบักที่มีอยู่บนโต๊ะและซอฟต์แวร์สำหรับนักพัฒนาสำหรับรูเบิลสีเขียวหลายพันรูเบิล แต่ยังมีตัวเลือกฟรีอีกด้วย โปรดทราบ: เป็นการออกแบบไม่ใช่เพื่อเขียนโปรแกรมเพราะที่เอาต์พุตเราจะได้วงจรดิจิทัลแบบฟิสิคัลที่ทำงานอัลกอริธึมบางอย่างในระดับฮาร์ดแวร์ไม่ใช่โปรแกรมสำหรับโปรเซสเซอร์

มันทำงานดังนี้ มีแผงวงจรพิมพ์สำเร็จรูปพร้อมชุดอินเทอร์เฟซที่เชื่อมต่อกับชิป FPGA ที่ติดตั้งอยู่บนบอร์ด เช่น บอร์ดสุดเจ๋งสำหรับศูนย์ข้อมูลหรือบอร์ดดีบักสำหรับการฝึกอบรม

จนกว่าเราจะกำหนดค่า FPGA จะไม่มีตรรกะภายในชิปที่จะประมวลผลข้อมูลจากอินเทอร์เฟซ และแน่นอนว่าจะไม่มีอะไรทำงานจนกว่าเราจะกำหนดค่า FPGA แต่จากการออกแบบเฟิร์มแวร์จะถูกสร้างขึ้นซึ่งหลังจากโหลดลงใน FPGA แล้วจะสร้างวงจรดิจิทัลที่เราต้องการ ด้วยวิธีนี้ คุณสามารถสร้างตัวควบคุมอีเทอร์เน็ต 100G ที่จะรับและประมวลผลแพ็กเก็ตเครือข่ายได้

คุณลักษณะที่สำคัญของ FPGA คือความสามารถในการกำหนดค่าใหม่ได้ สมมติว่าตอนนี้เราต้องการคอนโทรลเลอร์อีเทอร์เน็ต 100G และในหนึ่งสัปดาห์ บอร์ดเดียวกันก็สามารถใช้อินเทอร์เฟซอีเทอร์เน็ต 25G อิสระสี่อินเทอร์เฟซได้

มีผู้ผลิตชิป FPGA ชั้นนำสองรายในตลาด: Intel และ Xilinx ที่มีชื่อเสียง พวกเขาควบคุมตลาด 58 และ 42% ผู้ก่อตั้ง Xilinx ได้คิดค้นชิป FPGA ตัวแรกในปี 1985 Intel เข้าสู่ตลาดเมื่อไม่นานมานี้ - ในปี 2558 โดยได้ดูดซับ Altera ซึ่งก่อตั้งขึ้นพร้อมกับ Xilinx เทคโนโลยี Altera และ Xilinx มีความคล้ายคลึงกันหลายประการ เช่นเดียวกับสภาพแวดล้อมการพัฒนา ฉันทำงานกับผลิตภัณฑ์ Xilinx บ่อยขึ้น ดังนั้นอย่าแปลกใจที่มีการกล่าวถึงผลิตภัณฑ์ Xilinx อย่างต่อเนื่องในบทความ

FPGA มีการใช้กันอย่างแพร่หลายในด้านต่างๆ: เครื่องใช้ไฟฟ้า, อุปกรณ์โทรคมนาคม, แผงเร่งความเร็วสำหรับใช้ในศูนย์ข้อมูล, หุ่นยนต์, การสร้างต้นแบบชิป ASIC ฉันจะดูตัวอย่างด้านล่าง

นอกจากนี้เรายังจะดูเทคโนโลยีที่ให้การกำหนดค่าฮาร์ดแวร์ใหม่ ทำความคุ้นเคยกับกระบวนการออกแบบ และดูตัวอย่างง่ายๆ ของการนำตัวนับฮาร์ดแวร์ไปใช้งานใน Verilog หากคุณมีบอร์ดพัฒนา FPGA คุณควรจะจำลองบอร์ดนี้ได้ด้วยตัวเอง หากไม่มีบอร์ด คุณยังคงสามารถทำความคุ้นเคยกับ Verilog ได้โดยจำลองการทำงานของวงจรบนคอมพิวเตอร์ของคุณ

หลักการทำงานของ FPGA

ชิป FPGA คือชิป ASIC แบบกำหนดเองตัวเดียวกัน ซึ่งประกอบด้วยทรานซิสเตอร์ตัวเดียวกันกับที่ใช้ประกอบฟลิปฟล็อป รีจิสเตอร์ มัลติเพล็กเซอร์ และองค์ประกอบลอจิกอื่นๆ สำหรับวงจรทั่วไป แน่นอนว่าเป็นไปไม่ได้ที่จะเปลี่ยนลำดับการเชื่อมต่อทรานซิสเตอร์เหล่านี้ แต่ในทางสถาปัตยกรรม ไมโครวงจรถูกสร้างขึ้นด้วยวิธีที่ชาญฉลาดจนสามารถเปลี่ยนการสลับสัญญาณระหว่างบล็อกขนาดใหญ่ได้ โดยเรียกว่า CLB ซึ่งเป็นบล็อกลอจิกที่ตั้งโปรแกรมได้

นอกจากนี้ยังสามารถเปลี่ยนฟังก์ชันลอจิคัลที่ CLB ดำเนินการได้อีกด้วย สิ่งนี้เกิดขึ้นได้เนื่องจากการที่ชิปทั้งหมดเต็มไปด้วยเซลล์หน่วยความจำการกำหนดค่า RAM แบบคงที่ แต่ละบิตของหน่วยความจำนี้ควบคุมคีย์การสลับสัญญาณบางประเภท หรือเป็นส่วนหนึ่งของตารางความจริงของฟังก์ชันลอจิคัลที่ CLB นำไปใช้

เนื่องจากหน่วยความจำการกำหนดค่าถูกสร้างขึ้นโดยใช้เทคโนโลยี Static RAM ประการแรก เมื่อเปิด FPGA จะต้องกำหนดค่าชิป และประการที่สอง ชิปสามารถกำหนดค่าใหม่ได้ในจำนวนที่แทบจะไม่มีที่สิ้นสุด

โครงสร้างชิป 2D ที่เรียบง่ายมากโดยไม่มีหน่วยความจำการกำหนดค่า

CLB ตั้งอยู่ในสวิตช์แฟบริคที่กำหนดการเชื่อมต่อระหว่างอินพุตและเอาต์พุตของ CLB

การสลับแผนภาพเมทริกซ์

ที่แต่ละจุดตัดของตัวนำจะมีสวิตช์สวิตช์หกตัวที่ควบคุมโดยเซลล์หน่วยความจำการกำหนดค่าของตัวเอง การเปิดบางส่วนและปิดบางรายการจะทำให้คุณสามารถสลับสัญญาณที่แตกต่างกันระหว่าง CLB ได้

ซีแอลบี

CLB ประกอบด้วยบล็อกที่กำหนดฟังก์ชันบูลีนจากหลายอาร์กิวเมนต์ (เรียกว่า Look Up Table, LUT) และทริกเกอร์ (flip-flop, FF) ใน FPGA สมัยใหม่ LUT มีอินพุตหกช่อง แต่ตัวเลขแสดงสามช่องเพื่อความเรียบง่าย เอาต์พุตของ LUT จะถูกป้อนไปยังเอาต์พุต CLB แบบอะซิงโครนัส (โดยตรง) หรือแบบซิงโครนัส (ผ่าน FF flip-flop ที่ทำงานที่นาฬิกาของระบบ)

หลักการดำเนินการ LUT

การดูหลักการของการนำ LUT ไปใช้เป็นเรื่องที่น่าสนใจ ขอให้เรามีฟังก์ชันบูลีน y = (a & b) | ~ ค. แผนภาพวงจรและตารางความจริงแสดงไว้ในภาพ ฟังก์ชันนี้มีอาร์กิวเมนต์สามตัว ดังนั้นจึงต้องใช้ค่า 2^3 = 8 ค่า แต่ละรายการสอดคล้องกับการรวมกันของสัญญาณอินพุตของตัวเอง ค่าเหล่านี้คำนวณโดยโปรแกรมพัฒนาเฟิร์มแวร์ FPGA และเขียนลงในเซลล์หน่วยความจำการกำหนดค่าพิเศษ

ค่าของแต่ละเซลล์จะถูกป้อนเข้ากับอินพุตของเอาท์พุตมัลติเพล็กเซอร์ LUT และอาร์กิวเมนต์อินพุตของฟังก์ชันบูลีนจะใช้เพื่อเลือกค่าหนึ่งของฟังก์ชัน CLB เป็นทรัพยากรฮาร์ดแวร์ที่สำคัญที่สุดของ FPGA จำนวน CLB ในชิป FPGA สมัยใหม่อาจแตกต่างกันไปและขึ้นอยู่กับประเภทและความจุของชิป Xilinx เสียชีวิตโดยมีจำนวน CLB อยู่ระหว่างประมาณสี่พันถึงสามล้าน

นอกจาก CLB แล้ว ยังมีทรัพยากรฮาร์ดแวร์ที่สำคัญอื่นๆ อีกจำนวนหนึ่งภายใน FPGA ตัวอย่างเช่น หน่วยทวีคูณฮาร์ดแวร์หรือหน่วย DSP แต่ละตัวสามารถดำเนินการคูณและบวกกับตัวเลข 18 บิตได้ทุกรอบสัญญาณนาฬิกา ในคริสตัลระดับบนสุด จำนวนบล็อก DSP สามารถเกิน 6000 ได้

ทรัพยากรอื่นคือบล็อกหน่วยความจำภายใน (บล็อก RAM, BRAM) แต่ละบล็อกสามารถจัดเก็บได้ 2 KB ความจุรวมของหน่วยความจำดังกล่าว ขึ้นอยู่กับคริสตัล สามารถเข้าถึงได้ตั้งแต่ 20 KB ถึง 20 MB เช่นเดียวกับ CLB, BRAM และบล็อก DSP เชื่อมต่อกันด้วยสวิตช์แฟบริคและขยายออกไปตลอดดาย ด้วยการเชื่อมต่อบล็อก CLB, DSP และ BRAM ทำให้สามารถรับวงจรการประมวลผลข้อมูลที่มีประสิทธิภาพมากได้

ข้อดีของ FPGA

ชิป FPGA ตัวแรกที่สร้างโดย Xilinx ในปี 1985 มีเพียง 64 CLB ในเวลานั้น การรวมทรานซิสเตอร์บนชิปยังต่ำกว่าที่เป็นอยู่ในปัจจุบันมาก และอุปกรณ์ดิจิทัลมักใช้ชิป "ตรรกะที่กระจัดกระจาย" มีวงจรขนาดเล็กสำหรับรีจิสเตอร์ ตัวนับ มัลติเพล็กเซอร์ และตัวคูณแยกกัน แผงวงจรพิมพ์เฉพาะถูกสร้างขึ้นสำหรับอุปกรณ์เฉพาะซึ่งมีการติดตั้งวงจรไมโครที่มีการบูรณาการต่ำเหล่านี้

การใช้ FPGA ทำให้สามารถละทิ้งแนวทางนี้ได้ แม้แต่ FPGA ที่มี 64 CLB ยังช่วยประหยัดพื้นที่บนแผงวงจรพิมพ์ได้อย่างมากและความพร้อมใช้งานของการกำหนดค่าใหม่ได้เพิ่มความสามารถในการอัปเดตการทำงานของอุปกรณ์หลังการผลิตระหว่างการดำเนินการตามที่พวกเขาพูดว่า "ในสนาม" (ดังนั้นชื่อ - ฟิลด์ - อาร์เรย์เกตที่ตั้งโปรแกรมได้)

เนื่องจากความจริงที่ว่าวงจรดิจิทัลของฮาร์ดแวร์ใดๆ สามารถสร้างขึ้นได้ภายใน FPGA (สิ่งสำคัญคือมีทรัพยากรเพียงพอ) หนึ่งในแอปพลิเคชันที่สำคัญของ FPGA คือการสร้างต้นแบบชิป ASIC

การพัฒนา ASIC นั้นซับซ้อนและมีราคาแพงมาก ต้นทุนของข้อผิดพลาดสูงมาก และปัญหาของการทดสอบลอจิกถือเป็นสิ่งสำคัญ ดังนั้นหนึ่งในขั้นตอนการพัฒนาก่อนที่จะเริ่มทำงานกับโทโพโลยีทางกายภาพของวงจรก็คือการสร้างต้นแบบบนชิป FPGA หนึ่งตัวขึ้นไป

สำหรับการพัฒนา ASIC จะมีการผลิตบอร์ดพิเศษที่มี FPGA จำนวนมากเชื่อมต่อถึงกัน ไมโครวงจรต้นแบบทำงานที่ความถี่ต่ำกว่ามาก (อาจเป็นสิบเมกะเฮิรตซ์) แต่ช่วยประหยัดในการระบุปัญหาและจุดบกพร่อง

อย่างไรก็ตาม ในความคิดของฉัน มีการใช้งาน FPGA ที่น่าสนใจมากกว่า โครงสร้างที่ยืดหยุ่นของ FPGA ช่วยให้สามารถใช้วงจรฮาร์ดแวร์เพื่อการประมวลผลข้อมูลแบบขนานความเร็วสูงพร้อมความสามารถในการเปลี่ยนอัลกอริทึม


การเปรียบเทียบแพลตฟอร์มฮาร์ดแวร์

ลองคิดดูว่า CPU, GPU, FPGA และ ASIC มีความแตกต่างโดยพื้นฐานอย่างไร CPU นั้นเป็นสากล คุณสามารถรันอัลกอริธึมใดก็ได้ มันยืดหยุ่นที่สุดและใช้งานง่ายที่สุดด้วยภาษาการเขียนโปรแกรมและสภาพแวดล้อมการพัฒนาจำนวนมาก

ในเวลาเดียวกัน เนื่องจากความสามารถรอบด้านและการดำเนินการตามลำดับของคำสั่ง CPU ประสิทธิภาพจึงลดลงและการใช้พลังงานของวงจรเพิ่มขึ้น สิ่งนี้เกิดขึ้นเนื่องจากสำหรับการดำเนินการทางคณิตศาสตร์ที่มีประโยชน์ทุกครั้ง CPU จะดำเนินการเพิ่มเติมมากมายที่เกี่ยวข้องกับการอ่านคำสั่ง การย้ายข้อมูลระหว่างรีจิสเตอร์และแคช และการเคลื่อนไหวอื่นๆ

อีกฝั่งเป็น ASIC บนแพลตฟอร์มนี้ อัลกอริธึมที่จำเป็นจะถูกนำไปใช้กับฮาร์ดแวร์โดยการเชื่อมต่อทรานซิสเตอร์โดยตรง การดำเนินการทั้งหมดเกี่ยวข้องกับการดำเนินการของอัลกอริธึมเท่านั้นและไม่มีทางที่จะเปลี่ยนแปลงได้ ดังนั้นประสิทธิภาพสูงสุดและการใช้พลังงานที่ต่ำที่สุดของแพลตฟอร์ม แต่ไม่สามารถตั้งโปรแกรม ASIC ใหม่ได้

ทางด้านขวาของ CPU คือ GPU ชิปเหล่านี้เดิมได้รับการออกแบบมาสำหรับการประมวลผลกราฟิก แต่ปัจจุบันยังใช้สำหรับการขุดด้วยคอมพิวเตอร์เพื่อวัตถุประสงค์ทั่วไปอีกด้วย ประกอบด้วยคอร์ประมวลผลขนาดเล็กหลายพันคอร์และดำเนินการแบบขนานกับอาร์เรย์ข้อมูล

หากอัลกอริธึมสามารถขนานได้ GPU จะสามารถเร่งความเร็วได้อย่างมีนัยสำคัญเมื่อเทียบกับ CPU ในทางกลับกัน อัลกอริธึมแบบลำดับจะถูกใช้งานแย่กว่า ดังนั้นแพลตฟอร์มจึงมีความยืดหยุ่นน้อยกว่า CPU นอกจากนี้ เพื่อพัฒนา GPU คุณต้องมีทักษะพิเศษ รู้จัก OpenCL หรือ CUDA

ในที่สุด FPGA แพลตฟอร์มนี้ผสมผสานประสิทธิภาพของ ASIC เข้ากับความสามารถในการเปลี่ยนแปลงโปรแกรม FPGA ไม่ใช่แบบสากล แต่มีคลาสของอัลกอริธึมและงานที่จะแสดงประสิทธิภาพได้ดีกว่าบน CPU หรือแม้แต่ GPU ความซับซ้อนในการพัฒนา FPGA นั้นสูงกว่า แต่เครื่องมือการพัฒนาใหม่กำลังทำให้ช่องว่างนี้เล็กลง

ข้อได้เปรียบที่ชัดเจนของ FPGA คือความสามารถในการประมวลผลข้อมูลเมื่อมาถึงโดยมีความล่าช้าในการตอบสนองน้อยที่สุด ตามตัวอย่าง คุณสามารถจินตนาการถึงเราเตอร์เครือข่ายอัจฉริยะที่มีพอร์ตจำนวนมาก: เมื่อแพ็กเก็ตอีเทอร์เน็ตมาถึงพอร์ตใดพอร์ตหนึ่ง จะต้องตรวจสอบกฎหลายข้อก่อนที่จะเลือกพอร์ตเอาต์พุต คุณอาจต้องเปลี่ยนบางช่องในแพ็คเกจหรือเพิ่มช่องใหม่

การใช้ FPGA ช่วยให้คุณสามารถแก้ไขปัญหานี้ได้ทันที: ไบต์ของแพ็กเก็ตเพิ่งเริ่มมาถึงชิปจากอินเทอร์เฟซเครือข่ายและส่วนหัวของแพ็กเก็ตกำลังได้รับการวิเคราะห์แล้ว การใช้โปรเซสเซอร์ที่นี่สามารถชะลอความเร็วในการประมวลผลการรับส่งข้อมูลเครือข่ายได้อย่างมาก เป็นที่ชัดเจนว่าเราเตอร์สามารถมี ASIC แบบกำหนดเองที่ทำงานได้อย่างมีประสิทธิภาพสูงสุด แต่จะเกิดอะไรขึ้นหากกฎสำหรับการประมวลผลแพ็กเก็ตต้องเปลี่ยนแปลง มีเพียง FPGA เท่านั้นที่สามารถบรรลุความยืดหยุ่นที่ต้องการรวมกับประสิทธิภาพสูงได้

ดังนั้น FPGA จึงถูกใช้เมื่อต้องการประสิทธิภาพการประมวลผลข้อมูลสูง เวลาตอบสนองที่สั้นที่สุด และการใช้พลังงานต่ำ

FPGA ในระบบคลาวด์

ในการประมวลผลแบบคลาวด์ FPGA ใช้สำหรับการคำนวณที่รวดเร็ว การเร่งความเร็วการรับส่งข้อมูลเครือข่าย และการเข้าถึงอาร์เรย์ข้อมูล นอกจากนี้ยังรวมถึงการใช้ FPGA สำหรับการซื้อขายแลกเปลี่ยนความถี่สูง บอร์ด FPGA พร้อม PCI Express และอินเทอร์เฟซเครือข่ายออปติคอลที่ผลิตโดย Intel (Altera) หรือ Xilinx จะถูกแทรกเข้าไปในเซิร์ฟเวอร์

FPGA เหมาะอย่างยิ่งสำหรับอัลกอริธึมการเข้ารหัส การเปรียบเทียบลำดับ DNA และงานทางวิทยาศาสตร์ เช่น พลศาสตร์ของโมเลกุล Microsoft ใช้ FPGA มานานแล้วเพื่อเร่งความเร็วบริการค้นหา Bing ตลอดจนจัดระเบียบ Software Defined Networking ภายใน Azure cloud

ความเจริญของแมชชีนเลิร์นนิงไม่ได้ละเว้น FPGA เช่นกัน Xilinx และ Intel นำเสนอเครื่องมือที่ใช้ FPGA สำหรับการทำงานกับเครือข่ายประสาทเชิงลึก ช่วยให้คุณได้รับเฟิร์มแวร์ FPGA ที่ใช้งานเครือข่ายเฉพาะโดยตรงจากเฟรมเวิร์กเช่น Caffe และ TensorFlow

ยิ่งกว่านั้น คุณสามารถลองทั้งหมดนี้ได้โดยไม่ต้องออกจากบ้านและใช้บริการคลาวด์ ตัวอย่างเช่น จาก Amazon คุณสามารถเช่าเครื่องเสมือนที่สามารถเข้าถึงบอร์ด FPGA และเครื่องมือในการพัฒนาใดๆ รวมถึงการเรียนรู้ของเครื่อง

FPGA บนขอบ

FPGA ทำอะไรที่น่าสนใจอีกบ้าง? ทำไมพวกเขาไม่ทำอะไรเลย! หุ่นยนต์ รถยนต์ไร้คนขับ โดรน เครื่องมือวิทยาศาสตร์ อุปกรณ์ทางการแพทย์ อุปกรณ์พกพาสำหรับผู้บริโภค กล้องวงจรปิดอัจฉริยะ และอื่นๆ

ตามเนื้อผ้า FPGA ถูกใช้สำหรับการประมวลผลสัญญาณมิติเดียวแบบดิจิทัล (และแข่งขันกับโปรเซสเซอร์ DSP) ในอุปกรณ์เรดาร์ เครื่องรับส่งสัญญาณวิทยุ ด้วยการบูรณาการชิปและประสิทธิภาพที่เพิ่มขึ้น แพลตฟอร์ม FPGA จึงถูกนำมาใช้มากขึ้นสำหรับการประมวลผลประสิทธิภาพสูง เช่น การประมวลผลสัญญาณ 2D ที่ขอบของคลาวด์

แนวคิดนี้เข้าใจได้ง่ายที่สุดโดยใช้กล้องจราจรที่มีการจดจำป้ายทะเบียนเป็นตัวอย่าง คุณสามารถใช้กล้องที่มีความสามารถในการส่งวิดีโอผ่านอีเธอร์เน็ตและประมวลผลสตรีมบนเซิร์ฟเวอร์ระยะไกล เมื่อจำนวนกล้องเพิ่มขึ้น โหลดบนเครือข่ายก็จะเพิ่มขึ้นด้วย ซึ่งอาจนำไปสู่ความล้มเหลวของระบบได้

แต่จะเป็นการดีกว่าถ้าใช้การจดจำป้ายทะเบียนบนคอมพิวเตอร์ที่ติดตั้งโดยตรงในตัวกล้องวิดีโอ และส่งหมายเลขป้ายทะเบียนไปยังคลาวด์ในรูปแบบข้อความ ในการทำเช่นนี้ คุณสามารถใช้ FPGA ที่มีราคาไม่แพงนักและใช้พลังงานต่ำในการทำแบตเตอรี่ได้ ในขณะเดียวกัน ยังคงสามารถเปลี่ยนตรรกะการทำงานของ FPGA ได้ เช่น เมื่อเปลี่ยนมาตรฐานป้ายทะเบียน

สำหรับหุ่นยนต์และโดรน ในด้านนี้ สิ่งสำคัญอย่างยิ่งคือต้องปฏิบัติตามเงื่อนไขสองประการ ได้แก่ ประสิทธิภาพสูงและการใช้พลังงานต่ำ แพลตฟอร์ม FPGA เหมาะอย่างยิ่งและสามารถใช้ในการสร้างตัวควบคุมการบินสำหรับโดรนโดยเฉพาะ พวกเขากำลังสร้าง UAV ที่สามารถตัดสินใจได้ทันที

การพัฒนาโครงการบน FPGA

การออกแบบมีระดับที่แตกต่างกัน: ต่ำ บล็อก และสูง ระดับต่ำเกี่ยวข้องกับการใช้ภาษาเช่น Verilog หรือ VHDL ซึ่งคุณควบคุมการพัฒนาที่ระดับการถ่ายโอนการลงทะเบียน (RTL) ในกรณีนี้ คุณจะจัดทำรีจิสเตอร์เช่นเดียวกับในตัวประมวลผล และกำหนดฟังก์ชันลอจิคัลที่เปลี่ยนแปลงข้อมูลระหว่างฟังก์ชันเหล่านั้น

วงจร FPGA จะทำงานที่ความเร็วสัญญาณนาฬิกาเฉพาะเสมอ (ปกติคือ 100-300 MHz) และที่ระดับ RTL คุณจะกำหนดพฤติกรรมของวงจรลงไปที่ความถี่สัญญาณนาฬิกาของระบบ การทำงานอย่างอุตสาหะนี้ส่งผลให้การออกแบบมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้ในแง่ของประสิทธิภาพ การใช้ทรัพยากรของ FPGA die และการใช้พลังงาน แต่สิ่งนี้ต้องใช้ทักษะที่จริงจังในการออกแบบวงจร และแม้แต่กับพวกเขา กระบวนการก็ยังช้า

ในระดับบล็อก คุณมีหน้าที่หลักในการเชื่อมต่อบล็อกขนาดใหญ่สำเร็จรูปที่ทำหน้าที่บางอย่างเพื่อให้ได้ฟังก์ชันระบบบนชิปที่คุณต้องการ

ที่การออกแบบระดับสูง คุณจะไม่สามารถควบคุมข้อมูลในทุกรอบสัญญาณนาฬิกาอีกต่อไป แต่มุ่งเน้นไปที่อัลกอริธึมแทน มีคอมไพเลอร์หรือนักแปลตั้งแต่ C และ C++ จนถึงระดับ RTL เช่น Vivado HLS มันค่อนข้างฉลาดและช่วยให้คุณสามารถแปลอัลกอริธึมคลาสกว้างเป็นระดับฮาร์ดแวร์ได้

ข้อได้เปรียบหลักของแนวทางนี้เหนือภาษา RTL คือการเร่งการพัฒนาและโดยเฉพาะอย่างยิ่งการทดสอบอัลกอริทึม: สามารถเรียกใช้และตรวจสอบโค้ด C ++ บนคอมพิวเตอร์ได้ และจะเร็วกว่าการทดสอบการเปลี่ยนแปลงอัลกอริทึมในระดับ RTL มาก แน่นอนคุณต้องจ่ายเพื่อความสะดวก - โครงการอาจไม่เร็วเท่านี้และจะใช้ทรัพยากรฮาร์ดแวร์มากขึ้น

บ่อยครั้งที่เรายินดีจ่ายในราคานี้ หากเราใช้นักแปลอย่างถูกต้อง ประสิทธิภาพก็จะไม่ได้รับผลกระทบมากนัก และ FPGA สมัยใหม่ก็มีทรัพยากรเพียงพอ ในโลกของเราที่มีช่วงเวลาสำคัญในตัวบ่งชี้ตลาด สิ่งนี้กลับกลายเป็นว่าสมเหตุสมผล

บ่อยครั้งที่คุณต้องรวมสไตล์การพัฒนาทั้งสามแบบไว้ในดีไซน์เดียว สมมติว่าเราจำเป็นต้องสร้างอุปกรณ์ที่เราสามารถสร้างเป็นหุ่นยนต์และให้ความสามารถในการจดจำวัตถุในสตรีมวิดีโอ เช่น ป้ายถนน ลองใช้ชิปเซ็นเซอร์วิดีโอและเชื่อมต่อโดยตรงกับ FPGA สำหรับการดีบัก เราสามารถใช้จอภาพ HDMI ซึ่งเชื่อมต่อกับ FPGA ได้ด้วย

เฟรมจากกล้องจะถูกส่งไปยัง FPGA ผ่านอินเทอร์เฟซที่ผู้ผลิตเซ็นเซอร์กำหนดไว้อย่างชัดเจน (USB ไม่มีประโยชน์ที่นี่) ประมวลผลและแสดงบนจอภาพ ในการประมวลผลเฟรม คุณจะต้องมีเฟรมบัฟเฟอร์ ซึ่งโดยปกติจะอยู่ในหน่วยความจำ DDR ภายนอกที่ติดตั้งบนแผงวงจรพิมพ์ถัดจากชิป FPGA


แผนภาพบล็อกทั่วไปของการออกแบบ FPGA

หากผู้ผลิตเซ็นเซอร์วิดีโอไม่ได้จัดเตรียมอินเทอร์เฟซ IP สำหรับชิป FPGA ของเรา เราจะต้องเขียนด้วยตัวเองในรูปแบบ RTL โดยนับรอบสัญญาณนาฬิกา บิตและไบต์ตามข้อกำหนดของโปรโตคอลการถ่ายโอนข้อมูล เรามักจะใช้บล็อกสำเร็จรูป การประมวลผลล่วงหน้า, ตัวควบคุม DDR และ HDMI IP และเพียงแค่เชื่อมต่ออินเทอร์เฟซของพวกเขา และเราสามารถเขียนบล็อก HLS ซึ่งค้นหาและประมวลผลข้อมูลขาเข้าในภาษา C++ และออกอากาศโดยใช้ Vivado HLS

เป็นไปได้มากว่าเรายังคงต้องการห้องสมุดสำเร็จรูปของเครื่องตรวจจับและตัวแยกประเภทป้ายถนนที่ดัดแปลงเพื่อใช้ใน FPGA แน่นอนว่าในตัวอย่างนี้ ฉันนำเสนอผังงานการออกแบบที่เรียบง่ายมาก แต่สะท้อนถึงตรรกะของการดำเนินการอย่างถูกต้อง

มาดูเส้นทางการออกแบบตั้งแต่การเขียนโค้ด RTL ไปจนถึงการรับไฟล์การกำหนดค่าเพื่อโหลดลงใน FPGA

เส้นทางการออกแบบ

ดังนั้นคุณจึงเขียนโค้ด RTL ที่ใช้วงจรที่คุณต้องการ ก่อนที่จะทดสอบกับฮาร์ดแวร์จริง คุณต้องตรวจสอบให้แน่ใจว่าถูกต้องและแก้ไขปัญหาที่จำเป็นได้อย่างถูกต้อง เมื่อต้องการทำเช่นนี้ การสร้างแบบจำลอง RTL จะถูกนำมาใช้ในเครื่องจำลองบนคอมพิวเตอร์

ตอนนี้คุณนำวงจรของคุณซึ่งนำเสนอเป็นโค้ด RTL เท่านั้น มาวางไว้บนม้านั่งเสมือน โดยคุณจะใช้ลำดับของสัญญาณดิจิทัลกับอินพุตของวงจร บันทึกไดอะแกรมเอาต์พุต การขึ้นต่อกันของเวลาของสัญญาณเอาท์พุต และเปรียบเทียบ กับผลลัพธ์ที่คาดหวังไว้ โดยปกติแล้วคุณจะพบข้อผิดพลาดและกลับไปเขียน RTL

จากนั้น โค้ดที่ได้รับการตรวจสอบเชิงตรรกะจะถูกป้อนเป็นอินพุตไปยังโปรแกรมซินธิไซเซอร์ โดยจะแปลงคำอธิบายที่เป็นข้อความของวงจรให้เป็นรายการเชื่อมโยงขององค์ประกอบดิจิทัลจากไลบรารีที่มีให้สำหรับแม่พิมพ์ FPGA ที่กำหนด รายการนี้จะแสดงรายการต่างๆ เช่น LUT, ทริกเกอร์ และการเชื่อมต่อระหว่างรายการเหล่านั้น ในขั้นตอนนี้ องค์ประกอบต่างๆ ยังไม่เชื่อมโยงกับทรัพยากรฮาร์ดแวร์เฉพาะ ในการดำเนินการนี้ คุณจะต้องกำหนดข้อจำกัดบนวงจร โดยเฉพาะอย่างยิ่ง ระบุว่าพิน I/O ทางกายภาพของชิป FPGA ใดที่อินพุตและเอาท์พุตลอจิคัลของวงจรของคุณเชื่อมต่ออยู่

ข้อจำกัดเหล่านี้ยังกำหนดให้คุณระบุความเร็วสัญญาณนาฬิกาที่วงจรต้องทำงาน เอาต์พุตซินธิไซเซอร์และไฟล์ข้อจำกัดจะถูกส่งไปยังโปรเซสเซอร์การใช้งาน ซึ่งเหนือสิ่งอื่นใดคือจัดการสถานที่และเส้นทาง

กระบวนการ Place เชื่อมโยงแต่ละองค์ประกอบที่ไม่ระบุชื่อจาก netlist ไปยังองค์ประกอบเฉพาะภายในชิป FPGA ถัดไป กระบวนการกำหนดเส้นทางจะเริ่มทำงาน ซึ่งพยายามค้นหาการเชื่อมต่อที่เหมาะสมที่สุดขององค์ประกอบเหล่านี้สำหรับการกำหนดค่าที่สอดคล้องกันของเมทริกซ์การสลับ FPGA

สถานที่และเส้นทางทำงานตามข้อจำกัดที่เราวางไว้บนวงจร: พิน I/O และความเร็วสัญญาณนาฬิกา ระยะเวลาสัญญาณนาฬิกามีอิทธิพลอย่างมากต่อการใช้งาน: ไม่ควรน้อยกว่าการหน่วงเวลาของลอจิกเกตในวงจรวิกฤตระหว่างฟลิปฟล็อปสองตัวที่ต่อเนื่องกัน

บ่อยครั้งเป็นไปไม่ได้ที่จะปฏิบัติตามข้อกำหนดนี้ในทันที จากนั้นคุณต้องกลับไปที่ระยะเริ่มต้นและเปลี่ยนโค้ด RTL: ตัวอย่างเช่น พยายามลดตรรกะในห่วงโซ่ที่สำคัญ เมื่อการใช้งานเสร็จสมบูรณ์แล้ว เราจะรู้ว่าองค์ประกอบใดไปที่ไหนและเชื่อมโยงกันอย่างไร

หลังจากนี้กระบวนการสร้างไฟล์เฟิร์มแวร์ FPGA ไบนารีจะเริ่มต้นขึ้นเท่านั้น สิ่งที่เหลืออยู่ก็คือการโหลดมันลงในฮาร์ดแวร์จริงและตรวจสอบว่ามันทำงานตามที่คาดไว้หรือไม่ หากเกิดปัญหาในขั้นตอนนี้ แสดงว่าการสร้างแบบจำลองไม่สมบูรณ์ และข้อผิดพลาดและข้อบกพร่องทั้งหมดยังไม่ถูกกำจัดในขั้นตอนนี้

คุณสามารถกลับไปสู่ขั้นตอนการจำลองและจำลองสถานการณ์ฉุกเฉินได้ และหากวิธีนี้ใช้ไม่ได้ผล กลไกการแก้ไขจุดบกพร่องจะถูกจัดเตรียมไว้ในฮาร์ดแวร์ที่ทำงานโดยตรง คุณสามารถระบุสัญญาณที่คุณต้องการติดตามเมื่อเวลาผ่านไป และสภาพแวดล้อมการออกแบบจะสร้างวงจรตัววิเคราะห์ลอจิกเพิ่มเติมที่อยู่บนชิปถัดจากการออกแบบของคุณ เชื่อมต่อกับสัญญาณที่คุณสนใจ และจัดเก็บค่าไว้เมื่อเวลาผ่านไป . สามารถดาวน์โหลดแผนภาพเวลาที่บันทึกไว้ของสัญญาณที่ต้องการลงในคอมพิวเตอร์และวิเคราะห์ได้

บทความนี้พยายามระบุองค์ประกอบของเอกสารประกอบสำหรับโมดูลดิจิทัลที่พัฒนาแล้วสำหรับวงจรรวมลอจิกที่ตั้งโปรแกรมได้ (FPGA) นักพัฒนาจะต้องจัดเตรียมเอกสารประกอบนี้ให้กับผู้บริโภค/ลูกค้าเพื่อการใช้งานโมดูลดิจิทัลที่พัฒนาแล้วในโครงการของตนต่อไปอย่างประสบความสำเร็จในขั้นตอนของการออกแบบอุปกรณ์ดิจิทัลบน FPGA

การแนะนำ

ดังนั้นนักพัฒนาควรถามเอกสารการออกแบบประเภทใดว่าบริษัทลูกค้าหรือองค์กรหรือนักพัฒนารายอื่นจะใช้อุปกรณ์ที่พัฒนาแล้ว "ต่างประเทศ" ในโครงการของตนหรือไม่? บทความนี้สามารถใช้เป็น "เอกสารสรุป" เพื่อออกข้อกำหนดทางเทคนิคสำหรับการพัฒนาอุปกรณ์ดิจิทัลสำหรับ FPGA อย่างถูกต้องก่อน จากนั้นจึงขอเอกสารการออกแบบสำหรับอุปกรณ์ดิจิทัลที่พัฒนาแล้วจากนักพัฒนา จากประสบการณ์ก่อนหน้านี้ในการทำงานกับเอกสารการออกแบบ องค์กรหรือบริษัทมักจะใช้มาตรฐานและเอกสารกำกับดูแลต่อไปนี้:

  • GOST 2.102-68 ESKD ประเภทและความครบถ้วนของเอกสารการออกแบบ
  • GOST 15.101-98 ระบบการพัฒนาและนำสินค้าเข้าสู่การผลิต ขั้นตอนการดำเนินงานวิจัย
  • GOST R 15.201-20-00. ระบบการพัฒนาและนำสินค้าเข้าสู่การผลิต ผลิตภัณฑ์สำหรับวัตถุประสงค์ทางอุตสาหกรรมและทางเทคนิค ขั้นตอนการพัฒนาและนำผลิตภัณฑ์เข้าสู่การผลิต

ตามกฎแล้วไฟล์เหล่านี้เป็นไฟล์เฟิร์มแวร์และโปรแกรม (คำอธิบายของอุปกรณ์ดิจิทัลใน VHDL/Verilog หรือชุดของวงจรดิจิทัลที่พัฒนาในตัวแก้ไขวงจรโดยใช้องค์ประกอบไลบรารีของลอจิกดิจิทัล เช่น ฟลิปฟล็อป รีจิสเตอร์ ตัวนับ ตัวถอดรหัส ฯลฯ) บนแผ่นซีดีหรือดีวีดี และคำแนะนำในการเขียนโปรแกรม นั่นคือทั้งหมดที่

ผู้เขียนประสบปัญหาดังนี้ พนักงานคนหนึ่งได้พัฒนาอุปกรณ์ดิจิทัลหลายโมดูลที่ซับซ้อน ฉันอธิบายโมดูลทั้งหมดใน VHDL และดูไซโคลแกรมของการทำงานของโมดูลเหล่านี้และอุปกรณ์ดิจิทัลโดยรวมบนออสซิลโลสโคปที่ดีและมีราคาแพง เขาไม่รู้เกี่ยวกับไฟล์ Test Bench และความเป็นไปได้ในการจำลองหรือไม่รู้วิธีเขียน อย่างไรก็ตาม ยังไม่มีความคิดเห็นเกี่ยวกับโปรเจ็กต์และคำอธิบายโมดูล สถานการณ์อาจเลวร้ายยิ่งกว่านั้นหากโมดูลแสดงด้วยวงจรดิจิทัลที่ออกแบบในตัวแก้ไขวงจรโดยใช้องค์ประกอบของไลบรารี ข้อเสียเปรียบหลักประการหนึ่งอยู่ที่นี่: นอกจากตัวนักพัฒนาเองแล้วไม่มีใครเข้าใจอุปกรณ์ดิจิทัลนี้โดยเฉพาะอย่างยิ่งหากโครงการเป็นแบบหลายโมดูลและคำอธิบายของแต่ละโมดูลมีมากกว่า 100 บรรทัดหรือจอภาพมากกว่าหนึ่งจอ หน้าจอ. ซึ่งหมายความว่าหากนักพัฒนารายอื่นต้องการแนะนำอุปกรณ์ดิจิทัลที่พัฒนาแล้วสำหรับ FPGA ในการพัฒนาหรือโครงการใหม่ เขาต้องใช้เวลาในการพัฒนาอุปกรณ์ดิจิทัลนี้อีกครั้ง

ประวัติความเป็นมาของปัญหาการออกแบบสำหรับ FPGA

ปัจจุบันตลาด FPGA เป็นหนึ่งในตลาดที่มีการพัฒนาแบบไดนามิกมากที่สุด FPGA ใช้ในหลายอุตสาหกรรม ในขณะนี้ ไม่มีวิธีการที่ชัดเจนที่ทำให้นักพัฒนาฮาร์ดแวร์ทุกคนพึงพอใจในการรับการกำหนดค่า FPGA ตามรูปแบบการทำงานของอุปกรณ์ในระดับระบบ แนวทางที่ได้รับความนิยมมากที่สุดในการแก้ปัญหานี้คือการใช้เทคโนโลยีหลัก IP (แกนทรัพย์สินทางปัญญา) แกน IP เป็นส่วนประกอบสำเร็จรูปที่ทำให้ง่ายต่อการรวมเข้ากับโครงการของคุณเพื่อสร้างระบบที่ซับซ้อนมากขึ้น วิธีนี้มีข้อเสียเปรียบที่สำคัญประการหนึ่ง - การแนบนิวเคลียสของ IP กับพื้นฐานองค์ประกอบ IP core แต่ละตัวได้รับการปรับให้เหมาะสมสำหรับชิปซีรีส์เฉพาะจากผู้ผลิตเฉพาะ ซึ่งทำให้ความสามารถในการถ่ายโอนอุปกรณ์ที่สร้างไว้แล้วจากฐานองค์ประกอบหนึ่งไปยังอีกฐานหนึ่งลดลงอย่างมาก ลักษณะแบบปิดของสถาปัตยกรรม CAD เชิงพาณิชย์ทำให้ไม่สามารถเพิ่มรุ่นอุปกรณ์การทำงานของคุณเองในระดับระบบเพื่อรับรุ่นอุปกรณ์ที่ระดับการถ่ายโอนการลงทะเบียน (RTL) ตามรุ่นเหล่านั้น การพัฒนาโมดูลดิจิทัลดำเนินการในรูปแบบของวงจรดิจิทัลที่วาดในตัวแก้ไขวงจรโดยใช้ไลบรารี CAD ในตัวของผู้ผลิตสำหรับองค์ประกอบวงจรพื้นฐาน เช่น ฟลิปฟล็อป ตัวถอดรหัส ตัวนับ ตัวบวก ฯลฯ

อีกแนวทางหนึ่งที่ได้รับความนิยมที่ช่วยให้สามารถเปลี่ยนจากแบบจำลองการทำงานในระดับระบบไปเป็นรุ่นอุปกรณ์ที่ระดับการถ่ายโอนรีจิสเตอร์คือการใช้ภาษาการออกแบบระดับระบบ (SLDL) ภาษาดังกล่าว ได้แก่ SystemC, Handel-C, VHDL, Verilog, System Verilog ข้อได้เปรียบหลักคือความเป็นอิสระจากฐานฮาร์ดแวร์ที่จะใช้กับอุปกรณ์

ดังนั้นในอีกด้านหนึ่งเมื่อใช้เทคโนโลยี IP core นักพัฒนาฮาร์ดแวร์จะได้รับโซลูชันคุณภาพสูง แต่ผูกติดอยู่กับพื้นฐานฮาร์ดแวร์ที่ใช้งานอุปกรณ์อย่างเคร่งครัด ในทางกลับกัน เมื่อใช้ภาษาคำอธิบายฮาร์ดแวร์ในระดับระบบ การใช้งานอุปกรณ์จะเป็นอิสระจากฮาร์ดแวร์ จากที่กล่าวมาข้างต้น สิ่งสำคัญคือต้องร่วมกันใช้ภาษาคำอธิบายฮาร์ดแวร์และแกน IP ของผู้ผลิต (Xilinx, Altera, Actel ฯลฯ) และบริษัทพัฒนาบุคคลที่สาม เพื่อเร่งกระบวนการออกแบบโมดูลดิจิทัล เมื่อใช้โมดูลดิจิทัลจากผู้ผลิตบุคคลที่สาม บางครั้งอาจขาดข้อมูลในเอกสารประกอบ

ให้ข้อมูลเกี่ยวกับโมดูลดิจิทัลที่พัฒนาขึ้นสำหรับ FPGA

ขึ้นอยู่กับวิธีการรับการกำหนดค่า FPGA ตามรูปแบบการทำงานของอุปกรณ์ในระดับระบบ นักพัฒนาสามารถแยกแยะโมดูลดิจิทัลประเภทต่อไปนี้สำหรับ FPGA:

  • ซอฟต์แวร์ - โมดูลดิจิทัลที่พัฒนาแล้ว ส่งไปยังผู้บริโภคในรูปแบบของคำอธิบายในภาษาคำอธิบายฮาร์ดแวร์ (VHDL, Verilog) และ/หรือพัฒนาใน Schematic Editor เพื่อใช้ต่อไปในโปรแกรมสำหรับการสังเคราะห์วงจรลอจิกอัตโนมัติ และปรับให้เหมาะสมสำหรับพารามิเตอร์การทำงาน .
  • เฟิร์มแวร์ - โมดูลดิจิทัลที่พัฒนาโดยบริษัทพัฒนาบุคคลที่สามที่เรียกว่า IP core ซึ่งส่งไปยังผู้บริโภคในรูปแบบของวงจรลอจิคัล (netlist) โดยอิงตามไลบรารีองค์ประกอบลอจิคัลของผู้ผลิต FPGA และได้รับการปรับให้เหมาะสมสำหรับพารามิเตอร์การทำงานและทางไฟฟ้า

ในขั้นตอนของการพัฒนาเอกสารตามประสบการณ์ส่วนตัวจำเป็นต้องจัดทำนอกเหนือจากเอกสารการออกแบบและข้อกำหนดตามปกติที่ดำเนินการตาม GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114 เอกสารประกอบสำหรับทุกประเภท โมเดล (ระบบ ลอจิคัล วิศวกรรมวงจร) ที่สร้างขึ้นในขั้นตอนของการออกแบบอุปกรณ์ดิจิทัลบน FPGA

กล่าวอีกนัยหนึ่ง ชุดเอกสารการออกแบบสำหรับอุปกรณ์ดิจิทัลสำหรับ FPGA นอกเหนือจากไฟล์เฟิร์มแวร์ คำแนะนำในการเขียนโปรแกรม และโปรเจ็กต์ที่บันทึกไว้ในซีดี/ดีวีดี จะต้องมีเอกสารประกอบด้วย

โต๊ะ.รายการส่วนของเอกสารประกอบ

ชื่อส่วน ดู
ซอฟต์แวร์ เฟิร์มแวร์
ข้อมูลทั่วไป
วัตถุประสงค์และขอบเขต เกี่ยวกับ
ข้อมูลจำเพาะ เกี่ยวกับ เกี่ยวกับ
คำอธิบายของสัญญาณรีเซ็ต เกี่ยวกับ เกี่ยวกับ
คำอธิบายของสัญญาณการซิงโครไนซ์ เกี่ยวกับ เกี่ยวกับ
คำอธิบายของอินเทอร์เฟซ เกี่ยวกับ
ไดอะแกรมกำหนดเวลา เกี่ยวกับ
คำอธิบายของรีจิสเตอร์ควบคุม เกี่ยวกับ เกี่ยวกับ
แผนภาพโครงสร้าง (เชิงหน้าที่)
คู่มือการเขียนโปรแกรม เกี่ยวกับ เกี่ยวกับ
รุ่น FPGA หรือตระกูล
ผู้ผลิตของบริษัท
เกี่ยวกับ
การนำเสนอโมดูลดิจิทัล
สำหรับการออกแบบลอจิกบน FPGA
โมเดล RTL เกี่ยวกับ เลขที่
โมเดลลอจิก เลขที่ เกี่ยวกับ
ข้อจำกัดในการออกแบบ เกี่ยวกับ เกี่ยวกับ

นี่คือรายการส่วนต่างๆ (ตาราง) ที่ควรรวมอยู่ในเอกสารประกอบสำหรับโครงการโมดูลดิจิทัลสำหรับ FPGA สำหรับแต่ละส่วน จะมีการแสดงสัญญาณของความจำเป็นต้องรวมส่วนดังกล่าวไว้ในชุดเอกสาร:

  • “O” เป็นส่วนบังคับ
  • “P” คือส่วนที่แนะนำให้จัดส่ง

รูปแบบไฟล์ที่แนะนำสำหรับการส่งเอกสารประกอบ ได้แก่ MS Word, PDF (รูปแบบที่ดีที่สุด), HTML ไฟล์คำอธิบายในภาษาคำอธิบายฮาร์ดแวร์ (VHDL, Verilog) และ/หรือที่พัฒนาใน Schematic Editor มีให้ในรูปแบบที่ซอฟต์แวร์ CAD ต้องการเพื่อการพัฒนา ข้อยกเว้นอาจเป็นข้อกำหนดเพิ่มเติมในรูปแบบกราฟิก (JPEG, BMP) ของไฟล์วงจรดิจิทัลที่พัฒนาใน Schematic Editor

ข้อมูลทั่วไป

ส่วนนี้อธิบายข้อมูลทั่วไปเกี่ยวกับโมดูลดิจิทัลที่พัฒนาแล้วในรูปแบบของคำอธิบาย:

  • แผนภาพการทำงานและบล็อก/ชิ้นส่วนส่วนประกอบ
  • รีเซ็ตสัญญาณ, การซิงโครไนซ์;
  • อินเทอร์เฟซที่ใช้
  • ทะเบียนควบคุม
  • แผนภาพเวลา
  • การเขียนโปรแกรม

วัตถุประสงค์และขอบเขต

มีการกำหนดวัตถุประสงค์ของโมดูลดิจิทัลและขอบเขตการใช้งาน

ข้อมูลจำเพาะ

มีการจัดเตรียมคำอธิบายคุณลักษณะทางเทคนิคหลักไว้ เช่น ประสิทธิภาพ การใช้พลังงานสำหรับชิป FPGA เฉพาะ จำนวนเกตที่ใช้งาน และประเภทของชิป FPGA ที่ใช้ นอกจากนี้ ยังมีการระบุซอฟต์แวร์ CAD ของผู้ผลิต FPGA ที่ใช้ในการพัฒนาโมดูลดิจิทัลและซอฟต์แวร์ที่ใช้สำหรับการสร้างแบบจำลองและการตรวจสอบอีกด้วย สำหรับโปรแกรมทั้งหมดที่ใช้ จะมีการระบุเวอร์ชันและการอัปเดตที่ติดตั้งไว้ การแสดงกราฟิกของโมดูลดิจิทัลในรูปแบบของ "กล่องดำ" มาพร้อมกับการกำหนดอินพุต/เอาท์พุตภายนอก และให้คำอธิบายโดยย่อเกี่ยวกับวัตถุประสงค์

คำอธิบายของสัญญาณรีเซ็ต

รายละเอียดของสัญญาณรีเซ็ตได้รับด้านล่าง:

  • รายการสัญญาณรีเซ็ตภายนอกและภายใน
  • พารามิเตอร์ไทม์มิ่งและไดอะแกรมไทม์มิ่งของสัญญาณรีเซ็ต
  • วงจรสำหรับสร้างสัญญาณรีเซ็ตภายใน (ถ้ามี) เป็นส่วนหนึ่งของโมดูลดิจิตอล
  • ความสัมพันธ์กับสัญญาณอื่นๆ (โดยเฉพาะสัญญาณการซิงโครไนซ์)

คำอธิบายของสัญญาณการซิงโครไนซ์

ต่อไปนี้เป็นรายละเอียดเกี่ยวกับสัญญาณการซิงโครไนซ์:

  • คำอธิบายของสัญญาณการซิงโครไนซ์ภายนอก
  • พารามิเตอร์เวลาของสัญญาณซิงโครไนซ์
  • คำอธิบายของสัญญาณการซิงโครไนซ์ภายในและโครงร่างสำหรับการสร้าง
  • ความสัมพันธ์ด้านเวลาระหว่างสัญญาณการซิงโครไนซ์จากแหล่งต่างๆ

คำอธิบายของอินเทอร์เฟซ

มีการให้คุณสมบัติของการใช้อินเทอร์เฟซทั้งหมดที่เป็นส่วนหนึ่งของโมดูลดิจิทัลที่พัฒนาแล้ว โดยควรรวมเป็นหนึ่งเดียวสำหรับการจัดระเบียบการโต้ตอบกับโหนดอื่น ๆ ของระบบบนชิป นอกจากนี้ ยังมีลิงก์อินเทอร์เน็ตไปยังคำอธิบายที่สมบูรณ์ของอินเทอร์เฟซมาตรฐาน หรือมีคำอธิบายของอินเทอร์เฟซให้ด้วย ในขณะนี้ อินเทอร์เฟซบัส AMBA, PLB และ Wishbone ได้รับการยอมรับว่าเป็นอินเทอร์เฟซแบบรวมสำหรับโมดูลดิจิทัล

ไดอะแกรมกำหนดเวลา

ข้อมูลที่จำเป็นสำหรับการจัดการการแลกเปลี่ยนข้อมูลผ่านอินเทอร์เฟซและอินพุต/เอาต์พุตอื่นๆ ของโมดูลดิจิทัล: การแสดงแผนภาพเวลาแบบกราฟิก คำอธิบายโปรโตคอลการถ่ายโอนข้อมูล ข้อกำหนดสำหรับสัญญาณภายนอกที่จ่ายให้กับโมดูลดิจิทัล (ระยะเวลา ความถี่ ฯลฯ) และข้อมูลอื่นๆ

คำอธิบายของรีจิสเตอร์ควบคุม

มีคำอธิบายของรีจิสเตอร์ควบคุมทั้งหมดของโมดูลดิจิทัลไว้ด้วย คำอธิบายรีจิสเตอร์ควบคุมโดยทั่วไปประกอบด้วยชื่อรีจิสเตอร์ ที่อยู่รีจิสเตอร์ในพื้นที่ที่อยู่ภายใน ค่าเริ่มต้นหลังจากสัญญาณรีเซ็ตถูกลบ ประเภทการเข้าถึง (อ่าน/เขียน) และคำอธิบายของฟิลด์ภายใน

แผนภาพโครงสร้าง (เชิงหน้าที่)

มีรูปภาพของโครงสร้างภายในของการเชื่อมต่อของโหนด/บล็อกภายในหลักของโมดูลดิจิทัล รวมถึงคำอธิบายข้อความสั้นๆ นอกจากนี้ ยังมีการให้คำอธิบายเกี่ยวกับบล็อกภายในหลักของโมดูลดิจิทัลด้วย วัตถุประสงค์ของเอกสารนี้คือเพื่อให้ผู้บริโภคได้รับข้อมูลที่จำเป็นในการทำความเข้าใจหลักการทำงานของโมดูลดิจิทัล

จำนวนบล็อกที่อธิบายและขอบเขตของคำอธิบายถูกกำหนดโดยผู้พัฒนาโมดูลดิจิทัล เป็นการดีกว่าที่จำนวนโมดูลขั้นต่ำที่อธิบายไว้จะสอดคล้องกับจำนวนองค์ประกอบของแผนภาพโครงสร้าง (การทำงาน) ของโมดูลดิจิทัล

คำอธิบายทั่วไปของคอยล์เย็นประกอบด้วย:

  • วัตถุประสงค์ของบล็อก
  • แผนภาพโครงสร้าง (การทำงาน) ของบล็อก (ถ้าจำเป็น)
  • โหมดการทำงานและอัลกอริธึม
  • แผนภาพเวลาทำงาน
  • การจัดระบบการจัดการบล็อก
  • การจัดระเบียบการสื่อสารกับบล็อกอื่น
  • ข้อมูลอื่นใด

คู่มือการเขียนโปรแกรม

ให้ข้อมูลที่จำเป็นทั้งหมดเกี่ยวกับกระบวนการเขียนโปรแกรมโดยใช้ซอฟต์แวร์ CAD ของผู้ผลิตโมดูลดิจิทัลใน FPGA เครื่องมือที่จำเป็นสำหรับการพัฒนาและการดีบักซอฟต์แวร์ และไลบรารีซอฟต์แวร์

รุ่น FPGA หรือตระกูลผู้ผลิต

สำหรับเฟิร์มแวร์ของโมดูลดิจิทัล จะมีการระบุผู้ผลิต FPGA รุ่นหรือตระกูลของ FPGA และคุณลักษณะความเร็ว สำหรับโมดูลดิจิทัลของซอฟต์แวร์ จะมีข้อมูลเกี่ยวกับจำนวนทรัพยากรที่ใช้และข้อกำหนดสำหรับ FPGA ที่ใช้

การแสดงโมดูลดิจิทัลสำหรับการออกแบบลอจิก

บทความนี้กล่าวถึงความยากลำบากในการใช้โครงการ "ต่างประเทศ" ใน VHDL - การขาดแนวทางที่เหมาะสมสำหรับการตั้งชื่อและกฎเกณฑ์ในการเขียนโปรแกรม รวมถึงแนวปฏิบัติทั่วไปเกี่ยวกับชื่อ มารยาทที่ดีในการเขียนโปรแกรม และแนวปฏิบัติในการสังเคราะห์ ปัญหาเหล่านี้ควรหารือกับนักพัฒนาอย่างละเอียดที่สุดเท่าที่จะเป็นไปได้ หากในอนาคตคุณวางแผนที่จะพัฒนาหรืออัปเกรดด้วยตนเองต่อไป ก่อนที่เขาจะเริ่มพัฒนาโมเดล RTL ของโมดูลดิจิทัลบน FPGA สิ่งนี้ใช้กับประเภทของโมดูลดิจิทัลซอฟต์แวร์บน FPGA โดยเฉพาะ บทความนี้ในส่วนนี้จะอธิบายข้อกำหนดทั่วไปสำหรับโครงการทั้งหมดของโมดูลดิจิทัลที่พัฒนาแล้วบน FPGA ต่อไปนี้เป็นประเด็นที่คุณควรคำนึงถึงเมื่อจัดทำข้อกำหนดทางเทคนิคสำหรับการพัฒนาโมดูลดิจิทัลบน FPGA และโดยเฉพาะอย่างยิ่งเกี่ยวข้องกับการถ่ายโอนผลงาน

โมเดล RTL

โมดูลดิจิทัลที่อธิบายไว้ในชุดย่อยสังเคราะห์ของภาษา Verilog หรือ VHDL และ/หรือพัฒนาใน Schematic Editor มีจุดประสงค์เพื่อใช้ในขั้นตอนการสังเคราะห์ลอจิก FPGA จัดส่งไปยังซอฟต์แวร์ในรูปแบบของโครงการโมดูลดิจิทัลที่ประกอบในซอฟต์แวร์ CAD ของผู้ผลิต FPGA สำหรับโมดูลเฟิร์มแวร์ดิจิทัล โมเดล RTL มีให้ภายใต้ข้อตกลงแยกต่างหาก

นอกเหนือจากไฟล์โมเดล RTL แล้ว ยังมีการส่งข้อมูลต่อไปนี้:

  • คำแนะนำในการใช้แบบจำลอง
  • คำอธิบายของบล็อกหน่วยความจำที่รวมอยู่ในโมเดล รวมถึงประเภทหน่วยความจำ ขนาด จำนวนบล็อกหน่วยความจำ ชื่อลำดับชั้นของบล็อกหน่วยความจำ
  • คำอธิบายกระบวนการสร้างเคอร์เนลสำเร็จรูปโดยใช้โปรแกรมเพื่อสร้างเคอร์เนล (เช่น CoreGenerator สำหรับ Xilinx ISE) ในกรณีที่ไม่มีคำอธิบาย อาจมีข้อจำกัดในการออกแบบใหม่และการใช้งานเนื่องจากการพึ่งพาเทคโนโลยีและการพึ่งพาของผู้ผลิต
  • ในกรณีของการใช้ไมโครโปรเซสเซอร์จากผู้ผลิต (เช่นจากโปรเซสเซอร์ Altera - Nios; จาก Xilinx - Microblaze, ไมโครโปรเซสเซอร์ PowerPC) จำเป็นต้องมีคำอธิบายกระบวนการกำหนดค่าคอร์โปรเซสเซอร์และอุปกรณ์ต่อพ่วง
  • ชุดการทดสอบ (ไฟล์ Test Bench) สำหรับการตรวจสอบและการจำลองโมดูลดิจิทัล เขียนด้วย Verilog และ/หรือ VHDL และ/หรือ System Verilog
  • ข้อมูลเพิ่มเติมอื่น ๆ

โมเดลลอจิก

โมเดลนี้เป็นรายการวงจรที่อธิบายโดยใช้ภาษา Verilog หรือ VHDL บนพื้นฐานของไลบรารีของผู้ผลิต FPGA และจัดทำขึ้นสำหรับเฟิร์มแวร์ของโมดูลดิจิทัล

นอกเหนือจากไฟล์โมเดลเชิงตรรกะแล้ว ยังมีการส่งข้อมูลต่อไปนี้:

  • คำแนะนำในการใช้รุ่นนี้
  • ชุดการทดสอบ (ไฟล์ Test Bench) สำหรับการตรวจสอบและการจำลองโมดูลดิจิทัล เขียนด้วย Verilog และ/หรือ VHDL และ/หรือ System Verilog
  • คำแนะนำในการทำงานกับชุดการทดสอบสำหรับการสร้างแบบจำลองและการตรวจสอบโมดูลดิจิทัล
  • ข้อมูลเพิ่มเติมอื่น ๆ

ข้อจำกัดในการออกแบบ

ข้อจำกัดในการออกแบบมีให้เป็นไฟล์ที่อธิบายชุดของข้อจำกัดที่กำหนดในโมดูลดิจิทัล เมื่อรวมอยู่ในโมเดลลอจิกระบบบนชิป ชุดนี้ประกอบด้วยข้อจำกัดด้านนาฬิกา ข้อจำกัดด้านเวลา ข้อจำกัดในการโต้ตอบของโมดูลดิจิทัลกับโมดูลอื่นๆ และสภาวะการทำงานของโมดูลดิจิทัล ขอแนะนำให้ใช้รูปแบบ Synopsis Design Constraints (SDC) หรือรูปแบบ CAD ของผู้ผลิต FPGA

รายการตัวอย่างข้อจำกัดสำหรับสัญญาณการซิงโครไนซ์:

  • แผนภาพเวลา (รูปคลื่นนาฬิกา);
  • ความไม่เสถียรของความถี่สัญญาณนาฬิกา (Jitter);
  • การเปลี่ยนเฟสความถี่สัญญาณนาฬิกา
  • ระยะเวลาของการสลับครั้ง (เวลาการเปลี่ยน);
  • แผนภาพเวลาของรูปคลื่นสัญญาณนาฬิกาที่ได้รับ
  • ข้อมูลเพิ่มเติมอื่น ๆ

จำเป็นต้องมีชุดข้อจำกัดสำหรับสัญญาณการซิงโครไนซ์สำหรับโมดูลดิจิทัลซอฟต์แวร์และเฟิร์มแวร์

รายการตัวอย่างการจำกัดเวลา:

  • เวลาที่มาถึงที่อินพุต;
  • เวลาที่ปรากฏของสัญญาณที่เอาท์พุต (เวลาที่ต้องการที่เอาท์พุต)
  • เส้นทางหลายรอบ
  • เส้นทางเท็จ
  • ระยะเวลาของเวลาเปลี่ยนสัญญาณข้อมูล (เวลาเปลี่ยนสัญญาณข้อมูล)
  • ข้อมูลเพิ่มเติมอื่น ๆ

บทสรุป

ชุดเอกสารประกอบต่อไปนี้สำหรับโมดูลดิจิทัลที่พัฒนาแล้วสำหรับ FPGA จัดทำขึ้นโดยข้อตกลงระหว่างผู้บริโภคและผู้พัฒนา บ่อยครั้งที่นักพัฒนาจัดเตรียมโมดูลดิจิทัลที่อธิบายไว้ใน VHDL, Verilog, System Verilog และ/หรือพัฒนาในตัวแก้ไขวงจร เกี่ยวกับเอกสารประกอบเพิ่มเติม คำตอบของนักพัฒนามักเป็นดังนี้: “โมดูลดิจิทัลใช้งานได้ ดังนั้นควรนำไปใช้และใช้งาน ไม่มีอะไรซับซ้อนในการอธิบายวงจรในภาษาฮาร์ดแวร์ คุณสามารถคิดออกเองได้”

ในความเห็นของผู้เขียนคุณสามารถเข้าใจอะไรก็ได้ทุกอย่างขึ้นอยู่กับความต้องการและเวลาที่ใช้และเวลาที่ใช้ในการทำความเข้าใจโครงการ "ของคนอื่น" สำหรับโมดูลดิจิทัลที่พัฒนาแล้วนั้นแปรผันโดยตรงกับประสบการณ์ในการอธิบายอุปกรณ์ใน VHDL Verilog และความรู้วงจรดิจิทัลและไมโครโปรเซสเซอร์ สิ่งนี้สามารถหลีกเลี่ยงได้หากคุณตกลงกับนักพัฒนาในตอนแรกเกี่ยวกับองค์ประกอบของเอกสารประกอบ จากนั้นการใช้โมดูลดิจิทัลในโครงการของคุณจะง่ายขึ้น และการนำไปใช้งานจะเกิดขึ้นเร็วขึ้น

โดยสรุป ผู้เขียนต้องการทราบว่าเมื่อกำหนดงานการพัฒนาอุปกรณ์ดิจิทัลบน FPGA เราควรปฏิบัติตามคำแนะนำที่ให้ไว้ในบทความ จากนั้นปัญหาจะไม่เกิดขึ้นเมื่อนำกลับมาใช้ใหม่หรืออัปเกรดอุปกรณ์ดิจิทัลที่พัฒนาก่อนหน้านี้

วรรณกรรม

  1. Denisov A. เคล็ดลับในการออกแบบอุปกรณ์ดิจิทัลบน VHDL สำหรับ FPGA // ส่วนประกอบและเทคโนโลยี พ.ศ. 2552 ฉบับที่ 12.
  2. GOST 2.102-68 ESKD ประเภทและความครบถ้วนของเอกสารการออกแบบ
  3. GOST 2.114-95 ESKD เงื่อนไขทางเทคนิค
  4. GOST 15.101-98 ระบบการพัฒนาและนำสินค้าเข้าสู่การผลิต ขั้นตอนการดำเนินงานวิจัยทางวิทยาศาสตร์
  5. GOST R 15.201-20-00. ระบบการพัฒนาและนำสินค้าเข้าสู่การผลิต ผลิตภัณฑ์สำหรับวัตถุประสงค์ทางอุตสาหกรรมและทางเทคนิค ขั้นตอนการพัฒนาและนำผลิตภัณฑ์เข้าสู่การผลิต

การใช้ FPGA ในอุปกรณ์สมัยใหม่

ตูปิคอฟ พาเวล อันดรีวิช

นักศึกษาชั้นปีที่ 5 ภาควิชาศิลปะ มหาวิทยาลัยเทคนิคแห่งรัฐออมสค์ สหพันธรัฐรัสเซีย เมืองออมสค์

ปัจจุบันวงจรรวมลอจิกที่ตั้งโปรแกรมได้ (FPGA) ถูกนำมาใช้มากขึ้นในอุปกรณ์สมัยใหม่ต่างๆ เนื่องจาก FPGA มีข้อได้เปรียบที่สำคัญเหนือวงจรไมโครดิจิทัลทั่วไป ข้อดีเหล่านี้ได้แก่:

· ปรับปรุงลักษณะชั่วคราวของผลิตภัณฑ์แล้ว

· ราคาสินค้าลดลง

· ขนาด ผลิตภัณฑ์ ลดลง

· ความน่าเชื่อถือของผลิตภัณฑ์เพิ่มขึ้น (จำนวนชิปแยกลดลง)

เพิ่มความยืดหยุ่นของผลิตภัณฑ์ (สามารถตั้งโปรแกรม FPGA ใหม่ได้ตลอดเวลา)

สถาปัตยกรรม FPGA มีโครงสร้างที่ซับซ้อน (รูปที่ 1)

รูปที่ 1 โครงสร้างภายในของ FPGA

ดังที่เห็นได้จากรูปที่ 1 ส่วนหลักของ FPGA ประกอบด้วยบล็อกลอจิกที่ตั้งโปรแกรมได้และการเชื่อมต่อภายในที่ตั้งโปรแกรมได้

กระบวนการเขียนโปรแกรม (เฟิร์มแวร์) ของ FPGA ประกอบด้วยการสร้างการเชื่อมต่อที่จำเป็นระหว่างอินพุตและเอาต์พุตของอุปกรณ์

ปัจจุบันมีผู้นำระดับโลกสองคนในการผลิต FPGA เหล่านี้คือ บริษัท อเมริกัน Xilinx และ Altera

แต่ละบริษัทมีซอฟต์แวร์ CAD ของตัวเองสำหรับการทำงานกับ FPGA Xilinx นำเสนอชุดพัฒนาซอฟต์แวร์ Xilinx (SDK) Altera นำเสนอ Max+Plus II และ Quartus II รวมถึงระบบการสร้างแบบจำลอง ModelSim

ในการสร้างโปรแกรมเฟิร์มแวร์มักจะใช้ภาษาสำหรับอธิบายการทำงานของฮาร์ดแวร์ ภาษาที่พบบ่อยที่สุดในปัจจุบันมีดังนี้:

เวอริล็อก เอชดีแอล.

ภาษา VHDL เป็นภาษาที่ยากที่สุดในการเรียนรู้ แต่ในขณะเดียวกัน ก็มีความสามารถสูงสุดในระดับการทำงานและพฤติกรรมของนามธรรม แต่มีความสามารถน้อยกว่าในระดับโครงสร้างของนามธรรมเมื่อเปรียบเทียบกับ Verilog HDL ไลบรารี VITAL ได้รับการพัฒนาเพื่อ ขยายขีดความสามารถของภาษา VHDL (รูปที่ 2)


รูปที่ 2 ระดับของนามธรรม เวอริล็อก และ วีเอชดีแอล

ตัวอย่างการทำงานของภาษา Verilog HDL คือโปรแกรมที่ใช้งานบน FPGA CYCLONE III EP3C5E1444C8N ของขาตั้ง Mini-DiLab มุมมองทั่วไปซึ่งแสดงไว้ในรูปที่ 1 3.


รูปที่ 3 มุมมองทั่วไปของบอร์ด มินิ - ดิแล็บ

โปรแกรมนี้ใช้การสลับลำดับของไฟ LED led0-led7 โดยมีตัวเลือกในการเพิ่มการเคลื่อนที่ของ "แสง" โดยใช้ปุ่ม pba และ pbb รวมถึงการควบคุมความเร็วในการเปลี่ยนโดยใช้สวิตช์ sw0, sw1

//ข้อความโปรแกรม

โมดูลโครงการ( เอาท์พุทนำ, ป้อนข้อมูล clk_25mhz, ป้อนข้อมูลพีบีเอ ป้อนข้อมูลพีบีบี

ป้อนข้อมูลสว);

// วัตถุประสงค์ของการเชื่อมต่อโครงการภายใน

ลวด s1;

ลวด s2;

ลวด s3;

// เรียกไฟล์อื่น (รูทีนย่อย) ที่เชื่อมต่อกับโปรเจ็กต์

Tr tr_1 (.ออก(s2), .set(pba), .res(pbb));

ตัวนับ counter_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.ออก(นำ), .ใน(s3));

สิ้นสุดโมดูล// สิ้นสุดโปรแกรม

รูทีนย่อย tr

โมดูล tr(ออก, ตั้งค่า, ความละเอียด); //สร้างโปรแกรม

// การกำหนดอินพุต/เอาท์พุต

เอาท์พุทเร็กออก;

ป้อนข้อมูลชุด;

ป้อนข้อมูลละเอียด;

// การเริ่มต้น

อักษรย่อ

เริ่ม

ออก<= 1"d0;

// รหัสโปรแกรมหลัก

เสมอ @(ละเลยตั้งหรือ ละเลยละเอียด)

เริ่ม

ถ้า(~(ชุด))

ออก<= 1"d1;

อื่น

ออก<= 1"d0;

สิ้นสุดโมดูล //สิ้นสุดโปรแกรม

ตัวนับรูทีนย่อย

โมดูลเคาน์เตอร์ (con, q, clk, up); // เริ่มต้นโปรแกรม

เอาท์พุทเร็กแย้ง;

เอาท์พุทคิว = แย้ง;

ป้อนข้อมูลขึ้น CLK;

// รหัสโปรแกรมหลัก

เสมอ @(ท่าโพสคลิก)

เริ่ม

ถ้า(คลิก)

ถ้า(ขึ้น)

คอน<= con - 1"d1;

อื่น

คอน<= con + 1"d1;

สิ้นสุดโมดูล//สิ้นสุดโปรแกรม

รูทีนย่อย mx (มัลติเพล็กเซอร์)

โมดูลม.เอ็กซ์ ( การลงทะเบียนเอาท์พุทก, ป้อนข้อมูลใน, ป้อนข้อมูลโหลด);

// รหัสโปรแกรมหลัก

เสมอ @*

เริ่ม

กรณี(โหลด)

2"b00:a = ใน;

2"b01: ก = ใน;

2"b10: ก = เข้า;

2"b11: ก = เข้า;

กรณีท้าย

สิ้นสุดโมดูล // สิ้นสุดโปรแกรม

รูทีนย่อย dc3_8 (มัลติเพล็กเซอร์)

โมดูล dc3_8(ออก, ใน); // เริ่มต้นโปรแกรม

// การกำหนดอินพุต/เอาท์พุต

การลงทะเบียนเอาท์พุทออก;

สายอินพุตใน;

// รหัสโปรแกรมหลัก

เสมอ @*

เริ่ม

กรณี(ใน)

3"d0: ออก = 8"b11111110;

3"d1: ออก = 8"b11111101;

3"d2: ออก = 8"b11111011;

3"d3: ออก = 8"b11110111;

3"d4: ออก = 8"b11101111;

3"d5: ออก = 8"b11011111;

3"d6: ออก = 8"b10111111;

3"d7: ออก = 8"b01111111;

กรณีท้าย

สิ้นสุดโมดูล // สิ้นสุดโปรแกรม

โปรแกรมนี้ถูกนำไปใช้ในซอฟต์แวร์ Quartus II CAD

หลังจากคอมไพล์โปรแกรมแล้ว คอมไพเลอร์ไม่ได้สร้างข้อผิดพลาดหรือข้อคิดเห็นในโปรแกรมที่เกี่ยวข้องกับการวิเคราะห์และไวยากรณ์ของโปรแกรม (รูปที่ 4)


รูปที่ 4 หน้าต่างข้อความโครงการ

ความคิดเห็นที่ทำโดยคอมไพเลอร์ระบุว่าไม่มีใบอนุญาตสำหรับ Quartus II (โปรแกรมเวอร์ชันฟรีใช้สำหรับการฝึกอบรม) และไม่มีไฟล์ที่จำเป็นสำหรับการสร้างแบบจำลองโครงการ

RTL โครงสร้างของโครงการนี้แสดงไว้ในรูปที่ 1 5.


รูปที่ 5 การดำเนินโครงการ ( ร.ต.ท โครงสร้าง)

ดังแสดงในรูป 6 ในโปรแกรมนี้ใช้ความสามารถของ FPGA นี้เพียงส่วนเล็กๆ เท่านั้น

รูปที่ 6 ส่วนหนึ่งของ FPGA ที่เกี่ยวข้องกับโครงการ

ข้อสรุป:วงจรรวมลอจิกที่ตั้งโปรแกรมได้สามารถใช้ได้ในอุปกรณ์หลายชนิด หากต้องการเรียนรู้ที่จะทำงานร่วมกับพวกเขาควรแนะนำความคุ้นเคยกับภาษาคำอธิบายฮาร์ดแวร์ (Verilog HDL และ VHDL) ในโปรแกรมการศึกษาเฉพาะทางที่เกี่ยวข้องกับการออกแบบและการสร้างอุปกรณ์อิเล็กทรอนิกส์

บรรณานุกรม:

1. กรูเชวิทสกี้ อาร์.ไอ. การออกแบบระบบบนชิปลอจิกโปรแกรม / R.I. กรูเชวิตสกี้, A.X. Mursaev, E.P. มืดมน เซนต์ปีเตอร์สเบิร์ก: BHV ปีเตอร์สเบิร์ก, 2545 - 608 หน้า

2. โคโลมอฟ ดี.เอ. ระบบการออกแบบโดยใช้คอมพิวเตอร์ช่วย Altra MAX+plus II และ Quartus II คำอธิบายสั้น ๆ และบทช่วยสอน / D.A. Kolomov, R.A. มายล์ค, เอ.เอ. โซเบนโก, A.S. ฟิลิปโปฟ. อ.: IP RadioSoft, 2545. - 126 น.

3. Maxfield K. การออกแบบบน FPGA หลักสูตรนักสู้รุ่นเยาว์/เค.แม็กซ์ฟิลด์ อ.: สำนักพิมพ์ "Dodeka-XXI", 2550 - 408 หน้า (แปลจากภาษาอังกฤษ)