|
勇敢的芯伴你玩轉Altera FPGA連載28: 內里本質探索——器件結構 下 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD 說了這么多理論,估計大伙都有些頭大了。下面舉個例子,讓大家看看一個簡單的邏輯功能是如何用這個正常模式下的LEs來實現的。有如下一段 Verilog代碼: module ex0( clk,rst_n, ain,bin,cin,dout ); input clk; input rst_n; input ain,bin,cin; output reg dout; always @(posedge clk or negedge rst_n) if(!rst_n) dout <= 1'b0; else dout <= (ain & bin) |cin; endmodule 看不懂不要緊,咱還沒開始學語法呢。這個 電路中,輸入信號ain、bin和cin,復位信號rst_n,時鐘信號clk,輸出信號dout。輸出信號dout在復位信號rst_n有效時輸出為0,在撤銷復位(rst_n = 1)后每個時鐘上升沿鎖存當前的最新值,這個最新值為當前輸入信號ain與bin再或cin的結果。其邏輯功能如圖3.24所示,是一個典型的時序邏輯,這個電路中有我們前面提到的與門、或門和寄存器等基本組件。 圖3.24 邏輯功能視圖 再看經過 Quartus II工具的“翻譯”后,如圖3.25所示,前面這段邏輯被映射到了Cyclone IV的LEs中。和圖3.23相比較,可以確認這是LEs的正常模式,圖中高亮部分是被“編程”開啟功能的電路實現。不要感到稀奇,這個原本要實現與門、或門等邏輯功能的電路卻不是用與門、或門來實現的,而是我們前面提到的LUT在這里扮演了很重要的角色。有人可能又要納悶了LUT到底為何物?有那么神通廣大么?別說,還真那么回事。就拿4輸入的LUT來說,其實它里面就相當于一個16bit的存儲器,或者你也可以理解LUT里面存放著4個輸入信號的真值表,輸入信號通過這個真值表便可得到期望的結果,就如我們這個實例一樣。 圖3.25 LEs中的邏輯實現
|