1. 程式人生 > >RTL基本知識:邏輯強度模型(Logic Strength Model)

RTL基本知識:邏輯強度模型(Logic Strength Model)

model 多個 描述 gif 並不是 用途 mode 其中 還需

本文主要介紹HDL語言中常用的邏輯強度模型,並且以Verilog示例為主,最後介紹VHDL中常用的各種邏輯值系統.
Verilog中提供了大量的模型用於模擬具體的硬件電路,例如and,or,nmos等,同時為了更加精確的模擬具體的電路信號強弱變化情況、信號的傳輸、充放電等行為,依據信號的邏輯強度模型,用不同的信號強度描述信號在電路傳輸中的狀態,用以進一步提高仿真的精確度,特別是對於分析多種驅動來源同時驅動同一線網時產生的賦值沖突問題和被驅動信號的最終屬性很有幫助.這種信號強度的變化在Verilog中是用邏輯強度模型來進行模擬的,並且這種邏輯強度模型按照電平的高低主要分為兩大類:strength0和strength1,這兩大類的具體情況如下圖和下表所示:
技術分享圖片


技術分享圖片
而strength0和strength1又可更具這些強度的用途分為兩類:負荷強度(charge strength)和驅動強度(drive strength).
負荷強度:一般用於trireg聲明的線網類型,類似於模擬實際電路電容的大小;
驅動強度:一般用於描述被驅動線網的強度;
在仿真設計驗證的過程中,一般在沒有明確限制具體取值範圍時,通常使用的"0","1","Z"和"X"的取值範圍如下圖所示:
技術分享圖片
而經常使用的邏輯值"0","1"的強度為strong,"x"其實為一個範圍,其取值可能是這個範圍中的任何一個值.
【註意】

    • 在缺省情況下,線網或者邏輯們的輸出具有的強度為St1和St0.但是在具體建模時也可以指定不同邏輯強度,可指定輸出邏輯強度的有效邏輯門如下表所示:

技術分享圖片

    • 在strength1中指定highz1,例如邏輯門例化後輸出為1時,實際輸出為HiZ,在strength0中指定highz0,例如邏輯門例化後輸出為0時,實際輸出為HiZ,因為高阻態並沒有一個確定的邏輯值,所以其輸出顯示為Z,而不是HiZ0或者HiZ1,所以(high0,high1)或者(high1,high0)的組合是無效的, ,strength1,strength1)或者(strength0,strength0)的組合也是無效的.

【示例】

技術分享圖片

仿真結果如下: 技術分享圖片

    • trireg聲明線網的同時可以指定其衰減時間,用以模擬電容中電荷衰減的過程.還需要註意的是,在使用一些特殊的門單元時,線網中傳遞的數據的強度可以在經過特定邏輯門後強度衰減.常見的信號強度衰減的情況主要有兩大類:
    • 信號通過非阻抗器件 當supply(Su)強度的信號通過nmos、pmos或者coms時,信號強度將衰減為strong(St); 當supply(Su)強度的信號通過tran、tranif0或者tranif1時,信號強度將衰減為strong(St);
    • 信號通過阻抗器件 信號通過rnmos、rpmos、rcoms、rtran、rtranif1、rtranif0等邏輯器件後,信號強度衰減規律如下表所示: 技術分享圖片通過對相關線網指定不同強度,可精確的模擬信號在電路中傳輸時信號狀態的變化,為模擬不同強度信號驅動線網提供一個更加準確的描述.因此這裏需要註意,一般線網可以指定特定的強度,不同的線網強度相互作用會得到不一樣的結果,為了對這種現象進行描述,這裏主要從以下幾方面來對不同強度信號的連接進行示例說明. #信號強度的指定 在沒有明確指定的情況下,一般默認的信號強度為(St1,St0),trireg的charge強度為medium(Me),tri1強度為Pu1,tri0為Pu0,supply1強度為Su1(在低功耗仿真驗證時需要註意supply1的使用),supply0的強度為Su0,其中charge strength一般只用於trireg,driving strength用於下表的線網描述中:

技術分享圖片

    • 強度聲明指定的方式一般分為兩種:
    • 線網聲明時指定強度,需要註意此時需要同時指定具體數值;
    • 線網在過程性賦值時指定; 具體格式如下:

技術分享圖片

【示例】

技術分享圖片

1信號有確定強度(UAS:unambiguous strength)和數值情況 根據信號的強度、數值以及組合方式等的不同,不同信號的組合結果存在多種情況,以下將分別示例討論. 1>sig1和sig2沒有進行線邏輯操作(線與、線或等),如果sig1的信號強度比sig2的信號強度高,sig1和sig2的數值也不一樣的話,那麽最終的結果將由sig1決定.如果sig1和sig2的數值相同,那麽最終結果的強度由sig1和sig2中強度搞得決定.

【示例】

技術分享圖片

上述電路可通過如下Verilog語句表述

: 技術分享圖片

仿真結果如下:

技術分享圖片

2>sig1和sig2進行線邏輯操作(triand,wand,trior,wor)

【示例】UAS信號sig1和sig2

技術分享圖片

進行線邏輯操作的信號的最終值由邏輯操作決定,強度由為線邏輯操作指定強度決定. #信號的強度不確定的情況(AS:ambiguous strength) 當多個信號進行組合時,因為每個信號的強度和數值一般情況下都是不一樣的,所以在不同的配置屬性下,其組合後結果的強度往往是一個範圍.當然,如果兩個信號的強度一樣且數值相反,那麽其組合後的結果為不定態.對於信號強度不確定的具體情況大致可分為以下幾類:

1>信號有確定的數值,但屬於AS;

2>信號有不定態(不定態的取值範圍不定,所以不定態的強度一般有strength1和strength1的一部分共同組成);

3>信號中有低電平範圍的值,且低電平範圍包含高阻態; 4>信號中有高電平範圍的值,且高電平範圍包含高阻態;

【示例1】 組合的兩個信號強度分別是weak1和weak0,兩者組合後的結果為weakX

. 技術分享圖片

上述電路可通過如下Verilog語句表述如下:

技術分享圖片

仿真結果如下:

技術分享圖片

【示例2】 進行三態邏輯操作的兩個信號中有一個信號為確定的狀態和確定的值St1(或We0),另一個信號值為不定態,最終三態邏輯的輸出為一個範圍,如下圖所示: 技術分享圖片

上述電路可通過如下Verilog語句表述如下:

技術分享圖片

仿真結果如下:

技術分享圖片

【示例3】來自於兩個三態門的輸出進行組合後,其組合後的最終輸出由兩部分共同決定:

技術分享圖片

上述電路可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

MOS管操作與三三態門基本類似,如下圖所示:

技術分享圖片

上述電路可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

但是這裏需要註意,如果將上圖中下不得Pu0改為Su0,那麽因為pmos對於supply強度有衰減作用,所以此時的低電平範圍將會變為"630",當"630"和"651"進行組合後,最終的輸出將為"66X",即StX.

技術分享圖片

【示例4】將上例中的三態門替換為與門,與門的一個輸入為不定態,且指定與門取值的範圍.例如,N1的強度範圍為"St1-HIZ0",N2的強度範圍為"St1-We0".因為b為不定態StX(為一個範圍,St1-St0),經過與門N1後的輸出的強度範圍為:St1-HiZ0,即下圖中的StH.因為c和d的值均為0,均有一個確定的數值和強度,所以經過與門N2後的結果為We0.N1的輸出與N2的輸出進行組合後的結果即為"36X".

技術分享圖片

上述電路可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

2 AS信號與UAS 信號的組合 AS信號與UAS 信號進行組合後的最終信號狀態的確定一般依據以下規則:

規則一 AS信號的強度高於UAS信號,最終組合的輸出信號的強度由AS強度範圍決定;

規則二 AS信號的強度小於等於UAS信號,最終組合的輸出將不包含AS信號中強度小於等於UAS信號的那部分強度;

規則三如果按照上兩條規則產生的結果強度中存在間隔(指UAS強度範圍在AS強度範圍中時),那麽組合後最終的輸出將包含結果中的間隔部分;

【示例1】AS信號的強度小於UAS的強度,那麽結果將遵守上述規則二,所以最終的輸出結果UAS的部分強度.

技術分享圖片

上述示例可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

【示例2】AS信號強度範圍為St1-We0,UAS強度為Pu1,AS信號與UAS信號組合後,AS中小於UAS的強度範圍將不出現在最終的結果中,而AS中大於UAS的部分與UAS共同組成最終的結果的強度範圍.

技術分享圖片

上述示例可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

【示例3】 AS信號強度大於UAS,所以最終組合結果的強度範圍為UAS到AS,如下圖所示:

技術分享圖片

上述示例可通過如下Verilog語句表述:

技術分享圖片

仿真結果如下:

技術分享圖片

【示例4】AS信號通過線邏輯操作後的強度如下圖所示:

技術分享圖片

上述示例可通過如下Verilog語句表述如下:

技術分享圖片

仿真結果如下:

技術分享圖片

【題外話】VHDL邏輯系統

不同的EDA工具開發了不同的邏輯系統,不同的設計團隊也可能根據各自需要設計不同的邏輯組合,從而構建特殊的邏輯系統,例如:四值邏輯\七值邏輯\九值邏輯等,這裏僅摘要常用的作一介紹.

技術分享圖片

說明:std_logic類型是std_ulogic類型的一個子集,相較std_logic,std_ulogic增加了一個新的邏輯值‘U‘,std_ulogic中沒有指定兩個std_ulogic信號連接到同一個節點上發生沖突後的邏輯值,因此需要使用該類型時,需要註意兩個輸出信號直接連接的情況. std_logic和std_ulogic屬於仿真和綜合中特別重要的數據類型,通過這兩種數據類型可以精確的描述仿真電路狀態.但是並不是所有的仿真中可見的數據類型都可以對應到具體的電路中,在九值邏輯中,目前普遍可被大多數EDA工具普遍認可的綜合數據類型有"1","0",其他數據類型綜合時需要根據特定的使用情況區分對待,所以在進行設計時,最好使用綜合前後數據類型一致性較好的數值.

歡迎大家關註魏老師的微信公眾號:芯光燦爛

技術分享圖片

RTL基本知識:邏輯強度模型(Logic Strength Model)