1
我有一個需要三個輸入的模塊,每個輸入都是三位寬。獨立於訂單的三個輸入的廉價散列
output = f(inputA, inputB, inputC)
輸出取決於三個輸入的值,但不取決於它們的順序。
即f(inputA, inputB, inputC) = f(inputB, inputC, inputA)
該解決方案應該兩個FPGA和ASIC工作良好。目前我正在實施它,但沒有利用對稱性,但我認爲明確強制合成器考慮對稱性會導致更好的實現。
我正在計劃使用不依賴於它們順序的三個輸入的散列h來執行此操作。我可以這樣做:
hash <= h(inputA, inputB, inputC);
output <= VALUE0 when hash = 0 else
VALUE1 when hash = 1 else
.....
我的問題是我應該用什麼散列函數?
我的想法至今:
如果每個輸入爲3個位寬,有512級的可能性,但只有120當你考慮對稱性,所以理論上我應該能夠使用哈希是7位寬。實際上它可能需要更長一些。
散列的每一位都是輸入位的函數,並且必須尊重三個輸入的對稱性。散列的位應該彼此獨立。但我不確定如何生成這些功能。
此外,我已經嘗試使用一個排序函數作爲散列,它返回按升序排序的輸入並連接,但是這個操作太昂貴,幾乎否定了能夠使用較小查找表的優點。 – 2014-11-14 18:38:33
一個直接的建議是使用'hash = xor b xor c',但這當然只有3位寬 - 我不知道這是否足夠滿足您的目的。 – 2014-11-14 18:59:43
我需要獨特的哈希表示哈希必須至少有7位長。但是,是的,對於那些成爲三位的人來說,這肯定是有意義的。 – 2014-11-14 19:07:31