1. 程式人生 > >代碼綜合後的電路對比(不定時更新)

代碼綜合後的電路對比(不定時更新)

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,
  output
reg 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 endmodule
DFF3

綜合得到的電路如下所示:

技術分享

根據代碼,容易推斷得出這是一個高電平、異步復位的觸發器(或者叫異步置位),這也與前面的內容相符合。

②低電平觸發的異步復位

代碼和電路跟 一(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),這裏不進行重述

代碼綜合後的電路對比(不定時更新)