ฟังก์ชันการคูณเมทริกซ์เวกเตอร์ใน VHDL นี้เป็นแบบขนานหรือไม่


9

ฉันมีฟังก์ชั่น VHDL ต่อไปนี้ที่คูณเมทริกซ์ mxn ที่กำหนดaโดยเวกเตอร์ nx1 b:

function matrix_multiply_by_vector(a: integer_matrix; b: integer_vector; m: integer; n: integer)
return integer_vector is variable c : integer_vector(m-1 downto 0) := (others => 0);
begin
    for i in 0 to m-1 loop
        for j in 0 to n-1 loop
            c(i) := c(i) + (a(i,j) * b(j));
        end loop;
    end loop;
    return c;
end matrix_multiply_by_vector;

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


1
หากไม่มีคุณจะต้องมีหน่วยความจำบางส่วนและโหลดค่าทั้งหมดและ "ดำเนินการ" ตามลำดับขั้นตอนเหล่านี้
Voltage Spike

คำตอบ:


9

ใน 'hardware' (VHDL หรือ Verilog) ลูปทั้งหมดจะไม่ถูกควบคุมและดำเนินการแบบขนาน

ดังนั้นไม่เพียง แต่วงในของคุณเท่านั้น

นั่นเป็นเหตุผลว่าทำไมต้องทราบขนาดของลูปในเวลารวบรวม เมื่อทราบความยาวของลูปเครื่องมือสังเคราะห์จะบ่น


มันเป็นกับดักที่รู้จักกันดีสำหรับผู้เริ่มต้นที่มาจากภาษา SW พวกเขาพยายามแปลง:

int a,b,c;
   c = 0;
   while (a--)
     c +=  b;

ถึงฮาร์ดแวร์ VHDL / Verilog ปัญหาคือมันทำงานได้ดีในการจำลอง แต่เครื่องมือสังเคราะห์ต้องการสร้างส่วนเสริม: c = b+b+b+b...b;

เพื่อให้เครื่องมือจำเป็นต้องรู้ว่ามีผู้เพิ่มจำนวนเท่าไหร่ ถ้าaเป็นค่าปรับคงที่! (แม้ว่าจะเป็น 4.000.000 มันจะหมดประตู แต่จะลอง!)

แต่ถ้าaเป็นตัวแปรมันจะหายไป


ในกรณีนี้มันเป็นแค่การคูณดังนั้น a อาจเป็นตัวคูณและดังนั้นจึงแปรผัน ...
Harry Svensson

1

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

กระบวนการมีรายการความไวที่บอก VHDL (หรือซินธิไซเซอร์) ว่ากระบวนการไม่ถูกเรียกใช้เว้นแต่ว่าหนึ่งในโหนดในรายการเปลี่ยนแปลง สิ่งนี้สามารถใช้ในการสังเคราะห์แลตช์และขยายออกไปนอกขอบเขตของการใช้ combinatorial บริสุทธิ์

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