2016-01-11 54 views
0

關於VHDL的主要任務之一(併發選擇性任務),一個真正的初級問題,希望有初級答案,任何人都可以解釋一下VHDL編譯器將如何將以下描述合成爲一個?VHDL併發選擇性任務合成

LIBRARY IEEE; 
USE IEEE.std_logic_1164.ALL; 
USE IEEE.numeric_std.ALL; 

ENTITY Q2 IS 
PORT (a,b,c,d   : IN std_logic; 
     EW_NS   : OUT std_logic 
     ); 
END ENTITY Q2; 

ARCHITECTURE hybrid OF Q2 IS 
SIGNAL INPUT      : std_logic_vector(3 DOWNTO 0); 
SIGNAL EW_NS      : std_logic; 

BEGIN 
INPUT <= (a & b & c & d); -- concatination 

WITH (INPUT) SELECT 
     EW_NS <= '1' WHEN "0001"|"0010"|"0011"|"0110"|"1011", 
       '0' WHEN OTHERS; 
END ARCHITECTURE hybrid; 

爲什麼要問?以及我之前做過錯誤的事情,即在製作所需組件的框圖之前,先用VHDL描述事情。我可以設想這被合成爲一組門邏輯? 任何幫助將非常有幫助。 謝謝D

+1

我可以建議你下載免費的[Altera Quartus Prime精簡版](http://dl.altera.com/?edition=lite),並綜合設計,然後你可以很容易地看到自己。它將成爲您未來冒險中的一款非常有用的工具,它甚至還附帶免費的ModelSim版本[。](https://en.wiktionary.org/wiki/give_a_man_a_fish_and_you_feed_him_for_a_day;_teach_a_man_to_fish_and_you_feed_him_for_a_lifetime) –

+0

您好Zimmer先生,我有Quartus II sp13.01以及ModelSim Altera入門版10.1d。這就是我目前用來描述和「測試臺」的原因,我還沒有試驗檯,還沒有使用:/雖然我聽說你們中有些人會談論它。我想知道「描述」會合成什麼,邏輯門是明智的。再次感謝您以前和未來的幫助:) – hoboBob

回答

3

您需要查看目標FPGA的用戶指南,並瞭解「邏輯元素」(Xilinx術語中的'slice')中包含的內容。通常情況下,FPGA不會通過連接像AND,OR等離散門來實現組合邏輯。相反,邏輯元件將包含一個或多個「查找表」,通常有四個(但現在在某些較新設備中爲6個)投入。該查找表(LUT)的輸入是邏輯功能的輸入,輸出是一個的功能輸出。然後將LUT編程爲ROM,使您的輸入信號可用作地址。每種可能的輸入組合都有一個ROM條目,其結果是預期的邏輯功能。

具有多個輸出的函數將簡單地並行使用這些LUT中的幾個,具有相同的輸入,每個函數的輸出都有一個LUT。需要比LUT更多輸入的功能(比如7個輸入,其中LUT只有4個輸入)簡單地將兩個LUT並行組合,使用多路複用器在兩個LUT的輸出之間進行選擇。這個最終的多路複用器在控制時使用其中一個輸入信號,並再次考慮到每個可能的輸入組合。

這對於創建像AND門一樣簡單的東西可能聽起來效率不高,但好處是這個簡單的構建塊(LUT)可以實現絕對的任何組合函數。值得注意的是,FPGA工具鏈非常善於優化邏輯功能,以簡化它們,並更好地將它們映射到FPGA中。 LUT爲這些工具提供了一個非常通用的元素。

邏輯元素還將包含一些專用資源,用於不適合LUT方法的函數。這些可能包括用於加法器的專用進位鏈,用於組合多個LUTS寄存器的輸出的多路複用器(大多數設計是同步的)。 LUT有時也可以配置爲小型移位寄存器或RAM元件。在邏輯元件外部,會有更多特定的模塊,如大型乘法器,更大的存儲器,PLL等,其中沒有一個可以使用LUT資源有效實施。再次,這將在您的目標FPGA的用戶指南中進行解釋。

+0

謝謝你scary_jeff。一個非常好的解釋:)當處理與CPU相關的術語時,我發現一般的文本書籍在這個問題上缺乏一致性(取決於發佈日期),並且往往會忽略一些文本。謝謝:)我會花時間和重新閱讀... – hoboBob

+0

@DanielJHall如果你對它感到滿意,你會介意標記這一個也被接受嗎?謝謝! –

0

回到當天,您的代碼將實現爲單個74150 TTL電路,該電路爲16:1多路複用器。你有一個4位選擇(INPUT),並且這選擇了芯片的16個輸入之一,這個輸入被路由到一個輸出('EW_NS`)。 74150已經過時,我找不到任何數據表,但很容易找到8對1多路複用器的圖表(例如here)。 16-> 1是相同的,但一切都較寬。我的舊TI數據手冊基本上顯示了這個鏈接的圖表增加了一倍。

但是 - 等等。你的問題更容易,因爲你不是將真正的輸入路由到輸出 - 你只是設置固定的數據值。在'150上,你通過將16個輸入中的5個連接到1來實現這一點,其餘11個連接到0。這使得邏輯更容易。

74150具有與4輸入查找表完全相同的功能(其中固定查找數據與'150個輸入處的固定級別相同),所以實現整個電路是微不足道的在FPGA中的單個LUT中,按照scary_jeff的答案,而不是使用NAND級別的實現。然而,在一個合適的芯片中,它可以作爲產品總和或類似的東西來實現(正如鏈接圖中的內容)。在這種情況下,繪製一張K-map並找到一個最小的解決方案。我在信封背面的2分鐘內出現了3個3輸入與門,驅動3輸入或門。我會把它作爲一個練習來給你檢查一下:)

+0

謝謝EML,是的,我得到了Db.Cb.A + Cb.B.A + Db.B.Ab – hoboBob