代碼綜合後的電路對比(不定時更新)
阿新 • • 發佈:2017-07-16
output pre n) sed log 會有 blank 不同 blog
這裏來記錄一下相似代碼之間的不同差異,比如同步復位與異步復位觸發器的對比,上升沿復位和下降沿復位的對比等等。這裏主要使用ISE的綜合引擎。直接附上代碼和綜合後電路圖,有些會有部分講解。
一、異步復位與同步復位
我在復位電路裏面講解了同步復位和異步復位的區別,這裏就不詳細介紹了,鏈接如下:http://www.cnblogs.com/IClearner/p/6683100.html
(1)異步復位
異步復位的代碼如下所示:
module DFF1( input clk, input rst_n, input d, output reg q );always@(posedge clk or negedge rst_n) if(!rst_n) q <= 0; //異步清 0,低電平有效 else q <= d; endmodule
綜合得到的電路圖如下所示:
可以看到使用了一個反相器單元和一個觸發器單元;從代碼中我們可以推斷出,這是一個高電平有效的、異步復位觸發器
(2)同步復位
同步復位觸發器代碼如下所示,註意黑體部分
module DFF2( input clk, input rst_n, input d, outputreg q ); always@(posedge clk )//註意這裏有所不同 if(!rst_n) q <= 0; //同步清 0,低電平有效 else q <= d; endmodule
綜合得到的電路如下所示:
我們可以看到,也是由一個反向器單元和一個觸發器單元構成,註意,這裏的觸發器跟上面的觸發器顯然不是同一個類型的觸發器,管腳名稱改變了;結合代碼我們可以知道,這個觸發器是高電平觸發、同步復位的觸發器。
二、不同電平之間的復位差異
(1)高電平觸發的異步復位VS低電平觸發的異步復位
①高電平觸發的異步復位(異步置位)
代碼如下所示:
1 module DFF3( 2 input clk, 3 input rst_r, 4 input d, 5 output reg q 6 ); 7 8 always@(posedge clk or posedge rst_r) 9 if(rst_r) 10 q <= 0; 11 else 12 q <= d; 13 14 endmoduleDFF3
綜合得到的電路如下所示:
根據代碼,容易推斷得出這是一個高電平、異步復位的觸發器(或者叫異步置位),這也與前面的內容相符合。
②低電平觸發的異步復位
代碼和電路跟 一(1)的代碼和電路相同,這裏不進行重述。
(2)高電平觸發的同步復位VS低電平觸發的同步復位
①高電平觸發的同步復位
代碼如下所示:
1 module DFF4( 2 input clk, 3 input rst_r, 4 input d, 5 output reg q 6 ); 7 8 always@(posedge clk ) 9 if(rst_r) 10 q <= 0; 11 else 12 q <= d; 13 14 endmodule
綜合得到的電路如下所示:
可以知道,這是一個高電平有效、同步復位的觸發器單元。
②低電平觸發的同步復位
代碼和電路同一(2),這裏不進行重述
代碼綜合後的電路對比(不定時更新)