VHDL: การใช้ตัวดำเนินการ '*' เมื่อใช้ตัวคูณในการออกแบบ


10

ปัจจุบัน FPGAs ได้สร้างขึ้นในบล็อก DSP, FPGA ล่าสุดแม้ได้สร้างขึ้นในหน่วยจุดลอยตามมาตรฐาน IEEE-754

สามารถสร้างเอนทิตี / โมดูล DSP โดยใช้ GUI หลังจากเลือกพารามิเตอร์ที่ต้องการในมันจากนั้นสร้างอินสแตนซ์ในการออกแบบได้ทันที

เมื่อใดที่เราต้องทำ micromanagment ในการออกแบบบล็อก DSP ที่เกิดขึ้นจริงทันทีและเมื่อใดที่เราเพิ่งใส่โอเปอเรเตอร์ '*' ในรหัสและให้เครื่องมือสังเคราะห์จัดการรายละเอียดในระดับต่ำ? ไหนดีกว่ากัน

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


FPGA ใดที่มี FPU ที่สอดคล้องกับ 754 ในเนื้อผ้า
Martin Thompson

คำตอบ:


6

ฉันทำแบบนี้สองสามครั้ง

โดยทั่วไปเครื่องมือออกแบบจะเลือกระหว่างการนำแฟบริคไปใช้กับชิ้นส่วน DSP ตามการตั้งค่าการสังเคราะห์

ตัวอย่างเช่นสำหรับ Xilinx ISE ในการตั้งค่ากระบวนการสังเคราะห์ตัวเลือก HDL จะมีการตั้งค่า "-use_dsp48" พร้อมตัวเลือก: อัตโนมัติ, AutoMax, ใช่, ไม่ใช่อย่างที่คุณจินตนาการการควบคุมเครื่องมือจะพยายามอย่างหนัก DSP ชิ้น ฉันเคยมีปัญหาเมื่อฉันคูณจำนวนเต็มด้วย 3 ซึ่งอนุมาน DSP slice - ยกเว้นว่าฉันได้อนุมาน DSP DSP ทุกชิ้นในชิปด้วยตนเองแล้วดังนั้น synth จึงล้มเหลว! ฉันเปลี่ยนการตั้งค่าเป็นไม่ใช่เพราะฉันใช้ชิ้นส่วน dsp ทุกครั้งแล้ว

นี่น่าจะเป็นกฎง่ายๆที่ดี (ฉันเพิ่งทำไป): ถ้าการออกแบบของคุณมีสัญญาณนาฬิกาที่น้อยกว่า 50 MHz และคุณอาจจะใช้ DSP น้อยกว่า 50% ของชิป DSP ในชิปจากนั้นก็ใช้ *, +, และ - ตัวดำเนินการ สิ่งนี้จะอนุมานว่าตัวแบ่ง DSP นั้นไม่มีการลงทะเบียนไปป์ไลน์ นี่เป็นการ จำกัด ความเร็วสูงสุดจริงๆ (ฉันไม่รู้ว่าจะเกิดอะไรขึ้นเมื่อคุณใช้การหาร)

อย่างไรก็ตามหากดูเหมือนว่าคุณจะเรียกใช้ชิ้นส่วนที่ใกล้เคียงกับความเร็วสูงสุดของชิ้น DSP (333 MHz สำหรับเกรดความเร็วปกติ Spartan 6) คุณจะใช้ชิ้นส่วนทั้งหมดด้วยตนเองคุณควรสรุปด้วยตนเอง .

ในกรณีนี้คุณมีสองตัวเลือก

ตัวเลือก 1: ใช้เทมเพลตการสร้างอินสแตนซ์ดิบ DSP ด้วยตนเอง ตัวเลือกที่ 2: ใช้บล็อก IP จาก Xilinx Core Generator (ฉันจะใช้ตัวเลือกนี้ในเวลาเดียวกันคุณจะได้เรียนรู้เกี่ยวกับ core gen ซึ่งจะช่วยในอนาคต)

ก่อนที่คุณจะทำอย่างใดอย่างหนึ่งให้อ่านหน้าแรกของคู่มือผู้ใช้งานชิ้น DSP ในกรณีของ Spartan 6 (DSP48A1) นั่นจะเป็น Xilinx doc UG389: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

พิจารณาตัวเลือก Core Generator ก่อน ฉันมักจะสร้างโครงการทดสอบใน Core Generator สำหรับส่วนที่ฉันทำงานด้วยซึ่งฉันจะสร้างบล็อก IP จำนวนเท่าใดก็ได้เพื่อเรียนรู้ระบบ จากนั้นเมื่อฉันพร้อมที่จะเพิ่มการออกแบบของฉันใน ISE ฉันคลิกขวาในลำดับชั้นการออกแบบคลิกแหล่งที่มาใหม่และเลือก "IP (CORE Generator & Architecture Wizard)" เพื่อให้ฉันสามารถแก้ไขและสร้างบล็อกใหม่ได้โดยตรง จากโครงการของฉัน

ใน Core Gen ลองดูที่บล็อก IP ต่างๆที่คุณสามารถเลือกได้ - มีไม่กี่โหลซึ่งส่วนใหญ่ค่อนข้างเท่ห์

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

เมื่อฉันสร้างตัวกรอง IIR ลำดับ 5 โดย 3 เมื่อปีที่แล้วฉันต้องใช้เทมเพลตการสร้างอินสแตนซ์แบบแมนนวลตั้งแต่ฉันสร้างการใช้งานที่กำหนดเองด้วย DSP DSP 2 แผ่นที่โอเวอร์คล็อกได้เร็วกว่าอัตราตัวอย่าง 4 เท่า มันเป็นความเจ็บปวดทั้งหมด


13

หากคุณเพียงต้องการคูณสองตัวเลขและพวกเขาเหมาะสมกับบล็อก DSP จากนั้น*ผู้ประกอบการควรอนุมานบล็อก DSP ถ้าไม่ส่งเครื่องมือการสังเคราะห์กลับ :)

อย่างไรก็ตามในการใช้ประโยชน์จากการผสมผสานที่ซับซ้อนมากขึ้นของฟังก์ชั่น DSP มักจะต้องการการสร้างอินสแตนซ์โดยตรงของบล็อกและการกำหนดค่าพารามิเตอร์ ตัวอย่างของสิ่งต่าง ๆ ซึ่งอาจแมปได้ดีโดยการอนุมาน (ใช้ตัวอย่าง Xilinx DSP48E1 ):

  • การใช้ pre-adder
  • การใช้งานของสะสมโพสต์
  • การใช้เครื่องตรวจจับลวดลาย
  • การใช้หน่วยลอจิก

และโดยเฉพาะอย่างยิ่งการรวมกันของด้านบน

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


4

หากมีบล็อก DSP อยู่คุณควรใช้บล็อกเหล่านั้นหากทำได้เพราะจะมีประสิทธิภาพมากกว่าการใช้ LUT เพื่อทำสิ่งเดียวกัน นอกจากว่าคุณไม่ต้องการการคูณที่มีประสิทธิภาพสูงซึ่งในกรณีนี้คุณควรนำไปใช้พูด adder ไปป์ไลน์และ shift register เพื่อประหยัดพื้นที่

อย่างไรก็ตามฉันจะดูบล็อก DSP ที่อนุมานก่อนที่จะเข้าไปในเครื่องมือ GUI คู่มือ Xilinx XST มี 'ผู้รับ' ของ HDL สำหรับวิธีสร้างอินสแตนซ์บล็อก DSP ด้วย verilog / VHDL บริสุทธิ์ โดยทั่วไปหากคุณเพิ่มการลงทะเบียนมากพอก่อนและ / หรือหลังตัวทวีคูณ XST จะใช้บล็อก DSP เพื่อดำเนินการโดยอัตโนมัติ คุณสามารถตรวจสอบในบันทึกการสังเคราะห์เพื่อดูว่ามีการอนุมานบล็อก DSP อย่างถูกต้องหรือไม่ ฉันคิดว่า Altera มีบางสิ่งที่คล้ายกัน

บังเอิญฉันเพิ่งจะคร่ำครวญเมื่อสองสามนาทีก่อนขณะที่ฉันกำลังใช้งาน Twers Mersenne ที่ใช้ตัวคูณสำหรับเมล็ดเริ่มต้นเท่านั้น การนำไปใช้ครั้งแรกของฉันไม่ตรงตามเวลา แต่ฟังก์ชั่นนั้นถูกต้อง XST ยังเพิ่มการดำเนินการทวีคูณลงในบล็อก DSP อีกด้วยอย่างไรก็ตามมันไม่ได้รับการปรับปรุงเพื่อให้ทำงานได้เร็วกว่าที่ฉันต้องการประมาณครึ่งหนึ่ง ฉันอาจจะปรับใช้การคูณด้วยเทคนิค shift-and-add ที่จะใช้จำนวนรอบนาฬิกา 32x แต่จะไม่ต้องใช้ตัวคูณฮาร์ดแวร์อีกต่อไป


เหตุใดจึงไม่ควรกำหนดเวลาเมื่อใช้ตัวคูณฮาร์ดแวร์
quantum231

32 บิตต่อ 32 บิตที่ไม่ใช่ pipelined คูณใช้เวลามากกว่า 8 ns
alex.forencich

อืมฉันเห็นแล้วไม่ได้พิจารณาสิ่งนั้น ดังนั้นบล็อก DSP จึงไม่ได้ถูกวางท่อ ฉันสงสัยว่าพวกเขาใช้การคูณอย่างไร มันเป็นตัวคูณขนานยากจริงหรือไม่?
quantum231

ฉันคิดว่ามันสามารถกำหนดค่าให้ทำงานได้หลายวิธี ตามคู่มือ XST การเพิ่มการลงทะเบียนที่เพียงพอในอินพุตและเอาต์พุตจะอนุญาตให้ XST ใช้ตัวคูณ pipelined ใน slice DSP48 ในกรณีของฉันมีเพียงหนึ่งเอาต์พุตรีจิสเตอร์และไม่มีรีจิสเตอร์อินพุตดังนั้นจึงไม่สามารถใช้ประโยชน์จากสิ่งนี้ได้ เนื่องจากนี่เป็นเพียงการเริ่มต้น (seeding the PRNG) ฉันจึงแทนที่ตัวคูณแบบขนานด้วยตัวคูณบิตอนุกรมเพื่อบันทึกในการใช้ทรัพยากร
alex.forencich

2

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

ฉันไม่รู้ว่ามีตัวคูณ FP เดินสายอยู่ใน FPGA แล้วหรือยัง

ตัวดำเนินการคูณที่สอดคล้องกับมาตรฐาน IEEE P754 จริงที่เหมาะสมสำหรับ CPU เกี่ยวข้องกับตัวคูณขนาดใหญ่: คุณต้องเพิ่มเลขชี้กำลัง, เลื่อน denormals, จัดการ infinites และค่าสถานะไร้ประโยชน์ส่วนใหญ่ (ไม่แน่นอน, ต่ำเกินไป ... )


FPGA รุ่นล่าสุดเช่น Altera 10 series มีตัวคูณทศนิยมตามมาตรฐาน IEEE-754 บนฮาร์ดแวร์ของตัวเอง! ฉันไม่มีโอกาสใช้มันด้วยตัวเอง
quantum231

ถ้าเราสร้างบล็อก DSP แล้ว FPGA ควรใช้มันแทนที่จะเป็นตัวคูณ combinatorial หรือใช้อัลกอริธึมอื่น ๆ ที่เช่นใช้บล็อกหน่วยความจำใช่มั้ย
quantum231

2

ฉันอ่านเอกสารนี้ที่ http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf :

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

ฉันหวังว่าฉันจะหาแหล่งที่มาของเครื่องมือของพวกเขาเพื่อตรวจสอบสิ่งที่พวกเขาค้นพบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.