我希望能夠有一個移位寄存器,對另一個寄存器加載一些值進行異或運算。問題是我希望用大規模矢量來做這件事,它的寬度大約是幾千位。大型矢量最高效的VHDL?
最顯而易見的方法在VHDL做到這一點會是這樣的
generic(length : integer := 15);
signal shiftreg : std_logic_vector(length downto 0);
process(clk)
begin
if rising_edge(clk) then
shiftreg<= shiftreg(length-1 downto 0) & input;
endif;
end process;
然而,如果長度在這裏被設置爲一些非常高的數字,試圖合成這將成爲一項艱鉅的任務。由於這是一個相對簡單的結構,我想它會花費很長時間,因爲它的長度遠遠超出了單個塊中寄存器的數量。
我的問題是,如果有一種方式來實現這樣一個大型矢量,將以更快的速度合成。例如,使用類似
array(length downto 0) of std_logic;
或合成工具識別這些是否等價?
您可能會考慮從一個較小的實例化的移位寄存器中構建'千位寬'移位寄存器,這是基本映射完成一次的曲奇切割器方法。你還沒有演示如何使用'shiftreg'這可能會影響地點和路線。是否有任何方式表達與'shiftreg'部分相關的操作的地點? – user1155120
正如我所提到的那樣,shiftreg用於與另一個相等大小的寄存器進行XOR運算,然後將該XOR的位相加以給出不匹配位的數量。 – Zephyr
您可以將兩個寄存器都作爲移位寄存器來操作,並計算移入時不匹配的位數嗎?你現在怎麼做這個總結?這個想法並沒有減少函數的複雜性。一個單一的異或門和一個計數器,而不是一些較大的求和機制。你沒有描述整個「事物」被綜合的複雜程度。 – user1155120