組合邏輯和FPGA之間的映射關係咱們知道了,那時序邏輯和FPGA之間又是一種怎樣的映射關係呢?咱們就之前面寄存器章節的例子來向你們說明,也一同把當時爲何用異步復位更節約資源的緣由告訴你們。咱們先來看一下同步復位D觸發器的RTL代碼,以下所示:
同步復位D觸發器異步
1 //-------------------------------------------------- 2 module flip_flop( 3 input wire sys_clk , 4 input wire sys_rst_n , 5 input wire key_in , 6 7 output reg led_out 8 ); 9 10 //led_out:led燈輸出的結果爲key_in按鍵的輸入值 11 always@(posedge sys_clk) 12 if(sys_rst_n == 1'b0) 13 led_out <= 1'b0; 14 else 15 led_out <= key_in; 16 17 endmodule 18 //--------------------------------------------------
代碼編寫完後依然須要點擊「Start Analysis & Synthesis」圖標進行分析和綜合。而後雙擊「Netlist Viewers」下的「RTL Viewer」查看RTL視圖。如圖1所示,能夠看到一個 D觸發器的結構,也能夠稱爲寄存器,還附加了一個選擇器,用於同步復位的控制,和代碼設計的結果是徹底一致的。
佈局
點擊「Start Compilation」圖標全編譯進行佈局佈線,完成後咱們能夠看到「Flow Summary」資源使用量,如圖2所示,能夠看到使用了LE中的一個組合邏輯資源和一個時序邏輯資源。
學習
而後打開Chip Planner視圖。Chip Planner打開後的界面如圖3所示,咱們能夠看到在版圖模型中有一個塊藍色區域的顏色變深,說明該區域的資源被佔用,在FPGA內部硬件結構簡介中咱們知道這是一個邏輯陣列塊LAB,咱們將該區域放大。
spa
如圖4所示,放大後能夠看到藍色變深的區域中有16個小塊,這16個小塊就是LE,其中只有一個LE的顏色發生了變化,此次不只有藍色,還有紅色,說明該處的資源被使用了,雙擊這個LE便可觀察其內部的結構。
設計
打開LE後內部的結構如該視圖中點擊下面復位信號的名字後會看到在LE的內部結構圖中用綠色標註路徑,如5所示,其中藍色顯示的是真實使用到的結構,灰色的是未使用到的結構,咱們能夠看到①、②、③爲三個輸入,其中③爲時鐘的輸入端,而後一個輸出,和RTL代碼的描述是對應的。由於咱們設計的是時序邏輯,因此此次咱們能夠發現比組合邏輯多出來的結構主要是紅色框所表示的寄存器。
code
在該視圖中點擊下面復位信號的名字後會看到在LE的內部結構圖中用綠色標註路徑,如圖6所示,能夠知道①爲復位信號的輸入端,②爲key_in信號的輸入端。
blog
咱們再來看一下異步復位D觸發器的RTL代碼,以下所示:圖片
異步復位D觸發器ip
1 //-------------------------------------------------- 2 module flip_flop( 3 input wire sys_clk , 4 input wire sys_rst_n , 5 input wire key_in , 6 7 output reg led_out 8 ); 9 10 //led_out:led燈輸出的結果爲key_in按鍵的輸入值 11 always@(posedge sys_clk or negedge sys_rst_n) 12 if(sys_rst_n == 1'b0) 13 led_out <= 1'b0; 14 else 15 led_out <= key_in; 16 17 endmodule 18 //--------------------------------------------------
代碼編寫完後依然須要點擊「Start Analysis & Synthesis」圖標進行分析和綜合。而後雙擊「Netlist Viewers」下的「RTL Viewer」查看RTL視圖。如圖7所示,咱們能夠看到一個 D觸發器的結構,和代碼設計的結果是徹底一致的。資源
點擊「Start Compilation」圖標全編譯進行佈局佈線,完成後咱們能夠看到「Flow Summary」資源使用量報告,如圖8所示,能夠看到只使用了LE中的一個時序邏輯資源。
而後打開Chip Planner視圖。Chip Planner打開後的界面如圖9所示,咱們能夠看到在版圖模型中在一樣的位置也有一個塊藍色區域的顏色變深,說明該區域的資源被佔用,在FPGA內部硬件結構簡介中咱們知道這是一個邏輯陣列塊LAB,咱們將該區域放大。
如圖10所示,放大後能夠看到藍色變深的區域中有16個小塊,這16個小塊就是LE,其中只有一個LE的顏色發生了變化,也有藍色和紅色,說明該處的資源被使用了,雙擊這個LE便可觀察其內部的結構。
打開LE後內部的結構如圖11所示,其中藍色顯示的是真實使用到的結構,灰色的是未使用到的結構,咱們能夠看到①、②、③爲三個輸入,其中③爲時鐘的輸入端,②仍爲key_in的輸入端,而復位信號①的位置則發生了變化,直接連到了寄存器上。
看到這裏咱們不由會有兩個疑問,異步復位D觸發器LE內部結構圖明明顯示使用了查找表,爲何卻在「Flow Summary」資源使用量報告中卻顯示沒有使用該部分資源?爲何同步復位D觸發器比異步復位D觸發器多使用了一部分資源呢?
首先來講第一個問題,雖然異步復位D觸發器LE內部結構圖明明顯示使用了LUT,可是幾乎沒有任何邏輯須要使用LUT,至關於經過查找表將key_in信號鏈接到寄存器的輸入端,因此在「Flow Summary」資源使用量報告中顯示沒有使用該部分資源。
而後是第二個問題,如圖12所示,咱們將寄存器部分的視圖放大來看,能夠發現該寄存器自己就包含一個異步清零信號「aclr」,且該清零信號還標識爲「!ACLR」,也就是低電平有效,這下咱們終於明白了爲何代碼中使用異步低復位了,由於這部分資源原本就有,不須要額外創造,而若是咱們使用同步高復位,就會增長額外的邏輯,須要使用LUT資源,因此同步復位D觸發器比異步復位D觸發器多使用了一個LUT,你們能夠試想一下若是咱們使用的不少同步復位D觸發器的時候就會佔用不少沒必要要的LUT資源,從而形成資源的浪費,但願你們之後在編寫代碼的時候注意。
歡迎加入FPGA技術學習交流羣,本羣致力於爲廣大FPGAer提供良好的學習交流環境,不按期提供各類本行業相關資料!QQ交流羣號:450843130