3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

verilog always语法_Verilog 最全经验总结(建议收藏)

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 verilog always语法_Verilog 最全经验总结(建议收藏) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關注、星標公眾,直達精彩內容

公眾號:ZYNQ

ID :FreeZynq

1、不使用初始化語句;
2、不使用延時語句;
3、不使用循環次數不確定的語句,如:forever,while等;
4、盡量采用同步方式設計電路;
5、盡量采用行為語句完成設計;
6、always過程塊描述組合邏輯,應在敏感信號表中列出所有的輸入信號;
7、所有的內部寄存器都應該可以被復位;
8、用戶自定義原件(UDP元件)是不能被綜合的。

一:基本Verilog中的變量有線網類型和寄存器類型。線網型變量綜合成wire,而寄存器可能綜合成WIRE,鎖存器和觸發器,還有可能被優化掉。

二:verilog語句結構到門級的映射1、連續性賦值:assign
連續性賦值語句邏輯結構上就是將等式右邊的驅動左邊的結點。因此連續性賦值的目標結點總是綜合成由組合邏輯驅動的結點。Assign語句中的延時綜合時都將忽視。
2、過程性賦值:
過程性賦值只出現在always語句中。
阻塞賦值和非阻塞賦值就該賦值本身是沒有區別的,只是對后面的語句有不同的影響。
建議設計組合邏輯電路時用阻塞賦值,設計時序電路時用非阻塞賦值。
過程性賦值的賦值對象有可能綜合成wire, latch,和flip-flop,取決于具體狀況。如,時鐘控制下的非阻塞賦值綜合成flip-flop。
過程性賦值語句中的任何延時在綜合時都將忽略。
建議同一個變量單一地使用阻塞或者非阻塞賦值。
3、邏輯操作符:
邏輯操作符對應于硬件中已有的邏輯門,一些操作符不能被綜合:===、!==。
4、算術操作符:
Verilog中將reg視為無符號數,而integer視為有符號數。因此,進行有符號操作時使用integer,使用無符號操作時使用reg。
5、進位:
通常會將進行運算操作的結果比原操作數擴展一位,用來存放進位或者借位。如:
Wire [3:0] A,B;
Wire [4:0] C;
Assign C=A+B;
C的最高位用來存放進位。
6、關系運算符:
關系運算符:,<=,>=
和算術操作符一樣,可以進行有符號和無符號運算,取決于數據類型是reg,net還是integer。
7、相等運算符:==,!=
注意:===和!==是不可綜合的。
可以進行有符號或無符號操作,取決于數據類型
8、移位運算符:
左移,右移,右邊操作數可以是常數或者是變量,二者綜合出來的結果不同。
9、部分選擇:
部分選擇索引必須是常量。
10、BIT選擇:
BIT選擇中的索引可以用變量,這樣將綜合成多路(復用)器。
11、敏感表:Always過程中,所有被讀取的數據,即等號右邊的變量都要應放在敏感表中,不然,綜合時不能正確地映射到所用的門。
12、IF:
如果變量沒有在IF語句的每個分支中進行賦值,將會產生latch。如果IF語句中產生了latch,則IF的條件中最好不要用到算術操作。Case語句類似。Case的條款可以是變量。
如果一個變量在同一個IF條件分支中先贖值然后讀取,則不會產生latch。如果先讀取,后贖值,則會產生latch。
13、循環:
只有for-loop語句是可以綜合的。
14、設計時序電路時,建議變量在always語句中賦值,而在該always語句外使用,使綜合時能準確地匹配。建議不要使用局部變量。
15、不能在多個always塊中對同一個變量贖值
16、函數
函數代表一個組合邏輯,所有內部定義的變量都是臨時的,這些變量綜合后為wire。
17、任務:
任務可能是組合邏輯或者時序邏輯,取決于何種情況下調用任務。
18、Z:
Z會綜合成一個三態門,必須在條件語句中賦值
19、參數化設計:
優點:參數可重載,不需要多次定義模塊

四:模塊優化1、資源共享:
當進程涉及到共用ALU時,要考慮資源分配問題。可以共享的操作符主要有:關系操作符、加減乘除操作符。通常乘和加不共用ALU,乘除通常在其內部共用。
2、共用表達式:
如:C=A+B;
? ? D=G+(A+B);
兩者雖然有共用的A+B,但是有些綜合工具不能識別.可以將第二句改為:D=G+C;這樣只需兩個加法器.
3、轉移代碼:
如循環語句中沒有發生變化的語句移出循環.
4、避免latch:
兩種方法:1、在每一個IF分支中對變量賦值。2、在每一個IF語句中都對變量賦初值。
5:模塊:
綜合生成的存儲器如ROM或RAM不是一種好方法,只是成堆的寄存器,很費資源。最好用庫自帶的存儲器模塊。

五、驗證:1、敏感表:
在always語句中,如果敏感表不含時鐘,最好將所有的被讀取的信號都放在敏感表中。
2、異步復位:
建議不要在異步時對變量讀取,即異步復位時,對信號賦以常數值。
Averilog的流行,有兩方面的原因;
B verilog與VHDL相比的優點
C典型的verilog模塊
D verilog語法要點
A) verilog的流行,有兩方面的原因:
1它是cadence的模擬器verilog-XL的基礎,cadence的廣泛流行使得verilog在90年代深入人心;
2它在硅谷獲得廣泛使用;
B) verilog與VHDL相比的優點二者的關系仿佛C與FORTRAN,具體而言:
1 verilog的代碼效率更高:
比較明顯的對比:
VHDL在描述一個實體時采用entity/architecture模式,
verilog在描述一個實體時只需用一個"module/edumodule"語句塊.
此外verilog的高效性還在很多地方體現出來;
2 verilog支持二進制的加減運算:
VHDL在進行二進制的加減運算時使用conv_***函數或者進行其他的定義,總之必須通知編譯器;verilog直接用形如"c=a+b"的表示二進制的加減運算;
3綜合時可控制性好:
VHDL對信號不加區分地定義為"signal",
而verilog區分為register類型的和wire類型的;
但是也有人支持VHDL,認為verilog和VHDL的關系仿佛C和C++.C)典型的verilog模塊
討論以下典型電路的verilog描述:
*與非門;
*加法器;??//即全加器
* D觸發器;
*計數器; //**分頻的counter
* latch;
*時序機;
*RAM;? ?//用synopsys的
*模塊引用;
*預編譯;
*與非門的verilog描述如下:

//verilog使用和C語言相同的注釋方法module nd02(a1,a2,zn);//一個verilog模塊總是以module開始,以endmodule 結束,nd02是模塊名,a1,a2,zn是模塊的3個輸入輸出信號input a1,a2; //告訴編譯器a1,a2對此模塊而言是輸入,并且數據類型是"bit"output zn; //告訴編譯器zn對此模塊而言是輸出,數據類型也是"bit"nand (zn,a1,a2); //我理解nand是運算符,我們不必深究verilog中的正式術語是什么了吧,總之這種形式表示zn=~(a1 && a2);你一定已經想到類似的運算符還有"not","and","or","nor","xor"了吧;除了"not",括號里的信號數可以任意,例如or (z,f,g,h)表示z=f || g || h,并且延時是3個單位時間,#x表示延時x個單位時間;endmodule


*加法器的verilog描述如下:

module ad03d1(A,B,CI,S,CO) ;input [2:0] A,B; //表示A,B是輸入信號,并且是3位矢量,上界是2,下界是0input CI;output [2:0] S;output CO;assign {CO,S}=A+B+CI;//一對"{"和"}"表示鏈接,即將CO和S合并成4位矢量endmodule


*帶異步清零端的D觸發器的verilog描述如下:

module dfctnb (d,cp,cdn,q,qn);input d,cp,cdn;output q,qn;reg q,qn; //關鍵字"reg"表示q和qn是"register"類型的信號;verilog中有兩種類型的信號:"register"類型和"wire"類型.你可以簡單地把register類型的信號想象為某個D觸發器的輸出,而wire類型的的信號是組合邏輯的輸出.二者的最大區別在于:你可以對register類型的信號進行定時賦值(用wait語句在特定時刻的賦值,詳見下面always語句),而對于wire類型的信號則不可.always wait (cdn==0) //表示每當cdn=0時,將要對D觸發器清零,"always"和"wait"嵌套,"wait"和"@"是verilog的兩個關鍵字,表示一旦有某事發生;則執行下面的語句塊,"always"有點象C語言中的"if ... then...","wait"和"@"的區別:請參考本模塊.wait表示本語句塊的進程停止,直到"cdn=0"的條件出現才繼續;我理解在verilog中,每個最外層語句塊都是一個***的進程;"@"(請看下個always語句)也表示本語句塊的進程停止,直到后面定義"posedge cp"(即出現cp的上升沿)的事件出現才繼續;也許wait和@可以合二為一吧,但至少到目前verilog中wait表示"條件",@表示"事件";具體運用中,wait總是用于類似"wait(xxx=1)"之類的場合,@總是用于類似"@(xxx)"或"@(posedge/negedge xxx)"之類的場合整句話的意思是"每當cdn等于0時,則作以下事情"begin //begin...end結構的用法類似于pascal語言 q=0; qn=1; wait (cdn==1);endalways @ (posedge cp)//"@(posedge cp)"中有兩個關鍵字:"@ (x)"表示"每當事件x發生","posedge x"表示"x的上升沿,"negedge x"表示"x的下降沿",整句話的意思是"每當cp的上升沿,則作以下事情" if (cdn) //如果cdn=1(意味著清零端無效) begin q=d; qn=~q;//"~"表示反相 endendmodule


*計數器的verilog描述如下:

module count(in,set,cp,out) ;//此計數器,在cp的上升沿將輸入賦給輸出,在cp的上升沿使輸出加一input [15:0] in;input set,cp;output [15:0] out;reg [15:0] out;always @ (posedge set)out = in;always @(posedge cp)out = out+1; //verilog容許一個信號同時出現在等號兩端,只要它是reg類型的endmodule


*latch的描述如下:

always @(clk or d) if (clk) q = d;

*時序機的verilog描述如下:

always @(posedge CLK) //D是下一個狀態,Q是當前狀態,e1,e2是輸入,a,b是輸出Q=D;always @(Q or othercase) begin //當Q變化或輸入e1,e2變化時D要相應變化D = Q; //note1a = 0;b = 0;......case(Q) q1:begin q1 action; if(e1)D=d1; if(e2)D=d2; else D=d3; a = 1; //note 2 end q2:begin b = 1; ...... end default:begin a = 0; b = 0; ......endend


---annotations---
note 1:
??This is a custom expression,after reset,D should be equal to Q;
note 2:
??In this state machine,a is only equal to 1 at state q1,in
??other state,a is equal to 0;
* RAM的verilog描述如下:
module ram(din,ain,dout,aout,rd,wr);//這是一個雙口RAM,分別有:輸入端:輸入地址ain;輸入數據din;上升沿有效的寫信號wr;/輸出端:輸出地址aout;輸出數據dout;高電平有效的讀信號rd;
??inout [7:0] din;
??input [7:0] ain,aout;
??input rd,wr;
??output [7:0] dout;
??reg [7:0] memory [0:255];? ?//請注意這是存儲陣列的描述方法,描述了一個共有256個字的存儲陣列,每個字是8位
??assign dout = rd ? memory[aout] : 8'bz; //"assign"關鍵字表示并行賦值語句的
開始"?"運算符的作用和在C語言中一樣"8'bz"是一個常量,表示一個字節的高阻態,其中8表示長度是8bit,"'"是固定分割符,"b"表示后面的數據是以比特形式給出的,"z"表示高阻;舉例:4'ha表示長4bit的數"1010"。類似的還可舉出5'b10111,6'o33等等
??always @(posedge wr)
memory[ain] = din;
endmodule
*模塊引用
假設在前面(可以是別的模塊)定義了module ram(din,ain,dout,aout,rd,wr),則引用此
模塊時只需寫
ram myram(din_in_map,ain_in_map,dout_in_map,aout_in_map,rd_in_map,wr_in_map)
;
//其中"ram"是所引用的module名,"myram"是你起的instance名,"din_in_map"等等是圖中的節點名,和器件(module)中的"din..."進行"虛實結合";
*預編譯
類似C語言,只需寫
`include "",反上撇號"`"是verilog的預編譯符,類似C中的"#".
D) verilog語法要點
*基本原則
設計時應該把你的系統劃分為計數器,觸發器,時序機,組合邏輯等等可綜合的單元,對此不同的IC公司和EDA開發商可能根據自己的見解和經驗提出不同的要求,并且對verilog程序的細節進行自己的規定,但有一點是對的:即寫硬件描述語言不象寫C語言那樣符合語法就行.單單符合verilog語法的程序可能被拒絕綜合,甚至被拒絕模擬;
*最外層可以寫什么?
這里所說的最外層是指module語句后的第一層,在這一層可以寫這些可執行語句:
assign和nand等定義組合邏輯的語句,
always語句,
模塊引用語句,
一些以"$"開頭的系統定義語句.
特別注意不可以寫if語句.if語句只能放在always內部.
不推薦寫wait語句,因為不能綜合.
*不可以在多個always語句中對一個信號賦值.
1.?強烈建議用同步設計
2.在設計時總是記住時序問題
3.在一個設計開始就要考慮到地電平或高電平復位、同步或異步復位、上升沿或下降沿觸發等問題,在所有模塊中都要遵守它
4.在不同的情況下用if和case,最好少用if的多層嵌套(1層或2層比較合適,當在3層以上時,最好修改寫法,因為這樣不僅可以reduce area,而且可以獲得好的timing)
5.在鎖存一個信號或總線時要小心,對于整個design,盡量避免使用latch,因為在DFT時很難test。
6.確信所有的信號被復位,在DFT時,所有的FlipFlop都是controllable,
7.永遠不要再寫入之前讀取任何內部存儲器(如SRAM)
8.從一個時鐘到另一個不同的時鐘傳輸數據時用數據緩沖,他工作像一個雙時鐘FIFO(是異步的),可以用Async SRAM搭建Async FIFO。
9.在VHDL中二維數組可以使用,它是非常有用的。在VERILOG中他僅僅可以使用在測試模塊中,不能被綜合
10.遵守register-in register-out規則
11.像synopsys的DC的綜合工具是非常穩定的,任何bugs都不會從綜合工具中產生
12.確保FPGA版本與ASIC的版本盡可能的相似,特別是SRAM類型,若版本一致是最理想的,但是在工作中FPGA版本一般用FPGA自帶的SRAM,ASIC版本一般用廠商提供的SRAM。
13.在嵌入式存儲器中使用BIST
14.虛單元和一些修正電路是必需的
15.一些簡單的測試電路也是需要的,經常在一個芯片中有許多測試模塊
16.除非低功耗不要用門控時鐘,強烈建議不要在design中使用gate clock
17.不要依靠腳本來保證設計。但是在腳本中的一些好的約束能夠起到更好的性能(例如前向加法器)
18.如果時間充裕,通過時鐘做一個多鎖存器來取代用MUX
19.不要用內部tri-state, ASIC需要總線保持器來處理內部tri-state,如IO cell。
20.在top level中作pad insertion
21.選擇pad時要小心(如上拉能力,施密特觸發器,5伏耐壓等),選擇合適的IO cell
22.小心由時鐘偏差引起的問題
23.不要試著產生半周期信號
24.如果有很多函數要修正,請一個一個地作,修正一個函數檢查一個函數
25.在一個計算等式中排列每個信號的位數是一個好習慣,即使綜合工具能做
26.不要使用HDL提供的除法器
27.削減不必要的時鐘。它會在設計和布局中引起很多麻煩,大多數FPGA有1-4個專門的時鐘通道
良好代碼編寫風格可以滿足信、達、雅的要求。在滿足功能和性能目標的前提下,增強代碼的可讀性、可移植性,首要的工作是在項目開發之前為整個設計團隊建立一個命名約定和縮略語清單,以文檔的形式記錄下來,并要求每位設計人員在代碼編寫過程中都要嚴格遵守。良好代碼編寫風格的通則概括如下:??
(1) 對所有的信號名、變量名和端口名都用小寫,這樣做是為了和業界的習慣保持一致;對常量名和用戶定義的類型用大寫;??
(2) 使用有意義的信號名、端口名、函數名和參數名;??
(3) 信號名長度不要太長;??
(4) 對于時鐘信號使用clk 作為信號名,如果設計中存在多個時鐘,使用clk 作為時鐘信號的前綴;??
(5) 對來自同一驅動源的信號在不同的子模塊中采用相同的名字,這要求在芯片總體設計時就定義好頂層子模塊間連線的名字,端口和連接端口的信號盡可能采用相同的名字;??
(6) 對于低電平有效的信號,應該以一個下劃線跟一個小寫字母b 或n 表示。注意在同一個設計中要使用同一個小寫字母表示低電平有效;??
(7) 對于復位信號使用rst 作為信號名,如果復位信號是低電平有效,建議使用rst_n;??
(8) 當描述多比特總線時,使用一致的定義順序,對于verilog 建議采用bus_signal[x:0]的表示;??
(9) 盡量遵循業界已經習慣的一些約定。如*_r 表示寄存器輸出,*_a 表示異步信號,*_pn 表示多周期路徑第n 個周期使用的信號,*_nxt 表示鎖存前的信號,*_z 表示三態信號等;??
(10)在源文件、批處理文件的開始應該包含一個文件頭、文件頭一般包含的內容如下例所示:文件名,作者,模塊的實現功能概述和關鍵特性描述,文件創建和修改的記錄,包括修改時間,修改的內容等;??
(11)使用適當的注釋來解釋所有的always 進程、函數、端口定義、信號含義、變量含義或信號組、變量組的意義等。注釋應該放在它所注釋的代碼附近,要求簡明扼要,只要足夠說明設計意圖即可,避免過于復雜;??
(12)每一行語句獨立成行。盡管VHDL 和Verilog 都允許一行可以寫多個語句,當時每個語句獨立成行可以增加可讀性和可維護性。同時保持每行小于或等于72 個字符,這樣做都是為了提高代碼得可讀性;??
(13)建議采用縮進提高續行和嵌套語句得可讀性。縮進一般采用兩個空格,如西安交通大學SOC 設計中心2 如果空格太多則在深層嵌套時限制行長。同時縮進避免使用TAB 鍵,這樣可以避免不同機器TAB 鍵得設置不同限制代碼得可移植能力;??
(14)在RTL 源碼的設計中任何元素包括端口、信號、變量、函數、任務、模塊等的命名都不能取Verilog 和VHDL 語言的關鍵字;??
(15)在進行模塊的端口申明時,每行只申明一個端口,并建議采用以下順序:??
輸入信號的clk、rst、enables other control signals、data and address signals。然后再申明輸出信號的clk、rst、enalbes other control signals、data signals;??
(16)在例化模塊時,使用名字相關的顯式映射而不要采用位置相關的映射,這樣可以提高代碼的可讀性和方便debug 連線錯誤;??
(17)如果同一段代碼需要重復多次,盡可能使用函數,如果有可能,可以將函數通用化,以使得它可以復用。注意,內部函數的定義一般要添加注釋,這樣可以提高代碼的可讀性;??
(18)盡可能使用循環語句和寄存器組來提高源代碼的可讀性,這樣可以有效地減少代碼行數;??
(19)對一些重要的always 語句塊定義一個有意義的標號,這樣有助于調試。注意標號名不要與信號名、變量名重復;??
(20)代碼編寫時的數據類型只使用IEEE 定義的標準類型,在VHDL 語言中,設計者可以定義新的類型和子類型,但是所有這些都必須基于IEEE 的標準;??
(21)在設計中不要直接使用數字,作為例外,可以使用0 和1。建議采用參數定義代替直接的數字。同時,在定義常量時,如果一個常量依賴于另一個常量,建議在定義該常量時用表達式表示出這種關系;??
(22)不要在源代碼中使用嵌入式的dc_shell 綜合命令。這是因為其他的綜合工具并不認得這些隱含命令,從而導致錯誤的或較差的綜合結果。即使使用Design Compiler,當綜合策略改變時,嵌入式的綜合命令也不如放到批處理綜合文件中易于維護。這個規則有一個例外的綜合命令,即編譯開關的打開和關閉可以嵌入到代碼中;??
(23)在設計中避免實例化具體的門級電路。門級電路可讀性差,且難于理解和維護,如果使用特定工藝的門電路,設計將變得不可移植。如果必須實例化門電路,我們建議采用獨立于工藝庫的門電路,如SYNOPSYS 公司提供的GTECH 庫包含了高質量的常用的門級電路;??
(24)避免冗長的邏輯和子表達式;??
(25)避免采用內部三態電路,建議用多路選擇電路代替內部三態電路。
規則 #1: 建立時序邏輯模型時,采用非阻塞賦值語句。
規則 #2: 建立latch模型時,采用非阻塞賦值語句。
規則 #3: 在always塊中建立組合邏輯模型時,采用阻塞賦值語句。
規則 #4: 在一個always塊中同時有組合和時序邏輯時時,采用非阻塞賦值語句。
規則 #5: 不要在一個always塊中同時采用阻塞和非阻塞賦值語句。
規則 #6: 同一個變量不要在多個always塊中賦值。
規則 #7: 調用$strobe系統函數顯示用非阻塞賦值語句賦的值。
規則 #8: 不要使用#0延時賦值。
組合邏輯
1,敏感變量的描述完備性
Verilog中,用always塊設計組合邏輯電路時,在賦值表達式右端參與賦值的所有信號都必須在always @(敏感電平列表)中列出,always中if語句的判斷表達式必須在敏感電平列表中列出。如果在賦值表達式右端引用了敏感電平列表中沒有列出的信號,在綜合時將會為沒有列出的信號隱含地產生一個透明鎖存器。這是因為該信號的變化不會立刻引起所賦值的變化,而必須等到敏感電平列表中的某一個信號變化時,它的作用才表現出來,即相當于存在一個透明鎖存器,把該信號的變化暫存起來,待敏感電平列表中的某一個
信號變化時再起作用,純組合邏輯電路不可能作到這一點。綜合器會發出警告。
Example1:
input a,b,c;
reg e,d;
always @(a or b or c)
? ? begin
? ? e=d&a&b; /*d沒有在敏感電平列表中,d變化時e不會立刻變化,直到a,b,c中某一個變化*/
? ? d=e |c;
? ? end
Example2:
input a,b,c;
reg e,d;
always @(a or b or c or d)
? ? begin
? ? e=d&a&b; /*d在敏感電平列表中,d變化時e立刻變化*/
? ? d=e |c;
? ? end
2,條件的描述完備性
如果if語句和case語句的條件描述不完備,也會造成不必要的鎖存器。
Example1:
if (a==1'b1) q=1'b1;//如果a==1'b0,q=? q將保持原值不變,生成鎖存器!
Example2:
if (a==1'b1) q=1'b1;
else ??? ?? ?q=1'b0;//q有明確的值。不會生成鎖存器!
Example3:
? ?reg[1:0] a,q;
? ?....
? ?case (a)
? ?? ?2'b00 : q=2'b00;
? ?? ?2'b01 : q=2'b11;//如果a==2'b10或a==2'b11,q=? q將保持原值不變,鎖存器!
? ?endcase
Example4:
? ?reg[1:0] a,q;
? ?....
? ?case (a)
? ?? ?2'b00 : q=2'b00;
? ?? ?2'b01 : q=2'b11;
? ?? ?default: q=2'b00;//q有明確的值。不會生成鎖存器!
? ?endcase
? ???Verilog中端口的描述
1,端口的位寬最好定義在I/O說明中,不要放在數據類型定義中;
Example1:
module test(addr,read,write,datain,dataout)
input[7:0]??datain;
input[15:0] addr;
input? ?? ? read,write;
output[7:0] dataout;??//要這樣定義端口的位寬!
wire addr,read,write,datain;
reg??dataout;
Example2:
module test(addr,read,write,datain,dataout)
input??datain,addr,read,write;
output dataout;
wire[15:0] addr;
wire[7:0]??datain;
wire? ?? ? read,write;
reg[7:0]? ?dataout;? ?//不要這樣定義端口的位寬!!
2,端口的I/O與數據類型的關系:
? ? 端口的I/O? ?? ?? ???端口的數據類型
? ?? ?? ?? ?? ?? ?? ???module內部? ???module外部
? ?? ?input? ?? ?? ?? ???wire? ?? ?? ? wire或reg
? ?? ?output? ?? ?? ?wire或reg? ?? ?? ???wire
? ?? ?inout? ?? ?? ?? ?wire? ?? ?? ?? ???wire
3,assign語句的左端變量必須是wire;直接用"="給變量賦值時左端變量必須是reg!
Example:
assign a=b; //a必須被定義為wire!!
********
begin
? ?a=b; //a必須被定義為reg!
end
??VHDL中STD_LOGIC_VECTOR和INTEGER的區別
例如A是INTEGER型,范圍從0到255;B是STD_LOGIC_VECTOR,定義為8位。A累加到255時,再加1就一直保持255不變,不會自動反轉到0,除非令其為0;而B累加到255時,再加1就會自動反轉到0。所以在使用時要特別注意!
以觸發器為例說明描述的規范性
1,無置位/清零的時序邏輯
? ? always @( posedge CLK)
? ?? ? begin
? ?? ? Q<=D;
? ?? ? end
2,有異步置位/清零的時序邏輯
??異步置位/清零是與時鐘無關的,當異步置位/清零信號到來時,觸發器的輸出立即??被置為1或0,不需要等到時鐘沿到來才置位/清零。所以,必須要把置位/清零信號??列入always塊的事件控制表達式。
? ? always @( posedge CLK or negedge RESET)
? ?? ? begin
? ?? ? if (!RESET)
? ?? ?? ? Q=0;
? ?? ? else
? ?? ?? ? Q<=D;
? ?? ? end
3,有同步置位/清零的時序邏輯
? ?同步置位/清零是指只有在時鐘的有效跳變時刻置位/清零,才能使觸發器的輸出分? ?別轉換為1或0。所以,不要把置位/清零信號列入always塊的事件控制表達式。但是? ?必須在always塊中首先檢查置位/清零信號的電平。
? ? always @( posedge CLK )
? ? begin
? ?? ? if (!RESET)
? ?? ?? ? Q=0;
? ?? ? else
? ?? ?? ? Q<=D;
? ?? ? end
結構規范性
在整個芯片設計項目中,行為設計和結構設計的編碼是最重要的一個步驟。它對邏輯綜合和布線結果、時序測定、校驗能力、測試能力甚至產品支持 都有重要的影響。考慮到仿真器和真實的邏輯電路之間的差異,為了有效的
進行仿真測試:
??1,避免使用內部生成的時鐘
? ? 內部生成的時鐘稱為門生時鐘(gated clock)。如果外部輸入時鐘和門生時鐘同時驅動,? ? 則不可避免的兩者的步調不一致,造成邏輯混亂。而且,門生時鐘將會增加測試的難度? ? 和時間。
??2,絕對避免使用內部生成的異步置位/清零信號
? ? 內部生成的置位/清零信號會引起測試問題。使某些輸出信號被置位或清零,無法正常? ? 測試。
3,避免使用鎖存器
? ? 鎖存器可能引起測試問題。對于測試向量自動生成(ATPG),? ? 為了使掃描進行,鎖存器需要置為透明模式(transparent mode),? ? 反過來,測試鎖存器需要構造特定的向量,這可非同一般。
??4,時序過程要有明確的復位值
? ? 使觸發器帶有復位端,在制造測試、ATPG以及模擬初始化時,可以對整個電路進行? ? 快速復位。
??5,避免模塊內的三態/雙向
? ? 內部三態信號在制造測試和邏輯綜合過程中難于處理.
近日讀 J.Bhasker 的 , 受益匪淺,理清了不少基礎電路知識 , 記下一些 tips :
1. 過程賦值(always 中觸發賦值)的變量,可能會被綜合成連線 或觸發器 或鎖存器.
2.綜合成鎖存器的規則:
a. 變量在條件語句(if 或case)中,被賦值.
b. 變量未在條件語句的所有分支中被賦值.
c. 在always語句多次調用之間需要保持變量值 .
以上三個條件必須同時滿足.
3.綜合成觸發器的規則:
變量在時鐘沿的控制下被賦值。
例外情況:變量的賦值和引用都僅出現在一條always語句中,則該變量被視為中
間變量而不是觸發器。
4. 對于無時鐘事情的always語句(即組合邏輯建模),其時間表應包括該alwa語
句引用的所有變量,否則會出現RTL與Netlist的不一致
芯片外部引腳很多都使用inout類型的,為的是節省管腿。一般信號線用做總線等雙向數據傳輸的時候就要用到INOUT類型了。就是一個端口同時做輸入和輸出。inout在具體實現上一般用三態門來實現。三態門的第三個狀態就是高阻'Z'。當inout端口不輸出時,將三態門置高阻。這樣信號就不會因為兩端同時輸出而出錯了,更詳細的內容可以搜索一下三態門tri-state的資料.
1 使用inout類型數據,可以用如下寫法:
inout data_inout;
input data_in;
reg data_reg;//data_inout的映象寄存器
reg link_data;
assign data_inout=link_data?data_reg:1’bz;//link_data控制三態門
//對于data_reg,可以通過組合邏輯或者時序邏輯根據data_in對其賦值.通過控制link_data的高低電平,從而設置data_inout是輸出數據還是處于高阻態,如果處于高阻態,則此時當作輸入端口使用.link_data可以通過相關電路來控制.
2 編寫測試模塊時,對于inout類型的端口,需要定義成wire類型變量,而其它輸入端口都定義成reg類型,這兩者是有區別的.
當上面例子中的data_inout用作輸入時,需要賦值給data_inout,其余情況可以斷開.此時可以用assign語句實現:assign data_inout=link?data_in_t:1’bz;其中的link ,data_in_t是reg類型變量,在測試模塊中賦值.
另外,可以設置一個輸出端口觀察data_inout用作輸出的情況:
Wire data_out;
Assign data_out_t=(!link)?data_inout:1’bz;
else,in RTL
inout use in top module(PAD)
dont use inout(tri) in sub module
也就是說,在內部模塊最好不要出現inout,如果確實需要,那么用兩個port實現,到頂層的時候再用三態實現。理由是:在非頂層模塊用雙向口的話,該雙向口必然有它的上層跟它相連。既然是雙向口,則上層至少有一個輸入口和一個輸出口聯到該雙向口上,則發生兩個內部輸出單元連接到一起的情況出現,這樣在綜合時往往會出錯。
對雙向口,我們可以將其理解為2個分量:一個輸入分量,一個輸出分量。另外還需要一個控制信號控制輸出分量何時輸出。此時,我們就可以很容易地對雙向端口建模。
例子:
CODE:
module dual_port (
....
inout_pin,
....
);
inout inout_pin;
wire inout_pin;
wire input_of_inout;
wire output_of_inout;
wire out_en;
assign input_of_inout = inout_pin;
assign inout_pin = out_en ? output_of_inout : 高阻;
endmodule
可見,此時input_of_inout和output_of_inout就可以當作普通信號使用了。
在仿真的時候,需要注意雙向口的處理。如果是直接與另外一個模塊的雙向口連接,那么只要保證一個模塊在輸出的時候,另外一個模塊沒有輸出(處于高阻態)就可以了。
如果是在ModelSim中作為單獨的模塊仿真,那么在模塊輸出的時候,不能使用force命令將其設為高阻態,而是使用release命令將總線釋放掉
很多初學者在寫testbench進行仿真和驗證的時候,被inout雙向口難住了。仿真器老是提示錯誤不能進行。下面是我個人對inout端口寫testbench仿真的一些總結,并舉例進行說明。在這里先要說明一下inout口在testbench中要定義為wire型變量。
先假設有一源代碼為:
module xx(data_inout , ........);
inout data_inout;
........................
assign data_inout=(! link)?datareg:1'bz;
endmodule
方法一:使用相反控制信號inout口,等于兩個模塊之間用inout雙向口互連。這種方法要注意assign 語句只能放在initial和always塊內。
module test();
wire data_inout;
reg data_reg;
reg link;
initial begin
..........
end
assign data_inout=link?data_reg:1'bz;
endmodule
方法二:使用force和release語句,但這種方法不能準確反映雙向端口的信號變化,但這種方法可以反在塊內。
module test();
wire data_inout;
reg data_reg;
reg link;
#xx;? ?? ???//延時
force data_inout=1'bx;? ?? ?? ???//強制作為輸入端口
...............
#xx;
release data_inout;? ?? ?? ? //釋放輸入端口
endmodule
很多讀者反映仿真雙向端口的時候遇到困難,這里介紹一下雙向端口的仿真方法。一個典型的雙向端口如圖1所示。
其中inner_port與芯片內部其他邏輯相連,outer_port為芯片外部管腳,out_en用于控制雙向端口的方向,out_en為1時,端口為輸出方向,out_en為0時,端口為輸入方向。
用Verilog語言描述如下:
module bidirection_io(inner_port,out_en,outer_port);
input out_en;
inout[7:0] inner_port;
inout[7:0] outer_port;
assign outer_port=(out_en==1)?inner_port:8'hzz;
assign inner_port=(out_en==0)?outer_port:8'hzz;
endmodule
用VHDL語言描述雙向端口如下:
library ieee;
use IEEE.STD_LOGIC_1164.ALL;
entity bidirection_io is
port ( inner_port : inout std_logic_vector(7 downto 0);
out_en : in std_logic;
outer_port : inout std_logic_vector(7 downto 0) );
end bidirection_io;
architecture behavioral of bidirection_io is
begin
outer_port<=inner_port when out_en='1' else (OTHERS=>'Z');
inner_port<=outer_port when out_en='0' else (OTHERS=>'Z');
end behavioral;
仿真時需要驗證雙向端口能正確輸出數據,以及正確讀入數據,因此需要驅動out_en端口,當out_en端口為1時,testbench驅動inner_port端口,然后檢查outer_port端口輸出的數據是否正確;當out_en端口為0時,testbench驅動outer_port端口,然后檢查inner_port端口讀入的數據是否正確。由于inner_port和outer_port端口都是雙向端口(在VHDL和Verilog語言中都用inout定義),因此驅動方法與單向端口有所不同。
驗證該雙向端口的testbench結構如圖2所示。
這是一個self-checking testbench,可以自動檢查仿真結果是否正確,并在Modelsim控制臺上打印出提示信息。圖中Monitor完成信號采樣、結果自動比較的功能。
testbench的工作過程為
1)out_en=1時,雙向端口處于輸出狀態,testbench給inner_port_tb_reg信號賦值,然后讀取outer_port_tb_wire的值,如果兩者一致,雙向端口工作正常。
2)out_en=0時,雙向端口處于輸如狀態,testbench給outer_port_tb_reg信號賦值,然后讀取inner_port_tb_wire的值,如果兩者一致,雙向端口工作正常。
用Verilog代碼編寫的testbench如下,其中使用了自動結果比較,隨機化激勵產生等技術。
`timescale 1ns/10ps
module tb();
reg[7:0] inner_port_tb_reg;
wire[7:0] inner_port_tb_wire;
reg[7:0] outer_port_tb_reg;
wire[7:0] outer_port_tb_wire;
reg out_en_tb;
integer i;
initial
begin
out_en_tb=0;
inner_port_tb_reg=0;
outer_port_tb_reg=0;
i=0;
repeat(20)
begin
#50
i=$random;
out_en_tb=i[0]; //randomize out_en_tb
inner_port_tb_reg=$random; //randomize data
outer_port_tb_reg=$random;
end
end
//**** drive the ports connecting to bidirction_io
assign inner_port_tb_wire=(out_en_tb==1)?inner_port_tb_reg:8'hzz;
assign outer_port_tb_wire=(out_en_tb==0)?outer_port_tb_reg:8'hzz;
//instatiate the bidirction_io module
bidirection_io bidirection_io_inst(.inner_port(inner_port_tb_wire),
.out_en(out_en_tb),
.outer_port(outer_port_tb_wire));
//***** monitor ******
always@(out_en_tb,inner_port_tb_wire,outer_port_tb_wire)
begin
#1;
if(outer_port_tb_wire===inner_port_tb_wire)
begin
$display("\n **** time=%t ****",$time);
$display("OK! out_en=%d",out_en_tb);
$display("OK! outer_port_tb_wire=%d,inner_port_tb_wire=%d",
outer_port_tb_wire,inner_port_tb_wire);
end
else
begin
$display("\n **** time=%t ****",$time);
$display("ERROR! out_en=%d",out_en_tb);
$display("ERROR! outer_port_tb_wire != inner_port_tb_wire" );
$display("ERROR! outer_port_tb_wire=%d, inner_port_tb_wire=%d",
outer_port_tb_wire,inner_port_tb_wire);
end
end
endmodule
今天重新回顧了一下阻塞賦值和非阻塞賦值的概念,感覺又有所收獲。?
一、特點:
? ? 阻塞賦值:1、RHS的表達式計算和LHS的賦值更新,這兩個動作之間不能插入其他動作,即所謂計算完畢,立即更新。
? ?? ?? ?? ? 2、所謂阻塞就是指在一個“begin...end”塊中的多個阻塞賦值語句內,只有上一句完全執行完畢后,才會執行下一語句,否則阻塞程序的執行。
? ? 非阻塞賦值:RHS的表達式計算和LHS的賦值更新分兩個節拍執行,首先,應該是RHS的表達式計算,得到新值后并不立即賦值,而是放在事件隊列中等待,直到
? ?? ?? ?? ???當前仿真時刻的后期才執行(原因下文會提到)。
二、Verilog的分層事件隊列:
? ? 在Verilog中,事件隊列可以劃分為5個不同的區域,不同的事件根據規定放在不同的區域內,按照優先級的高低決定執行的先后順序,下表就列出了部分Verilog分層事件隊列。其中,活躍事件的優先級最高(最先執行),而監控事件的優先級最低,而且在活躍事件中的各事件的執行順序是隨機的(注:為方便起見,在一般的仿真器中,對同一區域的不同事件是按照調度的先后關系執行的)。
當前仿真
時間事件
活躍事件? ? ? ???阻塞賦值,非阻塞賦值的RHS計算……
非活躍事件
顯式0延時的阻塞賦值……
非阻塞賦值更新事件
由非阻塞語句產生的一個非阻塞賦值更新事件,并被調入當前仿真時刻。
監控事件
$monitor和$strobe等系統任務
將來仿真
時間事件? ? ? ???? ? ? ???被調度到將來仿真時間的事件
三、結論:
? ? 由上表就可以知道,阻塞賦值屬于活躍事件,會立刻執行,這就是阻塞賦值“計算完畢,立刻更新”的原因。此外,由于在分層事件隊列中,只有將活躍事件中排在前面的事件調出,并執行完畢后,才能夠執行下面的事件,這就可以解釋阻塞賦值的第二個特點。
? ? 同樣是由上表知,非阻塞賦值的RHS計算屬于活躍事件,而非阻塞賦值更新事件排在非活躍事件之后,因此只有仿真隊列中所有的活躍事件和非活躍事件都執行完畢后,才輪到非阻塞賦值更新事件,這就是非阻塞賦值必須分兩拍完成的原因。
以上就是我今天的讀書筆記,寫得倉促,如有不對,敬請指出 。
一. 強調Verilog代碼編寫風格的必要性。
強調Verilog代碼編寫規范,經常是一個不太受歡迎的話題,但卻是非常有必要的。
每個代碼編寫者都有自己的編寫習慣,而且都喜歡按照自己的習慣去編寫代碼。與自己編寫風格相近的代碼,閱讀起來容易接受和理解。相反和自己編寫風格差別較大的代碼,閱讀和接受起來就困難一些。
曾有編程大師總結說,一個優秀的程序員,能維護的代碼長度大約在1萬行數量級。代碼的整潔程度,很大程度上影響著代碼的維護難度。
遵循代碼編寫規范書寫的代碼,很容易閱讀、理解、維護、修改、跟蹤調試、整理文檔。相反代碼編寫風格隨意的代碼,通常晦澀、凌亂,會給開發者本人的調試、修改工作帶來困難,也會給合作者帶來很大麻煩。
(實際上英文Coding Style有另一層涵義,更偏重的是,某一個電路,用那一種形式的語言描述,才能將電路描述得更準確,綜合以后產生的電路更合理。本文更偏重的是,編寫Verilog代碼時的書寫習慣。)
二. 強調編寫規范的宗旨。
縮小篇幅
提高整潔度
便于跟蹤、分析、調試
增強可讀性,幫助閱讀者理解
便于整理文檔
便于交流合作
三. 變量及信號命名規范。
1. 系統級信號的命名。
系統級信號指復位信號,置位信號,時鐘信號等需要輸送到各個模塊的全局信號;系統信號以字符串Sys開頭。
2. 低電平有效的信號后一律加下劃線和字母n。如:SysRst_n;FifoFull_n;
3. 經過鎖存器鎖存后的信號,后加下劃線和字母r,與鎖存前的信號區別。如CpuRamRd信號,經鎖存后應命名為CpuRamRd_r。
低電平有效的信號經過鎖存器鎖存后,其命名應在_n后加r。如CpuRamRd_n信號,經鎖存后應命名為CpuRamRd_nr
多級鎖存的信號,可多加r以標明。如CpuRamRd信號,經兩級觸發器鎖存后,應命名為CpuRamRd_rr。
4. 模塊的命名。
在系統設計階段應該為每個模塊進行命名。命名的方法是,將模塊英文名稱的各個單詞首字母組合起來,形成3到5個字符的縮寫。若模塊的英文名只有一個單詞,可取該單詞的前3個字母。各模塊的命名以3個字母為宜。例如:
Arithmatic Logical Unit模塊,命名為ALU。
Data Memory Interface模塊,命名為DMI。
Decoder模塊,命名為DEC。
5. 模塊之間的接口信號的命名。
所有變量命名分為兩個部分,第一部分表明數據方向,其中數據發出方在前,數據接收方在后,第二部分為數據名稱。
兩部分之間用下劃線隔離開。
第一部分全部大寫,第二部分所有具有明確意義的英文名全部拼寫或縮寫的第一個字母大寫,其余部分小寫。
舉例:CPUMMU_WrReq,下劃線左邊是第一部分,代表數據方向是從CPU模塊發向存儲器管理單元模塊(MMU)。下劃線右邊Wr為Write的縮寫,Req是Request的縮寫。兩個縮寫的第一個字母都大寫,便于理解。整個變量連起來的意思就是CPU發送給MMU的寫請求信號。
模塊上下層次間信號的命名也遵循本規定。
若某個信號從一個模塊傳遞到多個模塊,其命名應視信號的主要路徑而定。
6. 模塊內部信號:
模塊內部的信號由幾個單詞連接而成,縮寫要求能基本表明本單詞的含義;
單詞除常用的縮寫方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取該單詞的前幾個字母( 如:Frequency->Freq, Variable->Var 等);
每個縮寫單詞的第一個字母大寫;
若遇兩個大寫字母相鄰,中間添加一個下劃線(如DivN_Cntr);
舉例:SdramWrEn_n;FlashAddrLatchEn;
四. 編碼格式規范。
1. 分節書寫,各節之間加1到多行空格。如每個always,initial語句都是一節。每節基本上完成一個特定的功能,即用于描述某幾個信號的產生。在每節之前有幾行注釋對該節代碼加以描述,至少列出本節中描述的信號的含義。
2. 行首不要使用空格來對齊,而是用Tab鍵,Tab鍵的寬度設為4個字符寬度。行尾不要有多余的空格。
3. 注釋。
使用//進行的注釋行以分號結束;
使用/* */進行的注釋,/*和*/各占用一行,并且頂頭;
例:
// Edge detector used to synchronize the input signal;
4. 空格的使用:
不同變量,以及變量與符號、變量與括號之間都應當保留一個空格。
Verilog關鍵字與其它任何字符串之間都應當保留一個空格。如:
Always @ (……)
使用大括號和小括號時,前括號的后邊和后括號的前邊應當留有一個空格。
邏輯運算符、算術運算符、比較運算符等運算符的兩側各留一個空格,與變量分隔開來;單操作數運算符例外,直接位于操作數前,不使用空格。
使用//進行的注釋,在//后應當有一個空格;注釋行的末尾不要有多余的空格。
例:
assign SramAddrBus = { AddrBus[31:24], AddrBus[7:0] };
assign DivCntr[3:0] = DivCntr[3:0] + 4’b0001;
assign Result = ~Operand;
5. 同一個層次的所有語句左端對齊;Initial、always等語句塊的begin關鍵詞跟在本行的末尾,相應的end關鍵詞與Initial、always對齊;這樣做的好處是避免因begin獨占一行而造成行數太多;
例:
always @ ( posedge SysClk or negedge SysRst ) begin
if( !SysRst ) DataOut <= 4'b0000;
else if( LdEn ) begin
DataOut <= DataIn;
End
else DataOut <= DataOut + 4'b0001;
end
6. 不同層次之間的語句使用Tab鍵進行縮進,每加深一層縮進一個Tab;
8. 在endmodule,endtask,endcase等標記一個代碼塊結束的關鍵詞后面要加上一行注釋說明這個代碼塊的名稱;
9. 在task名稱前加tsk以示標記。在function的名稱前加func以示標記。例如:
task tskResetSystem;
……
endtask //of tskResetSystem
五.小結:
以上列出的代碼編寫規范無法覆蓋代碼編寫的方方面面,還有很多細節問題,需要在實際編寫過程中加以考慮。并且有些規定也不是絕對的,需要靈活處理。并不是律條,但是在一個項目組內部、一個項目的進程中,應該有一套類似的代碼編寫規范來作為約束。
總的方向是,努力寫整潔、可讀性好的代碼
二.reg型
在“always”塊內被賦值的每一個信號都必須定義成reg型。
reg型數據的缺省初始值是不定值。
reg型只表示被定義的信號將用在“always”塊內,理解這一點很重要。并不是說reg型信號一定是寄存器或觸發器的輸出。雖然reg型信號常常是寄存器或觸發器的輸出,但并不一定總是這樣。
三.memory型
memory型數據是通過擴展reg型數據的地址范圍來生成的。其格式如下:
reg [n-1:0] 存儲器名[m-1:0];
或? ? ? ? reg [n-1:0] 存儲器名[m:1];
在這里,reg[n-1:0]定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器。存儲器名后的[m-1:0]或[m:1]則定義了該存儲器中有多少個這樣的寄存器。
reg [7:0] mema[255:0];
這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0到255。注意:對存儲器進行地址索引的表達式必須是常數表達式。
盡管memory型數據和reg型數據的定義格式很相似,但要注意其不同之處。如一個由n個1位寄存器構成的存儲器組是不同于一個n位的寄存器的。見下例:
reg [n-1:0] rega;? ? //一個n位的寄存器
reg mema [n-1:0];? ? //一個由n個1位寄存器構成的存儲器組
一個n位的寄存器可以在一條賦值語句里進行賦值,而一個完整的存儲器則不行。見下例:
rega =0;? ? ? ? //合法賦值語句
mema =0;? ? ? ? //非法賦值語句
如果想對memory中的存儲單元進行讀寫操作,必須指定該單元在存儲器中的地址。下面的寫法是正確的。
mema[3]=0;? ? ? ? //給memory中的第3個存儲單元賦值為0。
3.3.1.基本的算術運算符
在Verilog HDL語言中,算術運算符又稱為二進制運算符,共有下面幾種:
1)? ?? ?+ (加法運算符,或正值運算符,如 rega+regb,+3)
2)? ?? ?-(減法運算符,或負值運算符,如 rega-3,-3)
3)? ?? ?×(乘法運算符,如rega*3)
4)? ?? ?/ (除法運算符,如5/3)
5)? ?? ?% (模運算符,或稱為求余運算符,要求%兩側均為整型數據。如7%3的值為1)
注意:? ? ? ? 在進行算術運算操作時,如果某一個操作數有不確定的值x,則整個結果也為不定值x。
1)? ?? ?~? ?? ?? ? //取反
2)? ?? ?&? ?? ?? ? //按位與
3)? ?? ?|? ?? ?? ? //按位或
4)? ?? ?^? ?? ?? ? //按位異或
5)? ?? ?^~? ?? ?? ?//按位同或(異或非)
在Verilog HDL語言中存在三種邏輯運算符:
1)? ?? ?&& 邏輯與
2)? ?? ?|| 邏輯或
3)? ?? ?! 邏輯非
關系運算符共有以下四種:
a < b? ?? ? a小于b
a > b? ?? ? a大于b
a <= b? ?? ?a小于或等于b
a >= b? ?? ?a大于或等于b
3.3.5.等式運算符
3.3.6.移位運算符
3.3.7.位拼接運算符(Concatation)
3.3.10.關鍵詞
在Verilog HDL中,所有的關鍵詞是事先定義好的確認符,用來組織語言結構。關鍵詞是用小寫字母定義的,因此在編寫原程序時要注意關鍵詞的書寫,以避免出錯。下面是Verilog HDL中使用的關鍵詞(請參閱附錄:Verilog語言參考手冊):
always, and, assign,begin,buf,bufif0,bufif1,case,casex,casez,cmos,deassign,default,defparam,disable,edge,else,end,endcase,endmodule,endfunction,endprimitive, endspecify, endtable, endtask, event, for, force, forever, fork, function,highz0, highz1, if,initial, inout, input,integer,join,large,macromodule,medium,module,nand,negedge,nmos,nor,not,notif0,notifl, or, output, parameter, pmos, posedge, primitive, pull0, pull1, pullup, pulldown, rcmos, reg, releses, repeat, mmos, rpmos, rtran, rtranif0,rtranif1,scalared,small,specify,specparam,strength,strong0, strong1, supply0, supply1, table, task, time, tran, tranif0, tranif1, tri, tri0, tri1, triand, trior, trireg,vectored,wait,wand,weak0,weak1,while, wire,wor, xnor, xor
(1).非阻塞(Non_Blocking)賦值方式( 如 b <= a; )
1)? ?? ?塊結束后才完成賦值操作。
2)? ?? ?b的值并不是立刻就改變的。
3)? ?? ?這是一種比較常用的賦值方法。(特別在編寫可綜合模塊時)
(2).阻塞(Blocking)賦值方式( 如 b = a; )
1)? ?? ?賦值語句執行完后,塊才結束。
2)? ?? ?b的值在賦值語句執行完后立刻就改變的。
3)? ?? ?可能會產生意想不到的結果。
一.順序塊
順序塊有以下特點:
1)? ?? ?塊內的語句是按順序執行的,即只有上面一條語句執行完后下面的語句才能執行。
2)? ?? ?每條語句的延遲時間是相對于前一條語句的仿真時間而言的。
3)? ?? ?直到最后一條語句執行完,程序流程控制才跳出該語句塊。
順序塊的格式如下:
begin
語句1;
語句2;
......
語句n;
end
其中:
?? ?? ???塊名即該塊的名字,一個標識名。其作用后面再詳細介紹。
?? ?? ???塊內聲明語句可以是參數聲明語句、reg型變量聲明語句、integer型變量聲明語句、real型變量聲明語句。
二. 并行塊
并行塊有以下四個特點:
1)? ?? ?塊內語句是同時執行的,即程序流程控制一進入到該并行塊,塊內語句則開始同時并行地執行。
2)? ?? ?塊內每條語句的延遲時間是相對于程序流程控制進入到塊內時的仿真時間的。
3)? ?? ?延遲時間是用來給賦值語句提供執行時序的。
4)? ?? ?當按時間時序排序在最后的語句執行完后或一個disable語句執行時,程序流程控制跳出該程序塊。
并行塊的格式如下:
fork
語句1;
語句2;
.......
語句n;
join
其中:
?? ?? ???塊名即標識該塊的一個名字,相當于一個標識符。
?? ?? ???塊內說明語句可以是參數說明語句、reg型變量聲明語句、integer型變量聲明語句、real型變量聲明語句、time型變量聲明語句、事件(event)說明語句。
在fork_join塊內,各條語句不必按順序給出,因此在并行塊里,各條語句在前還是在后是無關緊要的。見下例:
三. 塊名
在VerilgHDL語言中,可以給每個塊取一個名字,只需將名字加在關鍵詞begin或fork后面即可。這樣做的原因有以下幾點。
1)? ?? ?這樣可以在塊內定義局部變量,即只在塊內使用的變量。
2)? ?? ?這樣可以允許塊被其它語句調用,如被disable語句。
3)? ?? ?在Verilog語言里,所有的變量都是靜態的,即所有的變量都只有一個唯一的存儲地址,因此進入或跳出塊并不影響存儲在變量內的值。
基于以上原因,塊名就提供了一個在任何仿真時刻確認變量值的方法。
casez語句用來處理不考慮高阻值z的比較過程,casex語句則將高阻值z和不定值都視為不必關心的情況。
如果用到if語句,最好寫上else項。如果用case語句,最好寫上default項。遵循上面兩條原則,就可以避免發生這種錯誤,使設計者更加明確設計目標,同時也增強了Verilog程序的可讀性。
3.6.循環語句
在Verilog HDL中存在著四種類型的循環語句,用來控制執行語句的執行次數。
1)? ? forever ?? ? ? 連續的執行語句。
2)? ? repeat ?? ? ? 連續執行一條語句 n 次。
3)? ? while ?? ? ? 執行一條語句直到某個條件不滿足。如果一開始條件即不滿足(為假),
? ?? ?? ?? ? 則語句一次也不能被執行。
4)? ? for通過以下三個步驟來決定語句的循環執行。
a)? ?? ?先給控制循環次數的變量賦初值。
b)? ?? ?判定控制循環的表達式的值,如為假則跳出循環語句,如為真則執行指定的語句后,轉到第三步。
c)?
#1:當為時序邏輯建模,使用“非阻塞賦值”。
#2:當為鎖存器(latch)建模,使用“非阻塞賦值”。
#3:當用always塊為組合邏輯建模,使用“阻塞賦值”
#4:當在同一個always塊里面既為組合邏輯又為時序邏輯建模,使用“非阻塞賦值”。
#5:不要在同一個always塊里面混合使用“阻塞賦值”和“非阻塞賦值”。
#6:不要在兩個或兩個以上always塊里面對同一個變量進行賦值。
#7:使用$strobe以顯示已被“非阻塞賦值”的值。
#8:不要使用#0延遲的賦值。
#9:在VERILOG語法中, if...else if ... else 語句是有優先級的,一般說來第一個IF的優先級最高,最后一個ELSE的優先級最低。如果描述一個編碼器,在XILINX的XST綜合參數就有一個關于優先級編碼器硬件原語句的選項Priority Encoder Extraction. 而CASE語句是"平行"的結構,所有的CASE的條件和執行都沒有“優先級”。而建立優先級結構會消耗大量的組合邏輯,所以如果能夠使用CASE語句的地方,盡量使用CASE替換IF...ELSE結構。
#10:XILINX的底層可編程硬件資源叫SLICE,由2個FF和2個LUT組成。FF觸發器? LUT查找表
ALTERA的底層可編程硬件資源叫LE, ?由1個FF和1個LUT組成。
#11:慎用鎖存器(latch),同步時序設計要盡量避免使用鎖存器,綜合出非目的性latch的主要原因在于不完全的條件判斷句。另外一種情況是設計中有組合邏輯的反饋環路(combinatorial feedback loops)。
#12:狀態機的一般設計原則,Biary, gray-code 編碼使用最少的觸發器,較多的組合邏輯。而one-hot編碼反之。所以CPLD多使用GRAY-CODE, 而FPGA多使用ONE-HOT編碼。另一方面,小型設計使用GRAY-CODE和BINARY編碼更有效,而大型狀態機使用ONE-HOT更有效。
#13:業界主流CPLD產品是lattice的LC4000系列和ALTERA的MAX3000系列。
#14:復位使初始狀態可預測,防止出現禁用狀態。FPGA 和CPLD 的復位信號采用異步低電平有效信號,連接到其全局復位輸入端,使用專用路徑通道,復位信號必須連接到FPGA 和CPLD 的全局復位管腳。。
#15:不要用時鐘或復位信號作數據或使能信號,也不能用數據信號作為時鐘或復位信號,否則HDL 綜合時會出現時序驗證問題。信號穿過時鐘的兩半個周期時,要在前后分別取樣;防止出現半穩定狀態。
#16:fpga設計中 不要使用門時鐘(don't use gated clock)。時鐘信號必須連接到全局時鐘管腳上。
#17:不要使用內部三態信號,否則增加功耗。
#18:只使用同步設計,不要使用延時單元。
#19:避免使用負延觸發的雙穩態多諧振蕩器(flip flop)。
#20:不要使用信號和變量的默認值(或初始值),用復位脈沖初始化
信號和變量。
#21:不要在代碼中使用buffer 類型的端口讀取輸出數據;要使用out 類型,再增加另外變量或信號,以獲取輸出值。
這是因為buffer 類型的端口不能連接到其他類型的端口上,因此buffer 類型就會在整個設計的端口中傳播下去。
#22:對變量要先讀后寫;如果先寫后讀,就會產生長的組合邏輯和鎖存器(或寄存器)。這是因為變量值是立即獲取的。
#23:在組合邏輯進程中,其敏感向量標中要包含所有要讀取得信號;這是為了防止出現不必要的鎖存器。
近期,在stephen Brown的一本書數字邏輯基礎與verilog設計一書中看到關于觸發器電路的時序分析。以前一直沒有搞明白這個問題,現在覺得豁然開朗。怕忘記了,特地摘抄與此與edacn網友分享。
觸發器電路的時序分析:
圖7-84給出了一個使用D觸發器的簡單電路。我們想要計算該電路能正常工作的最大的時鐘頻率Fmax,并且想確定該電路的保持時間是否不夠長。在技術文獻中,這種類型的電路分析通常叫做時序分析。假設該觸發器的時序參數為:tsu=0.6ns,th=0.4ns,0.8ns<=tcQ<=1.0ns。給tcq參數規定一個范圍是因為延遲參數分布在一定范圍內,這樣處理是現成集成電路芯片常用的方法。為了計算最小的時鐘信號周期Tmin=1/Fmax,我們必須考慮在觸發器中從開始到結束的所有路徑。在這個簡單的電路中,只有一條這樣的路徑,這條路徑開始于數據被時鐘信號的正跳變沿加載進入觸發器,經過tcQ的延遲后傳播到Q的輸出端,再傳播通過非門,同時必須滿足D輸入端的建立時間要求。因此:
Tmin=tcQ+tNOT+tsu
由于我們關注的只是計算出最長的延遲時間,所以應該用tcQ的最大值。為了計算出tNOT,我們將假設通過任何邏輯門的延遲都可以用1+0.1k進行計算,其中k是該門的輸入信號的個數。對非門而言,k=1,因此得到如下Tmin和Fmax的值:Tmin=1.0+1.1+0.6=2.7ns
Fmax=1/2.7ns=370.37MHz
當然,有必要檢查電路中的保持時間是否違反規定。在這種場合,我們必須核查從時鐘信號的正跳變沿到D輸入值改變的最短延遲。該延遲由tcQ+tNOT=0.8+1.1=1.9ns給定。因為1.9ns>0.4ns,所以保持時間夠長,沒有違反規定。再舉一個觸發器電路時序分析的例子,請考慮圖7-85所示的計數器電路。假設所用的觸發器的時序參數與圖7-84中用過的觸發器相同,請計算該電路能正常運行的最高頻率。再次假設通過邏輯門的傳播延遲可以用1+0.1k來計算。
在這個電路中,存在著四個觸發器從開始到結束的許多路徑。最長的路徑從觸發器Q0起到觸發器Q3結束。在某個電路中最長的路徑成為關鍵路徑。關鍵路徑的延遲包括觸發器Q0的時鐘信號到Q的延遲、通過三個與門的傳播延遲和一個異或門的延遲。我們還必須考慮觸發器Q3的建立時間。因此,得到
Tmin=tcQ+3(tAND)+tXOR+tsu
用tcQ的最大值,得到
Tmin=1.0+3(1.2)+1.2+0.6=6.4ns
Fmax=1/6.4ns=156.25MHz
該電路的最短路徑是從每個觸發器通過異或門反饋到該觸發器本身的輸入端。沿每個這樣路徑的最小延遲為tcQ+tXOR=0.8+1.2=2.0ns。因為2.0ns>th=0.4ns,因此保持時間足夠長,沒有違反規定。
? ?? ? 在上面的分析中,假設時鐘信號同時到達所有四個觸發器。我們現在將重復這個分析,假設時鐘信號同時到達觸發器Q0,Q1,Q2,但到達觸發器Q3有一些延遲。始終到達不同的觸發器之間的時間差稱為時鐘偏差(clock skew),記作tskew,時鐘偏差可以由許多原因引起。
? ?? ? 在圖7-85中,電路的關鍵路徑是從觸發器Q0起到觸發器Q3。然而,Q3的時鐘偏差使得這個延遲減少,因為時鐘偏差在數據被加載進該觸發器前提供了附加的時間。如果考慮增加1.5ns的時鐘偏差,則從觸發器Q0到觸發器Q3的路徑延遲由tcQ+3(tAND)+tXOR+tsu-tskew=6.4-1.5ns=4.9ns給定。該電路現在還存在一個不同的關鍵路徑,該路徑從觸發器Q0起到觸發器Q2結束。這條路徑的延遲為
Tmin=tcQ+2(tAND)+tXOR+tsu=1.0+2(1.2)+1.2+0.6ns=5.2ns
Fmax=1/5.2ns=192.31MHz
? ?? ? 在這種場合,時鐘偏差導致電路的最高時鐘頻率提高。但是,如果時鐘偏差是負的,即觸發器Q3的時鐘到達時間比其他觸發器更早一些,則會造成該電路的最高時鐘頻率Fmax降低。
? ?? ? 因為數據加載到觸發器Q3被時鐘偏差延遲了,所以對所有起始于Q0,Q1,Q2而以Q3為結束點的路徑,都會產生使觸發器Q3的保持時間需要增加到th+tskew的影響。在該電路中,這種最短的路徑是從觸發器Q2到Q3的路徑,其延遲時間為TcQ+tAND+tXOR=0.8+1.2+1.2=3.2ns。因為3.2ns>th+tskew=1.9ns,所以保持時間足夠長,沒有違反規定。
如果對時鐘偏差值tskew>=3.2-th=2.8ns,重復以上保持時間的分析,則會出現保持時間不夠的情況。當tskew>=2.8ns時,該電路將不可能在任何頻率下可靠地運行。由于時鐘偏差的存在會引起電路時序問題,所以好的電路設計方法必須保證時鐘信號到達所有觸發器的偏差盡可能小。
最后是我的總結:確定最小周期是找關鍵路徑即最長路徑。確定Th是否違例是找最短路徑。最短路徑要大于Th。如果有Tskew的情況則要大于Th+Tskew(有skew的寄存器為最短路徑的終點的時候)
還有就是我對有Tskew的情況的時候為什么防止違例要最短路徑>Th+Tskew。因為Q0,Q1和Q2時鐘比Q3早,以他們為起點的路徑已經開始走了一段時間后Q3的時鐘才到才開始打入數據。所以保持時間上要加上這段skew
ISE 約束文件的基本操作
1.約束文件的概念
FPGA設計中的約束文件有3類:用戶設計文件(.UCF文件)、網表約束文件(.NCF文件)以及物理約束文件(.PCF文件),可以完成時序約束、管腳約束以及區域約束。3類約束文件的關系為:用戶在設計輸入階段編寫UCF文件,然后UCF文件和設計綜合后生成NCF文件,最后再經過實現后生成PCF 文件。本節主要介紹UCF文件的使用方法。
UCF文件是ASC 2碼文件,描述了邏輯設計的約束,可以用文本編輯器和Xilinx約束文件編輯器進行編輯。NCF約束文件的語法和UCF文件相同,二者的區別在于:UCF文件由用戶輸入,NCF文件由綜合工具自動生成,當二者發生沖突時,以UCF文件為準,這是因為UCF的優先級最高。PCF文件可以分為兩個部分:一部分是映射產生的物理約束,另一部分是用戶輸入的約束,同樣用戶約束輸入的優先級最高。一般情況下,用戶約束都應在UCF文件中完成,不建議直接修改 NCF文件和PCF文件。
2.創建約束文件
約束文件的后綴是.ucf,所以一般也被稱為UCF文件。創建約束文件有兩種方法,一種是通過新建方式,另一種則是利用過程管理器來完成。
第一種方法:新建一個源文件,在代碼類型中選取“Implementation Constrains File”,在“File Name”中輸入“one2two_ucf”。單擊“Next”按鍵進入模塊選擇對話框,選擇模塊“one2two”,然后單擊“Next”進入下一頁,再單擊“Finish”按鍵完成約束文件的創建。
第二種方法:在工程管理區中,將“Source for”設置為“Synthesis/Implementation”。“Constrains Editor”是一個專用的約束文件編輯器,雙擊過程管理區中“User Constrains”下的“Create Timing Constrains”就可以打開“Constrains Editor”,其界面如圖所示:
圖 啟動Constrains Editor引腳約束編輯
在“Ports”選項卡中可以看到,所有的端口都已經羅列出來了,如果要修改端口和FPGA管腳的對應關系,只需要在每個端口的“Location”列中填入管腳的編號即可。例如在UCF文件中描述管腳分配的語法為:
? ?? ???NET “端口名稱” LOC = 引腳編號;
需要注意的是,UCF文件是大小敏感的,端口名稱必須和源代碼中的名字一致,且端口名字不能和關鍵字一樣。但是關鍵字NET是不區分大小寫的。
3.編輯約束文件
在工程管理區中,將“Source for”設置為“Synthesis/Implementation”,然后雙擊過程管理區中“User Constrains”下的“Edit Constraints (Text)”就可以打開約束文件編輯器,如下圖所示,就會新建當前工程的約束文件。
圖 用戶約束管理窗口
UCF文件的語法說明
1.語法?
? ?? ?? UCF文件的語法為:
{NET|INST|PIN} "signal_name" Attribute;
其中,“signal_name”是指所約束對象的名字,包含了對象所在層次的描述;“Attribute”為約束的具體描述;語句必須以分號“;”結束。可以用“#”或“/* */”添加注釋。需要注意的是:UCF文件是大小寫敏感的,信號名必須和設計中保持大小寫一致,但約束的關鍵字可以是大寫、小寫甚至大小寫混合。例如:
NET "CLK" LOC = P30;
“CLK”就是所約束信號名,LOC = P30;是約束具體的含義,將CLK信號分配到FPGA的P30管腳上。
對于所有的約束文件,使用與約束關鍵字或設計環境保留字相同的信號名會產生錯誤信息,除非將其用" "括起來,因此在輸入約束文件時,最好用" "將所有的信號名括起來。
2.通配符
在UCF文件中,通配符指的是“*”和“?”。“*”可以代表任何字符串以及空,“?”則代表一個字符。在編輯約束文件時,使用通配符可以快速選擇一組信號,當然這些信號都要包含部分共有的字符串。例如:
NET "*CLK?" FAST;
將包含“CLK”字符并以一個字符結尾的所有信號,并提高了其速率。
在位置約束中,可以在行號和列號中使用通配符。例如:
INST "/CLK_logic/*" LOC = CLB_r*c7;
把CLK_logic層次中所有的實例放在第7列的CLB中。
3.定義設計層次
? ?? ? 在UCF文件中,通過通配符*可以指定信號的設計層次。其語法規則為:
* 遍歷所有層次
Level1/* 遍歷level1及以下層次中的模塊
Level1/*/ 遍歷level1種的模塊,但不遍歷更低層的模塊
例4-5 根據圖4-75所示的結構,使用通配符遍歷表4-3所要求的各個模塊。
圖 層次模塊示意圖
表 要求遍歷的符號列表
管腳和區域約束語法
LOC約束是FPGA設計中最基本的布局約束和綜合約束,能夠定義基本設計單元在FPGA芯片中的位置,可實現絕對定位、范圍定位以及區域定位。此外, LOC還能將一組基本單元約束在特定區域之中。LOC語句既可以書寫在約束文件中,也可以直接添加到設計文件中。換句話說,ISE中的FPGA底層工具編輯器(FPGA Editor)、布局規劃器(Floorplanner)和引腳和區域約束編輯器的主要功能都可以通過LOC語句完成。?
?? ? ? ???LOC語句語法
INST "instance_name " LOC = location;
其中“location”可以是FPGA芯片中任一或多個合法位置。如果為多個定位,需要用逗號“,”隔開,如下所示:
LOC = location1,location2,...,locationx;
目前,還不支持將多個邏輯置于同一位置以及將多個邏輯至于多個位置上。需要說明的是,多位置約束并不是將設計定位到所有的位置上,而是在布局布線過程中,布局器任意挑選其中的一個作為最終的布局位置。
范圍定位的語法為:
INST “instance_name” LOC=location:location [SOFT];
常用的LOC定位語句如表4-4所列。
表 常用的LOC定位語句
使用LOC完成端口定義時,其語法如下:
NET "Top_Module_PORT" LOC = "Chip_Port";
其中,“Top_Module_PORT”為用戶設計中頂層模塊的信號端口,“Chip_Port”為FPGA芯片的管腳名。
LOC語句中是存在優先級的,當同時指定LOC端口和其端口連線時,對其連線約束的優先級是最高的。例如,在圖4-76中,LOC=11的優先級高于LOC=38。
圖 LOC優先級示意圖
2.LOC屬性說明
LOC語句通過加載不同的屬性可以約束管腳位置、CLB、Slice、TBUF、塊RAM、硬核乘法器、全局時鐘、數字鎖相環(DLL)以及DCM模塊等資源,基本涵蓋了FPGA芯片中所有類型的資源。由此可見,LOC語句功能十分強大,表4-5列出了LOC的常用屬性。
表 LOC語句常用屬性列表
Verilog HDL代碼描述對狀態機綜合的研究
2007-11-25 16:59
1 引言
? ? Verilog HDL作為當今國際主流的HDL語言,在芯片的前端設計中有著廣泛的應用。它的語法豐富,成功地應用于設計的各個階段:建模、仿真、驗證和綜合等。可綜合是指綜合工具能將Verilog HDL代碼轉換成標準的門級結構網表,因此代碼的描述必須符合一定的規則。大部分數字系統都可以分為控制單元和數據單元兩個部分,控制單元的主體是一個狀態機,它接收外部信號以及數據單元產生的狀態信息,產生控制信號,因而狀態機性能的好壞對系統性能有很大的影響。
? ? 有許多可綜合狀態機的Verilog代碼描述風格,不同代碼描述風格經綜合后得到電路的物理實現在速度和面積上有很大差別。優秀的代碼描述應當易于修改、易于編寫和理解,有助于仿真和調試,并能生成高效的綜合結果。
2 有限狀態機
? ? 有限狀態機(Finite State Machine,FSM)在數字系統設計中應用十分廣泛。根據狀態機的輸出是否與輸入有關,可將狀態機分為兩大類:摩爾(Moore)型狀態機和米莉(Mealy)型狀態機。Moore型狀態機的輸出僅與現態有關;Mealy型狀態機的輸出不僅與現態有關,而且和輸入也有關。圖1是有限狀態機的一般結構圖,它主要包括三個部分,其中組合邏輯部分包括狀態譯碼器和輸出譯碼器,狀態譯碼器確定狀態機的下一個狀態,輸出譯碼器確定狀態機的輸出,狀態寄存器屬于時序邏輯部分,用來存儲狀態機的內部狀態。
圖1 狀態機的結構框圖
2.1 好的狀態機標準
? ? 好的狀態機的標準很多,最重要的幾個方面如下:
第一,狀態機要安全,是指FSM不會進入死循環,特別是不會進入非預知的狀態,而且由于某些擾動進入非設計狀態,也能很快的恢復到正常的狀態循環中來。這里面有兩層含義。其一要求該FSM的綜合實現結果無_毛刺等異常擾動,其二要求FSM要完備,即使受到異常擾動進入非設計狀態,也能很快恢復到正常狀態。
第二,狀態機的設計要滿足設計的面積和速度的要求。
第三,狀態機的設計要清晰易懂、易維護。
? ? 需要說明的是,以上各項標準,不是割裂的,它們有著直接緊密的內在聯系。在芯片設計中,對綜合結果評判的兩個基本標準為:面積和速度。“面積”是指設計所占用的邏輯資源數量;“速度”指設計在芯片上穩定運行所能夠達到的最高頻率。兩者是對立統一的矛盾體,要求一個設計同時具備設計面積最小,運行頻率最高,這是不現實的。科學的設計目標應該是:在滿足設計時序要求(包含對設計最高頻率的要求)的前提下,占用最小的芯片面積,或者在所規定的面積下,使設計的時序余量更大,頻率更高。另外,如果要求FSM安全,則很多時候需要使用“full case”的編碼方式,即將狀態轉移變量的所有向量組合情況都在FSM 中有相應的處理,這經常勢必意味著要多花更多的設計資源,有時也會影響FSM的頻率所以,上述的標準要綜合考慮,根據設計的要求進行權衡。
2.2 狀態機描述方法
? ? 狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什么,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式:
第一,整個狀態機寫到一個always模塊里面,在該模塊中既描述狀態轉移,又描述狀態的輸入和輸出;
第二,用兩個always模塊來描述狀態機,其中一個always模塊采用同步時序描述狀態轉移;另一個模塊采用組合邏輯判斷狀態轉移條件,描述狀態轉移規律以及輸出;
第三,在兩個always模塊描述方法基礎上,使用三個always模塊,一個always模塊采用同步時序描述狀態轉移,一個采用組合邏輯判斷狀態轉移條件,描述狀態轉移規律,另一個always模塊描述狀態的輸出(可以用組合電路輸出,也可以時序電路輸出)。
? ? 一般而言,推薦的FSM 描述方法是后兩種。這是因為:FSM和其他設計一樣,最好使用同步時序方式設計,以提高設計的穩定性,消除毛刺。狀態機實現后,一般來說,狀態轉移部分是同步時序電路而狀態的轉移條件的判斷是組合邏輯。
? ? 第二種描述方法同第一種描述方法相比,將同步時序和組合邏輯分別放到不同的always模塊中實現,這樣做的好處不僅僅是便于閱讀、理解、維護,更重要的是利于綜合器優化代碼,利于用戶添加合適的時序約束條件,利于布局布線器實現設計。在第二種方式的描述中,描述當前狀態的輸出用組合邏輯實現,組合邏輯很容易產生毛刺,而且不利于約束,不利于綜合器和布局布線器實現高性能的設計。第三種描述方式與第二種相比,關鍵在于根據狀態轉移規律,在上一狀態根據輸入條件判斷出當前狀態的輸出,從而在不插入額外時鐘節拍的前提下,實現了寄存器輸出。
2.3 狀態機的編碼
? ? 二進制編碼(Binary)、格雷碼(Gray-code)編碼使用最少的觸發器,較多的組合邏輯,而獨熱碼(One-hot)編碼反之。獨熱碼編碼的最大優勢在于狀態比較時僅僅需要比較一個位,從而一定程度上簡化了比較邏輯,減少了毛刺產生的概率。由于CPLD更多地提供組合邏輯資源,而FPGA更多地提供觸發器資源,所以CPLD多使用二進制編碼或格雷碼,而FPGA多使用獨熱碼編碼。另一方面,對于小型設計使用二進制和格雷碼編碼更有效,而大型狀態機使用獨熱碼更高效。
3 實例說明
? ? 下面通過實例來說明Verilog HDL代碼描述對狀態機綜合結果的影響。
? ? 設計一個序列檢測器,用于檢測串行的二進制序列,每當連續輸入三個或三個以上的1時,序列檢測器的輸出為1,其它情況下輸出為0。
? ? 假設初始的狀態為s0,輸入一個1的狀態記為s1,連續輸入二個1后的狀態記為s2,輸入三個或以上1的狀態記為s3,不論現態是何種狀態一旦輸入0的話,就返回到初始狀態。根據題意,可畫出狀態圖如圖2所示。
圖2 狀態圖
根據狀態圖以及前面狀態機的介紹,可以采用一個always模塊來描述,狀態編碼采用二進制編碼,程序如下:
module fsm(clk,ina,out);
input clk,ina;
output out;
reg out;
parameter s0 = 3'bOO,s1 =3'b01,s2 =3'b10,s3=3'b11;
reg[0:1]state;
always @ (posedge clk)
begin
state<=s0;
out =0;
case(state)
s0:begin
state<=(ina)?s1:s0;out=0;
end
s1:begin
state<=(ina)?s2:s0;out=0;
end
s2:begin
state<=(ina)?s3:s0;out=0;
end
s3:begin
state<=(ina)?s3:s0;out=1;
end
endcase
end
endmodule
? ? 采用Synplify Pro工具在Altera EPF10K10系列器件上進行綜合,其綜合的結果如圖3所示。
? ? 如果采用兩個always來描述,程序的模塊聲明、端口定義和信號類型部分不變,只是改動邏輯功能描述部分,改動部分的程序如下:
alwys @ (posedge dk)
state fsm <=next_state;
always @ (state_fsm or ina)
begin
state<=s0;out =0;
case(state_fsm )
s0:begin
next_state=(ina)?s1:s0;out=0;
end
s1:begin
next state=(ina)?s2:s0;out=0:
end
s2:begin
next_state=(ina)?s3:s0;out=0;
end
s3:begin
next_state=(ina)?s3:s0;out=1;
end
endcase
end
endmodule
? ? 在相同的器件上其綜合的結果如圖4所示,比較圖3與圖4的綜合結果,可以看出。兩種綜合結果都是采用了兩個觸發器來存儲狀態。其不同的地方是輸出部分,采用一個always模塊的輸出結果是寄存器輸出。采用兩個always模塊描述的是組合邏輯直接輸出,這是因為代碼中的輸出賦值也放在了時鐘的上升沿(always @ (posedge clk))。其綜合的結果是寄存器,因此它比直接組合邏輯輸出延遲一個時鐘周期。
圖4
? ? 如果采用一位hot編碼,僅改動參數設置的兩行程序。采用一個always模塊描述,改動部分的程序如下:
parameter s0 = 3'b0001,s1 =3'b0010,s2 =3'b0100,s3=3'b1000;
reg[0:3] state;
圖5
? ? 綜合的結果如圖5所示。將圖5與圖3相比,可以看出:
? ? 圖5中狀態寄存器采用了4個觸發器來存儲狀態,而圖3采用了兩個觸發器來存儲狀態,這是由于它們的狀態編碼的不同而得到的不同的綜合結果,采用二進制編碼綜合得到的觸發器要比采用獨熱碼綜合得到的觸發器少。它們的共同之處都是采用了寄存器來輸出的。
3 結束語
? ? 有多種可綜合狀態機的Verilog HDL代碼描述風格。其綜合的結果是不同的。其中廣泛采用的是兩個或三個always模塊描述。組合邏輯輸出型狀態機不適合應用在高速復雜系統設計中,在高速系統中應當采用寄存器輸出型狀態機。寄存器類型信號不會產生毛刺,并且輸出不含組合邏輯。會減少組合邏輯門延時。容易滿足高速系統設計要求。總之,狀態機的設計是數字系統設計中的關鍵部分,設計時做到心中有電路。充分考慮其綜合的結果,才能編寫出高質量的綜合代碼。進而提高設計水平。
模塊劃分非常重要,除了關系到是否最大程度上發揮項目成員的協同設計能力,而且直接決定著設計的綜合、實現時間。下面是一些模塊劃分的原則。
? ?? a.對每個同步設計的子模塊的輸出使用寄存器(registering)。也即用寄存器分割同步時序模塊的原則。) @( F3 f+ D" j
? ???使用寄存器的好處有:綜合工具在編譯綜合時會將所分割的子模塊中的組合電路和同步時序電路整體考慮。而且這種模塊結構符合時序約束的習慣,便于使用時序約束熟悉進行約束。) q9 t/ |# a ?\7 p0 C
? ?? b.將相關的邏輯或者可以復用的邏輯劃分在同一模塊內。
? ???這樣做的好處有,一方面將相關的邏輯和可以復用的邏輯劃分在同一模塊,可以最大程度的復用資源,減少設計消耗的面積。同時也更利于綜合工具優化一個具體功能(操作)在時序上的關鍵路徑。其原因是,綜合工具只能同時考慮一部分邏輯,而所同時優化的邏輯單元就是模塊,所以將相關功能劃分在同一模塊更有利于綜合器的優化。; l/ w" k5 r9 G4 X4 x
? ?? c.將不同優化目標的邏輯分開。
? ???好的設計,在規劃階段,設計者就已經思考了設計的大概規模和關鍵路徑,并對設計的優化目標有一個整體上的把握。對于時序緊張的部分,應該獨立劃分為一個模塊,其優化目標為“speed”,這種劃分方法便于設計者進行時序約束,也便于綜合和實現工具進行優化。比如時序優化的利器Amplify,使用模塊進行區域優化更方便一些。另一類矛盾集中在面積的設計,也應該劃分成獨立的模塊,這類模塊的優化目標是“Area”,同樣將他們規劃到一起,更有利于區域布局與約束。這種根據優化目標進行優化的方法的最大好處是,對于某個模塊綜合器僅僅需要考慮一種優化目標和策略,從而比較容易達到較好的優化效果。相反的如果同時考慮兩種優化目標,會使綜合器陷入互相制約的困境。
? ?? d.將松約束的邏輯歸到同一模塊。
? ???有些邏輯的時序非常寬松,不需要較高的時序約束,可以將這類邏輯歸入同一模塊,如多周期路徑“multi-cycle”等。將這些模塊歸類,并指定松約束,則可以讓綜合器盡量的節省面積資源。
? ?? e.將RAM/ROM/FIFO等邏輯獨立劃分成模塊。
? ???這樣做的好處是便于綜合器將這類資源類推為器件的硬件原語,同時仿真時消耗的內存也會少些,便于提高仿真速度。(大多數仿真器對大面積的RAM都有獨特的內存管理方式)0 o4 B! p5 Q- D) O) Y7 M/ ]
? ?? f.合適的模塊規模。
? ???規模大,利于“Resource Sharing”。但是對綜合器同時處理的邏輯量太大,不利于多模塊和增量編譯模式。
關于約束,時序分析的問題匯總
很多人發貼,來信詢問關于約束、時序分析的問題,比如:如何設置setup,hold時間?如何使用全局時鐘和第二全局時鐘(長線資源)?如何進行分組約束?如何約束某部分組合邏輯?如何通過約束保證異步時鐘域之間的數據交換可靠?如何使用I/O邏輯單元內部的寄存器資源?如何進行物理區域約束,完成物理綜合和物理實現?等等。。。
為了解決大家的疑難,我們將逐一討論這些問題。
今天先討論一下約束的作用?
有些人不知道何時該添加約束,何時不需要添加?有些人認為低速設計不需要時序約束?關于這些問題,希望下面關于約束作用的論述能夠有所幫助!
附加約束的基本作用有3:
(1)提高設計的工作頻率
對很多數字電路設計來說,提高工作頻率非常重要,因為高工作頻率意味著高處理能力。通過附加約束可以控制邏輯的綜合、映射、布局和布線,以減小邏輯和布線延時,從而提高工作頻率。
(2)獲得正確的時序分析報告
幾乎所有的FPGA設計平臺都包含靜態時序分析工具,利用這類工具可以獲得映射或布局布線后的時序分析報告,從而對設計的性能做出評估。靜態時序分析工具以約束作為判斷時序是否滿足設計要求的標準,因此要求設計者正確輸入約束,以便靜態時序分析工具輸出正確的時序分析報告。
(3)指定FPGA/CPLD引腳位置與電氣標準
FPGA/CPLD的可編程特性使電路板設計加工和FPGA/CPLD設計可以同時進行,而不必等FPGA/CPLD引腳位置完全確定,從而節省了系統開發時間。這樣,電路板加工完成后,設計者要根據電路板的走線對FPGA/CPLD加上引腳位置約束,使FPGA/CPLD與電路板正確連接。另外通過約束還可以指定IO引腳所支持的接口標準和其他電氣特性。為了滿足日新月異的通信發展,Xilinx新型FPGA/CPLD可以通過IO引腳約束設置支持諸如AGP、BLVDS、CTT、GTL、GTLP、HSTL、LDT、LVCMOS、LVDCI、LVDS、LVPECL、LVDSEXT、LVTTL、PCI、PCIX、SSTL、ULVDS等豐富的IO接口標準。
另外通過區域約束還能在FPGA上規劃各個模塊的實現區域,通過物理布局布線約束,完成模塊化設計等。
貼2:時序約束的概念和基本策略!
時序約束主要包括周期約束(FFS到FFS,即觸發器到觸發器)和偏移約束(IPAD到FFS、FFS到OPAD)以及靜態路徑約束(IPAD到OPAD)等3種。通過附加約束條件可以使綜合布線工具調整映射和布局布線過程,使設計達到時序要求。例如用OFFSET_IN_BEFORE約束可以告訴綜合布線工具輸入信號在時鐘之前什么時候準備好,綜合布線工具就可以根據這個約束調整與IPAD相連的Logic Circuitry的綜合實現過程,使結果滿足FFS的建立時間要求。
附加時序約束的一般策略是先附加全局約束,然后對快速和慢速例外路徑附加專門約束。附加全局約束時,首先定義設計的所有時鐘,對各時鐘域內的同步元件進行分組,對分組附加周期約束,然后對FPGA/CPLD輸入輸出PAD附加偏移約束、對全組合邏輯的PAD TO PAD路徑附加約束。附加專門約束時,首先約束分組之間的路徑,然后約束快、慢速例外路徑和多周期路徑,以及其他特殊路徑。
貼3:周期(PERIOD)的含義
周期的含義是時序中最簡單也是最重要的含義,其它很多時序概念會因為軟件商不同略有差異,而周期的概念確是最通用的,周期的概念是FPGA/ASIC時序定義的基礎概念。后面要講到的其它時序約束都是建立在周期約束的基礎上的,很多其它時序公式,可以用周期公式推導。
周期約束是一個基本時序和綜合約束,它附加在時鐘網線上,時序分析工具根據PERIOD約束檢查時鐘域內所有同步元件的時序是否滿足要求。PERIOD約束會自動處理寄存器時鐘端的反相問題,如果相鄰同步元件時鐘相位相反,那么它們之間的延遲將被默認限制為PERIOD約束值的一半。
如下圖所示,時鐘的最小周期為:
TCLK = TCKO +TLOGIC +TNET +TSETUP -TCLK_SKEW
TCLK_SKEW =TCD2 -TCD1
其中TCKO為時鐘輸出時間,TLOGIC為同步元件之間的組合邏輯延遲,TNET為網線延遲,TSETUP為同步元件的建立時間,TCLK_SKEW為時鐘信號延遲的差別。
這個帖子打算先澄清一些時序約束的基本概念,然后將在綜合工具(Synplify Pro為例),設計平臺(ISE5.x 和Quartus 2.2為例)的具體約束方法和技巧,然后將如何利用時序分析工具分析關鍵路徑。如果沒有意外,應該30多個帖子吧。
仿真時序本來是Deve的老本行,隨時需要Deve加入一起把這個帖子辦好。歡迎大家暢談觀點,本站的版主,沖鋒啊,嘻嘻。
貼4:數據和時鐘之間的約束:OFFSET和SETUP、HOLD時間。
為了確保芯片數據采樣可靠和下級芯片之間正確的交換數據,需要約束外部時鐘和數據輸入輸出引腳之間的時序關系(或者內部時鐘和外部輸入/輸出數據之間的關系,這僅僅是從采用了不同的參照系罷了)。約束的內容為告訴綜合器、布線器輸入數據到達的時刻,或者輸出數據穩定的時刻,從而保證與下一級電路的時序關系。
這種時序約束在Xilinx中用Setup to Clock(edge),Clock(edge) to hold等表示。在Altera里常用tsu (Input Setup Times)、th (Input Hold Times)、tco (Clock to Out Delays)來表示。很多其它時序工具直接用setup和hold表示。其實他們所要描述的是同一個問題,僅僅是時間節點的定義上略有不同。下面依次介紹。
貼5:關于輸入到達時間,這一貼估計問題比較多,看起來也比較累,但是沒有辦法,這些都是時序的基本概念啊。搞不清楚,永遠痛苦,長痛不如短痛了,呵呵。
Xilinx的"輸入到達時間的計算"時序描述如圖所示:
定義的含義是輸入數據在有效時鐘沿之后的TARRIVAL時刻到達。則,
TARRIVAL=TCKO+TOUTPUT+TLOGIC? ???公式1
根據”貼3“介紹的周期(Period)公式,我們可以得到:
Tcko+Toutput+Tlogic+Tinput+Tsetup-Tclk_skew=Tclk; 公式2
將公式1代入公式2:
Tarrival+Tinput+Tsetup-Tclk_skew=Tclk, 而Tclk_skew滿足時序關系后為負,所以
TARRIVAL +TINPUT+TSETUP 這就是Tarrival應該滿足的時序關系。其中TINPUT為輸入端的組合邏輯、網線和PAD的延遲之和,TSETUP為輸入同步元件的建立時間。
貼6 數據延時和數據到達時間的關系:
TDELAY為要求的芯片內部輸入延遲,其最大值TDELAY_MAX與輸入數據到達時間TARRIVAL的關系如圖2所示。也就是說:
TDELAY_MAX+TARRIVAL=TPERIOD 公式4
所以:
TDELAY帖7 要求輸出的穩定時間
從下一級輸入端的延遲可以計算出當前設計輸出的數據必須在何時穩定下來,根據這個數據對設計輸出端的邏輯布線進行約束,以滿足下一級的建立時間要求,保證下一級采樣的數據是穩定的。
計算要求的輸出穩定時間如圖所示。
公式的推導如下:
定義:TSTABLE = TLOGIC +TINPUT +TSETUP
從前面帖子介紹的周期(Period)公式,可以得到(其中TCLK_SKEW=TCLK1-TCLK2):
TCLK=TCKO+TOUTPUT+TLOGIC+TINPUT+TSETUP+TCLK_SKEW
將TSTABLE的定義代入到周期公式,可以得到:
TCLK=TCKO+TOUTPUT+TSTABLE+TCLK_SKEW
所以,
TCKO +TOUTPUT+TSTABLE這個公式就是TSTABLE必須要滿足的基本時序關系,即本級的輸出應該保持怎么樣的穩定狀態,才能保證下級芯片的采樣穩定。有時我們也稱這個約束關系是輸出數據的保持時間的時序約束關系。只要滿足上述關系,當前芯片輸出端的數據比時鐘上升沿提早TSTABLE 時間穩定下來,下一級就可以正確地采樣數據。
其中TOUTPUT為設計中連接同步元件輸出端的組合邏輯、網線和PAD的延遲之和,TCKO為同步元件時鐘輸出時間。
/*******************************************************************/
這里的概念介紹比較繁復,但是如果想掌握數據與時鐘關系的基本約束,就必須搞清楚這些概念,下一帖介紹這些概念的具體應用,實施上述約束的方法和具體命令。
轉貼lipple的問題:
請問斑竹上面幾貼那些延時屬于setup,哪些屬于hold啊
周期=Tsetup+Tlogic+Thold這個公式對比斑竹的公式,區別在于是不是劃分的不夠細啊?
westor的答復:
基本是哪個意思。這些公式描述的對象是意義的,只是每個變量的定義略有區別罷了,換句話說,變量定義的節點不同。
這個公式是altera等采用的描述方法,一些工具為了便于理解用
周期=Tsetup+Tlogic+Thold約束時序。
和我前面介紹的公式:
TCLK = TCKO +TLOGIC +TNET +TSETUP -TCLK_SKEW
相比,他把到寄存器前的所有組合邏輯logic和線延時都歸在Tsetup里面了,而且上面公式忽略了Tclk_skew。
帖8 實施上述約束的方法和命令。
實施上述約束的基本方法是,根據已知時序信息,推算需要約束的時間值,實施約約束。具體的說是這樣的,首先對于一般設計,首先掌握的是TCLK,這個對于設計者來說是個已知量。前面介紹公式和圖中的TCKO和TSETUP(注:有的工具軟件對TCKO和TSETUP的定義與前面圖形不同,還包含了到達同步器件的一段logic的時延)是器件內部固有的一個時間量,一般我們選取典型值,對于FPGA,這個量值比較小,一般不大于1~2ns。比較難以確定的是TINPUT和TOUTPUT兩個時間量。
約束輸入時間偏移,需要知道TINPUT,TINPUT為輸入端的組合邏輯、網線和PAD的延遲之和(詳細定義見帖5),PAD的延時也根據器件型號也有典型值可選,但是到達輸入端的組合邏輯電路和網線的延時就比較難以確定了,只能通過靜態時序分析工具分析,或者通過底層布局布線工具量取,有很大的經驗和試探的成分在里面。
約束輸出時間偏移,需要知道TOUTPUT,TOUTPUT為設計中連接同步元件輸出端的組合邏輯、網線和PAD的延遲之和(見帖7),仍然是到達輸出端的組合邏輯電路和網線的延時就比較難以確定,需要通過靜態時序分析工具分析,或者通過底層布局布線工具量取,有很大的經驗和試探的成分在里面。
約束的具體命令根據約束工具不同而異,首先說使用Xilinx器件的情況下,實施上述約束的命令和方法。Xilinx把上述約束統稱為:OFFSET約束(偏移約束),一共有4個相關約束屬性:OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER。
其中前兩個屬性叫做輸入偏移(OFFSET_IN)約束,基本功能相似,僅僅是約束取的參考對象不同而已。后兩個屬性叫做輸出偏移(OFFSET_OUT)約束,基本功能相似,也是約束取的參考對象不同而已。
為了便于理解,舉例說明。
輸入偏移約束例:時鐘周期為20ns,前級寄存器的TCKO選則1ns,前級輸出邏輯延時TOUTPUT為3ns,中間邏輯TLOGIC的延時為10ns,那么TARRIVAL=14ns,于是可以在數據輸入引腳附加
NET DATA_IN FFET=IN??14ns??AFTER CLK
約束,也可以使用OFFSET_IN_BEFORE對芯片內部的輸入邏輯進行約束,其語法如下:
NET DATA_IN FFET=IN??TDELAY? ?BEFORE CLK
其中TDELAY為要求的芯片內部輸入延遲,其最大值與輸入數據到達時間TARRIVAL的關系如帖6所述:TDELAY_MAX + TARRIVAL = TPERIOD,所以
TDELAY < TPERIOD - TARRIVAL = 20 - 14 =6 ns.
輸出偏移約束例:設時鐘周期為20ns,后級輸入邏輯延時TINPUT為4ns、建立時間TSETUP為1ns,中間邏輯TLOGIC的延時為10ns,那么TSTABLE=15ns,于是可以在數據輸入引腳附加NET DATA_OUT FFET=OUT ?15ns ?BEFORE CLK
約束,也可以直接對芯片內部的輸出邏輯直接進行約束,
NET DATA_OUT FFET=OUT??TOUTPUT_DELAY??AFTER CLK,
其中TOUTPUT_DELAY為要求的芯片內部輸出延遲,其最大值與要求的輸出數據穩定時間TSTABLE的關系為:TOUTPUT_DELAY_MAX+TSTABLE= TPERIOD.
TOUT_DELAY< TPERIOD - TSTABLE = 20 - 15 = 5ns
/*******************************************************************/
這些概念和推導有些枯燥和乏味,但是如果要掌握好數據與時鐘之間的約束,就要耐心看下去,明天介紹一下Altera的相關約束方法。
帖9 Altera對應的時序概念
這兩天太忙了,帖子上的有些慢,請朋友們原諒,我會盡量按照計劃寫完這個主題的。
前面8個帖子介紹了一些時序概念,有的是FPGA/ASIC設計的一般性時序概念,有的為了方便敘述,主要介紹了Xilinx對應的這些時序概念,和具體的約束熟悉。下面幾個帖子主要介紹Altera對應的這些時序概念和約束方法。
前面首先介紹的第一個時序概念是周期,Period,這個概念是FPGA/ASIC通用的一個概念,各方的定義相當統一,至多是描述方式不同罷了,所有的FPGA設計都首先要進行周期約束,這樣做的好處除了在綜合與布局布線時給出規定目標外,還能讓時序分析工具考察整個設計的Fmax等。
Altera的周期定義如圖所示,公式描述如下:
Clock Period = Clk-to-out + Data Delay + Setup Time - Clk Skew
即,
Tclk? ?? ?? ?= Tco? ?? ???+ B? ?? ?? ? + Tsu? ?? ???-(E-C)
Fmax? ?? ?? ?= 1/Tclk
對比一下前面的介紹,只要理解了B包含了兩級寄存器之間的所有logic和net的延時就會發現與前面公式完全一致。
一個設計的Fmax在時序報告,或者在圖形界面觀察。以Quartus2為例,在圖形界面的觀察方法是,編譯實現完成后,展開Compilation Report下面的Timing Analyses,單擊Fmax(not include delays to / from pins)即可。在詳細報告窗口可以觀察到影響周期惡化的10條最差時序路徑,根據這些信息可以找出關鍵路徑,進行時序分析。
關于時序分析和關鍵路徑改進等內容在后面的帖子會有專門的討論,暫時不做進一步介紹。
貼10
Clock Setup Time (tsu)
要想正確采樣數據,就必須使數據和使能信號在有效時鐘沿到達前就準備好,所謂時鐘建立時間就是指時鐘到達前,數據和使能已經準備好的最小時間間隔。如圖1所示:
注:這里定義Setup時間是站在同步時序整個路徑上的,需要區別的是另一個概念Micro tsu。Micro tsu指的是一個觸發器內部的建立時間,它是觸發器的固有屬性,一般典型值小于1~2ns。在Xilinx等的時序概念中,稱Altera的Micro tsu為setup時間,用Tsetup表示,請大家區分一下。
回到Altera的時序概念,Altera的tsu定義如下:
tsu = Data Delay – Clock Delay + Micro tsu
貼11
Clock Hold Time tH
時鐘保持時間是只能保證有效時鐘沿正確采用的數據和使能信號的最小穩定時間。其定義如圖2所示。定義的公式為:
tH= Clock Delay – Data Delay + Micro tH
注:其中Micro tH是指寄存器內部的固有保持時間,同樣是寄存器的一個固有參數,典型值小于1~2ns。
貼12
Clock-to-Output Delay(tco)
這個時間指的是當時鐘有效沿變化后,將數據推倒同步時序路徑的輸出端的最小時間間隔。如圖3所示。
tco = Clock Delay + Micro tco + Data Delay
注:其中 Micor tco也是一個寄存器的固有屬性,指的是寄存器相應時鐘有效沿,將數據送到輸出端口的內部時間參數。它與Xilinx的時序定義中,有一個概念叫Tcko是同一個概念。
Pin to Pin Delay (tpd)
tpd指輸入管腳通過純組合邏輯到達輸出管腳這段路徑的延時,特別需要說明的是,要求輸入到輸出之間只有組合邏輯,才是tpd延時。
7.Slack
Slack是表示設計是否滿足時序的一個稱謂,正的slack表示滿足時序(時序的余量),負的slack表示不滿足時序(時序的欠缺量)。slack的定義和圖形如圖4所示。
Slack = Required clock period – Actual clock period
Slack = Slack clock period – (Micro tCO+ Data Delay + Micro tSU)
8.Clock Skew
Clock Skew指一個同源時鐘到達兩個不同的寄存器時鐘端的時間偏移。

點擊文末閱讀原文導出word文檔

本文轉載自http://www.cnblogs.com/capark/p/4121369.html,如涉及侵權,請私信小編刪除。

??????????????????END??????????????????

推薦閱讀:ZYNQ 學習專輯

關注視頻,直達精彩內容

總結

以上是生活随笔為你收集整理的verilog always语法_Verilog 最全经验总结(建议收藏)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日产精品高潮呻吟av久久 | 国产午夜视频在线观看 | 特黄特色大片免费播放器图片 | 国产疯狂伦交大片 | 午夜精品久久久内射近拍高清 | 国模大胆一区二区三区 | 精品aⅴ一区二区三区 | 久久五月精品中文字幕 | 精品人人妻人人澡人人爽人人 | 亚洲国产欧美在线成人 | 最近的中文字幕在线看视频 | 无码一区二区三区在线 | 午夜成人1000部免费视频 | 麻豆精产国品 | 免费看男女做好爽好硬视频 | 亚洲中文字幕va福利 | 无码播放一区二区三区 | 亚洲а∨天堂久久精品2021 | 国产区女主播在线观看 | 国产亚洲日韩欧美另类第八页 | 精品无人区无码乱码毛片国产 | 狠狠cao日日穞夜夜穞av | 欧美人与牲动交xxxx | 久久人人97超碰a片精品 | 久久精品人人做人人综合 | 亚洲春色在线视频 | 在线观看免费人成视频 | 亚无码乱人伦一区二区 | 好屌草这里只有精品 | 97精品人妻一区二区三区香蕉 | 国产av剧情md精品麻豆 | 久久久久久国产精品无码下载 | 亚洲色成人中文字幕网站 | 无遮无挡爽爽免费视频 | 免费观看又污又黄的网站 | 丝袜人妻一区二区三区 | 亚洲国产午夜精品理论片 | 成人精品一区二区三区中文字幕 | 又大又黄又粗又爽的免费视频 | 亚洲国产欧美国产综合一区 | 欧美肥老太牲交大战 | 久久人人97超碰a片精品 | 国产明星裸体无码xxxx视频 | 亚洲国产精品毛片av不卡在线 | 亚洲中文无码av永久不收费 | 综合网日日天干夜夜久久 | 成人免费无码大片a毛片 | 狠狠色噜噜狠狠狠狠7777米奇 | 强辱丰满人妻hd中文字幕 | 色婷婷综合激情综在线播放 | 野狼第一精品社区 | 欧美野外疯狂做受xxxx高潮 | 亚洲色偷偷偷综合网 | 狂野欧美激情性xxxx | 在线播放无码字幕亚洲 | 久久久久免费精品国产 | 大地资源网第二页免费观看 | 欧美野外疯狂做受xxxx高潮 | 丰满人妻被黑人猛烈进入 | av小次郎收藏 | 欧洲vodafone精品性 | 日韩人妻少妇一区二区三区 | 国产99久久精品一区二区 | 东京热无码av男人的天堂 | 蜜臀av在线播放 久久综合激激的五月天 | 成人女人看片免费视频放人 | 天天拍夜夜添久久精品大 | a在线亚洲男人的天堂 | 亚洲伊人久久精品影院 | 亚洲区小说区激情区图片区 | 欧美成人免费全部网站 | 中文无码伦av中文字幕 | 亚洲精品国产品国语在线观看 | 国产小呦泬泬99精品 | 亚洲理论电影在线观看 | 少妇被粗大的猛进出69影院 | 中文字幕无码av波多野吉衣 | 国产亚洲精品精品国产亚洲综合 | 国精产品一区二区三区 | 婷婷色婷婷开心五月四房播播 | 中文字幕乱码中文乱码51精品 | 少女韩国电视剧在线观看完整 | 国产成人无码午夜视频在线观看 | 国产9 9在线 | 中文 | 色欲久久久天天天综合网精品 | 免费看男女做好爽好硬视频 | 亚洲中文字幕成人无码 | 性色欲情网站iwww九文堂 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲欧美精品aaaaaa片 | 无码av最新清无码专区吞精 | 国产在线精品一区二区高清不卡 | 永久黄网站色视频免费直播 | 国产午夜无码精品免费看 | 三上悠亚人妻中文字幕在线 | 日韩人妻系列无码专区 | 亚洲色欲色欲欲www在线 | 精品乱子伦一区二区三区 | 国产内射爽爽大片视频社区在线 | 扒开双腿疯狂进出爽爽爽视频 | 国产精品无码久久av | 欧美xxxx黑人又粗又长 | 成熟人妻av无码专区 | 小泽玛莉亚一区二区视频在线 | 亚洲区小说区激情区图片区 | 欧美第一黄网免费网站 | 四虎4hu永久免费 | 国内精品久久毛片一区二区 | 亚洲一区二区三区偷拍女厕 | 亚洲男女内射在线播放 | 久久人人爽人人爽人人片av高清 | 人人妻人人藻人人爽欧美一区 | 亚洲精品久久久久久久久久久 | 欧美日韩在线亚洲综合国产人 | 中文亚洲成a人片在线观看 | 免费中文字幕日韩欧美 | 久久99精品久久久久久动态图 | 天堂а√在线地址中文在线 | 久久国产精品萌白酱免费 | 小sao货水好多真紧h无码视频 | 精品国精品国产自在久国产87 | 丰满少妇人妻久久久久久 | 樱花草在线社区www | 免费网站看v片在线18禁无码 | 亚洲中文字幕va福利 | 激情人妻另类人妻伦 | 久精品国产欧美亚洲色aⅴ大片 | 国产成人精品视频ⅴa片软件竹菊 | 欧美老妇与禽交 | 精品久久久久久亚洲精品 | 欧美亚洲国产一区二区三区 | 亚洲国产精品无码一区二区三区 | 日日橹狠狠爱欧美视频 | 青青青爽视频在线观看 | 一个人看的视频www在线 | 欧美日韩一区二区综合 | 国产亚洲精品久久久久久国模美 | 国产美女极度色诱视频www | 人人妻人人澡人人爽欧美一区九九 | 日日鲁鲁鲁夜夜爽爽狠狠 | 人人妻人人澡人人爽精品欧美 | 久久久久成人精品免费播放动漫 | 亚洲欧美精品伊人久久 | 久9re热视频这里只有精品 | 美女毛片一区二区三区四区 | 色婷婷欧美在线播放内射 | 国产在线精品一区二区三区直播 | 国产亚洲日韩欧美另类第八页 | 高清国产亚洲精品自在久久 | 无码人妻黑人中文字幕 | 欧洲精品码一区二区三区免费看 | 亚洲精品国产精品乱码视色 | 动漫av一区二区在线观看 | 欧美老熟妇乱xxxxx | 精品国产麻豆免费人成网站 | 中文字幕av日韩精品一区二区 | 无码国内精品人妻少妇 | 黑人巨大精品欧美一区二区 | 日本一区二区三区免费播放 | 一二三四社区在线中文视频 | 久久精品一区二区三区四区 | 一本加勒比波多野结衣 | 无码av最新清无码专区吞精 | 亚洲日本一区二区三区在线 | 欧美老熟妇乱xxxxx | 久久国产精品_国产精品 | 国产亚洲精品精品国产亚洲综合 | 国产精品丝袜黑色高跟鞋 | 激情内射日本一区二区三区 | 亚洲国产精品无码久久久久高潮 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲中文字幕乱码av波多ji | 成人免费视频一区二区 | 5858s亚洲色大成网站www | 国产亚洲欧美日韩亚洲中文色 | 国产精品美女久久久 | 亚洲成av人片天堂网无码】 | 永久免费观看国产裸体美女 | 东京热一精品无码av | 国产午夜精品一区二区三区嫩草 | 宝宝好涨水快流出来免费视频 | 日韩av无码一区二区三区不卡 | 国产成人无码av片在线观看不卡 | 日本肉体xxxx裸交 | 久久综合给合久久狠狠狠97色 | 无码人妻久久一区二区三区不卡 | 国产成人一区二区三区别 | 嫩b人妻精品一区二区三区 | 无码人妻精品一区二区三区不卡 | 成熟妇人a片免费看网站 | 夜夜躁日日躁狠狠久久av | 午夜福利不卡在线视频 | 18黄暴禁片在线观看 | 亚洲人成影院在线观看 | 午夜精品一区二区三区的区别 | 日本熟妇大屁股人妻 | 色 综合 欧美 亚洲 国产 | 99久久久无码国产精品免费 | 国产免费久久精品国产传媒 | 精品无人国产偷自产在线 | 国产成人无码午夜视频在线观看 | 国产精品沙发午睡系列 | 欧美日本精品一区二区三区 | 久久精品国产99精品亚洲 | 亚洲国产精品无码久久久久高潮 | 老司机亚洲精品影院 | 亚洲国产综合无码一区 | 乌克兰少妇xxxx做受 | 国产精品亚洲专区无码不卡 | 色五月丁香五月综合五月 | 色婷婷久久一区二区三区麻豆 | 东北女人啪啪对白 | 中文字幕无码av波多野吉衣 | 精品国偷自产在线视频 | 国产精品99久久精品爆乳 | 成年美女黄网站色大免费全看 | yw尤物av无码国产在线观看 | 性生交大片免费看女人按摩摩 | 国产猛烈高潮尖叫视频免费 | 日本精品久久久久中文字幕 | 精品乱子伦一区二区三区 | 精品久久久久久人妻无码中文字幕 | 中国女人内谢69xxxx | 亚洲色在线无码国产精品不卡 | 亚洲精品鲁一鲁一区二区三区 | 亚洲欧美日韩成人高清在线一区 | 久久99热只有频精品8 | 曰本女人与公拘交酡免费视频 | 玩弄中年熟妇正在播放 | 国产超碰人人爽人人做人人添 | 少女韩国电视剧在线观看完整 | 国产va免费精品观看 | 7777奇米四色成人眼影 | 人妻插b视频一区二区三区 | 麻豆精产国品 | 国产人妻精品一区二区三区不卡 | 少妇性l交大片 | 中文字幕乱妇无码av在线 | 色偷偷人人澡人人爽人人模 | 欧美xxxxx精品 | 亚洲成a人片在线观看无码 | 老子影院午夜伦不卡 | 国产免费无码一区二区视频 | 久久久久人妻一区精品色欧美 | 内射爽无广熟女亚洲 | 国产片av国语在线观看 | 亚洲精品久久久久久久久久久 | 免费无码肉片在线观看 | 激情人妻另类人妻伦 | 成人免费视频在线观看 | 露脸叫床粗话东北少妇 | 色偷偷人人澡人人爽人人模 | 人妻无码久久精品人妻 | 国产精品久免费的黄网站 | 国内综合精品午夜久久资源 | 美女张开腿让人桶 | 亚洲精品中文字幕久久久久 | 最近中文2019字幕第二页 | 国产熟女一区二区三区四区五区 | 一本一道久久综合久久 | 亚洲综合色区中文字幕 | 欧美 日韩 人妻 高清 中文 | 国产无遮挡又黄又爽免费视频 | 乌克兰少妇xxxx做受 | 暴力强奷在线播放无码 | 正在播放老肥熟妇露脸 | 3d动漫精品啪啪一区二区中 | 国产成人无码专区 | 国产成人精品一区二区在线小狼 | a在线观看免费网站大全 | 永久免费观看美女裸体的网站 | 日日天干夜夜狠狠爱 | 人妻aⅴ无码一区二区三区 | 久久久久免费精品国产 | 无码人妻出轨黑人中文字幕 | 人妻与老人中文字幕 | 乌克兰少妇xxxx做受 | 国产特级毛片aaaaaaa高清 | 青草青草久热国产精品 | 国产精品高潮呻吟av久久 | 激情亚洲一区国产精品 | 熟女少妇人妻中文字幕 | 好爽又高潮了毛片免费下载 | 丝袜足控一区二区三区 | 成熟妇人a片免费看网站 | 性欧美疯狂xxxxbbbb | 露脸叫床粗话东北少妇 | 亚洲日本在线电影 | 无码国内精品人妻少妇 | 久久亚洲日韩精品一区二区三区 | 一本久久a久久精品vr综合 | 在线观看欧美一区二区三区 | 色一情一乱一伦一区二区三欧美 | 又大又黄又粗又爽的免费视频 | 少妇的肉体aa片免费 | 最新国产麻豆aⅴ精品无码 | 国产精品怡红院永久免费 | 久久精品视频在线看15 | 一本一道久久综合久久 | 精品欧洲av无码一区二区三区 | 国产亚洲精品久久久久久国模美 | 国产亚洲精品久久久闺蜜 | 伊人久久大香线蕉亚洲 | 欧美丰满老熟妇xxxxx性 | 亚洲の无码国产の无码影院 | 日韩无套无码精品 | 欧美xxxx黑人又粗又长 | 国产av无码专区亚洲a∨毛片 | 永久免费精品精品永久-夜色 | 国产一区二区三区影院 | 人妻中文无码久热丝袜 | 漂亮人妻洗澡被公强 日日躁 | 亚洲成av人片天堂网无码】 | 日韩精品无码一本二本三本色 | 野狼第一精品社区 | 少妇无码av无码专区在线观看 | 少妇太爽了在线观看 | 人妻人人添人妻人人爱 | 爆乳一区二区三区无码 | 宝宝好涨水快流出来免费视频 | 久久久中文久久久无码 | a国产一区二区免费入口 | 一本无码人妻在中文字幕免费 | 欧美老妇与禽交 | 亚洲日韩乱码中文无码蜜桃臀网站 | 老太婆性杂交欧美肥老太 | 国产成人综合在线女婷五月99播放 | 亚洲国产精品美女久久久久 | 永久黄网站色视频免费直播 | 激情人妻另类人妻伦 | 97久久国产亚洲精品超碰热 | 国产两女互慰高潮视频在线观看 | 奇米影视7777久久精品人人爽 | 老熟妇乱子伦牲交视频 | 内射巨臀欧美在线视频 | 国产在线精品一区二区三区直播 | 伦伦影院午夜理论片 | 国产极品美女高潮无套在线观看 | 在线播放亚洲第一字幕 | 亚洲人亚洲人成电影网站色 | 窝窝午夜理论片影院 | 无码人妻黑人中文字幕 | 狠狠色噜噜狠狠狠狠7777米奇 | 激情内射日本一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲午夜福利在线观看 | 无码精品人妻一区二区三区av | 俺去俺来也在线www色官网 | 久久久中文字幕日本无吗 | 久久精品中文字幕一区 | 亚洲日韩av一区二区三区中文 | 成在人线av无码免观看麻豆 | 亚洲欧美中文字幕5发布 | 亚洲爆乳大丰满无码专区 | 久久综合香蕉国产蜜臀av | 日日摸天天摸爽爽狠狠97 | 无码毛片视频一区二区本码 | 美女黄网站人色视频免费国产 | 亚洲男人av香蕉爽爽爽爽 | 亚洲综合伊人久久大杳蕉 | 又黄又爽又色的视频 | 秋霞特色aa大片 | 久久综合九色综合97网 | 国产女主播喷水视频在线观看 | 人妻aⅴ无码一区二区三区 | av在线亚洲欧洲日产一区二区 | 色欲久久久天天天综合网精品 | 女人色极品影院 | 精品久久久无码人妻字幂 | 国内精品久久毛片一区二区 | 久久亚洲精品成人无码 | 亚洲成a人一区二区三区 | 日本www一道久久久免费榴莲 | 午夜福利试看120秒体验区 | 亚洲成av人片在线观看无码不卡 | 成人无码精品1区2区3区免费看 | 纯爱无遮挡h肉动漫在线播放 | 少妇性l交大片欧洲热妇乱xxx | 亚洲精品鲁一鲁一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久亚洲精品成人无码 | 无码成人精品区在线观看 | 国产精品理论片在线观看 | 伊在人天堂亚洲香蕉精品区 | 亚洲色在线无码国产精品不卡 | 日日麻批免费40分钟无码 | 无码人妻出轨黑人中文字幕 | 双乳奶水饱满少妇呻吟 | 午夜福利不卡在线视频 | 亚洲欧美日韩国产精品一区二区 | 男人的天堂2018无码 | 久久精品女人天堂av免费观看 | 日本又色又爽又黄的a片18禁 | 人妻夜夜爽天天爽三区 | 蜜桃视频插满18在线观看 | 伊人久久婷婷五月综合97色 | 九九综合va免费看 | 久激情内射婷内射蜜桃人妖 | 国内精品一区二区三区不卡 | 欧美日韩在线亚洲综合国产人 | 少妇久久久久久人妻无码 | 曰本女人与公拘交酡免费视频 | 欧美日本精品一区二区三区 | 丝袜美腿亚洲一区二区 | 精品一区二区三区无码免费视频 | 国产亚洲精品久久久久久大师 | 99久久久无码国产精品免费 | 国产精品久久久久久久影院 | 精品无码国产一区二区三区av | 国产精品久免费的黄网站 | 国内丰满熟女出轨videos | 日韩亚洲欧美中文高清在线 | 成人欧美一区二区三区黑人免费 | 亚洲国产成人a精品不卡在线 | 亚洲精品国偷拍自产在线麻豆 | 一本久久a久久精品vr综合 | 狠狠色噜噜狠狠狠狠7777米奇 | 日日天日日夜日日摸 | 国产精品对白交换视频 | 精品无码一区二区三区的天堂 | 精品一区二区三区无码免费视频 | 精品偷自拍另类在线观看 | 亚洲综合在线一区二区三区 | 亚洲综合无码一区二区三区 | 曰韩少妇内射免费播放 | 伊人色综合久久天天小片 | 国产成人无码av在线影院 | 午夜免费福利小电影 | 色婷婷av一区二区三区之红樱桃 | 国产97色在线 | 免 | 成人一在线视频日韩国产 | 国产va免费精品观看 | 精品久久8x国产免费观看 | 国产又粗又硬又大爽黄老大爷视 | 成人精品视频一区二区三区尤物 | 免费无码午夜福利片69 | 久久久久久亚洲精品a片成人 | 综合人妻久久一区二区精品 | 特级做a爰片毛片免费69 | 日韩精品一区二区av在线 | 麻豆国产人妻欲求不满谁演的 | 午夜精品一区二区三区在线观看 | 无码国产激情在线观看 | 熟妇女人妻丰满少妇中文字幕 | 内射白嫩少妇超碰 | 国产亚洲精品久久久久久久 | 日日摸天天摸爽爽狠狠97 | 日本熟妇人妻xxxxx人hd | 一本久道久久综合狠狠爱 | 久久久久久久人妻无码中文字幕爆 | 国产绳艺sm调教室论坛 | 人妻少妇精品久久 | 成人无码视频在线观看网站 | 狠狠色丁香久久婷婷综合五月 | 国产成人无码a区在线观看视频app | 97se亚洲精品一区 | 亚洲国产精品一区二区美利坚 | 图片区 小说区 区 亚洲五月 | 欧美日韩一区二区免费视频 | 十八禁视频网站在线观看 | 中文字幕无码视频专区 | 中文字幕无码日韩欧毛 | 奇米影视7777久久精品人人爽 | 一个人免费观看的www视频 | 国产国产精品人在线视 | 国产av久久久久精东av | 婷婷五月综合缴情在线视频 | 熟女俱乐部五十路六十路av | 中国大陆精品视频xxxx | 好男人www社区 | 中文字幕 亚洲精品 第1页 | 久久国产精品萌白酱免费 | 精品欧美一区二区三区久久久 | 色爱情人网站 | 亚洲 高清 成人 动漫 | 久久精品人妻少妇一区二区三区 | 激情人妻另类人妻伦 | 亚洲中文字幕av在天堂 | 亚洲精品国产第一综合99久久 | 日本饥渴人妻欲求不满 | 日韩 欧美 动漫 国产 制服 | 国产精品毛片一区二区 | 亚洲午夜福利在线观看 | 亚洲毛片av日韩av无码 | 伊在人天堂亚洲香蕉精品区 | 两性色午夜免费视频 | 四虎影视成人永久免费观看视频 | 久久精品女人的天堂av | 久久无码专区国产精品s | 久在线观看福利视频 | 日韩少妇内射免费播放 | 无码人妻精品一区二区三区下载 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲国产精华液网站w | 大肉大捧一进一出好爽视频 | 国产亚av手机在线观看 | 免费网站看v片在线18禁无码 | 无套内谢老熟女 | 国产在线aaa片一区二区99 | 乱码午夜-极国产极内射 | 成人综合网亚洲伊人 | 国产又爽又猛又粗的视频a片 | 久久国内精品自在自线 | 国产精品无码成人午夜电影 | 亚无码乱人伦一区二区 | 中文字幕无线码 | 久久国产36精品色熟妇 | 又大又紧又粉嫩18p少妇 | 日日麻批免费40分钟无码 | 台湾无码一区二区 | 亚洲国产高清在线观看视频 | 在线精品国产一区二区三区 | 日本精品人妻无码免费大全 | 亚洲色www成人永久网址 | 成人女人看片免费视频放人 | 国产热a欧美热a在线视频 | 国产凸凹视频一区二区 | 欧美性生交xxxxx久久久 | 国产人妻精品一区二区三区 | 国产两女互慰高潮视频在线观看 | 狠狠色色综合网站 | 中文字幕日韩精品一区二区三区 | 久久精品国产大片免费观看 | 成在人线av无码免费 | 亚洲娇小与黑人巨大交 | 亚洲日韩一区二区三区 | 人妻少妇精品无码专区二区 | 亚洲gv猛男gv无码男同 | 国产麻豆精品一区二区三区v视界 | 国产成人精品一区二区在线小狼 | 国产亚洲tv在线观看 | 亚洲精品午夜无码电影网 | 国产两女互慰高潮视频在线观看 | 男人的天堂av网站 | 无码一区二区三区在线 | 国产熟妇高潮叫床视频播放 | 亚洲成a人一区二区三区 | 国产无遮挡又黄又爽免费视频 | 欧美激情内射喷水高潮 | 狠狠躁日日躁夜夜躁2020 | 99riav国产精品视频 | 亚洲 a v无 码免 费 成 人 a v | 漂亮人妻洗澡被公强 日日躁 | 国产成人精品视频ⅴa片软件竹菊 | 樱花草在线社区www | 久久精品人人做人人综合试看 | 国产无av码在线观看 | 亚洲爆乳无码专区 | 少妇无码av无码专区在线观看 | 99精品久久毛片a片 | 国产色视频一区二区三区 | 2019午夜福利不卡片在线 | 成人欧美一区二区三区 | 久久久久99精品国产片 | 国产精品高潮呻吟av久久 | 亚洲男人av香蕉爽爽爽爽 | 粉嫩少妇内射浓精videos | 国产偷抇久久精品a片69 | 亚洲日韩中文字幕在线播放 | 精品国产青草久久久久福利 | 波多野结衣乳巨码无在线观看 | 欧美三级a做爰在线观看 | 亚洲一区二区三区在线观看网站 | 乱人伦人妻中文字幕无码 | 国产内射爽爽大片视频社区在线 | 国产美女极度色诱视频www | 亚洲人成网站在线播放942 | 精品 日韩 国产 欧美 视频 | 国内老熟妇对白xxxxhd | 国产超级va在线观看视频 | 日本xxxx色视频在线观看免费 | 国产成人无码av片在线观看不卡 | 日本精品久久久久中文字幕 | 野狼第一精品社区 | 波多野结衣高清一区二区三区 | 亚洲理论电影在线观看 | 白嫩日本少妇做爰 | 亚洲 另类 在线 欧美 制服 | 一本久道久久综合狠狠爱 | 一本色道久久综合狠狠躁 | 疯狂三人交性欧美 | 97久久精品无码一区二区 | 精品国产福利一区二区 | 丰满护士巨好爽好大乳 | 国产亚洲精品久久久久久久久动漫 | 国产午夜视频在线观看 | 图片区 小说区 区 亚洲五月 | 天天综合网天天综合色 | 亚洲爆乳无码专区 | 人人妻人人澡人人爽欧美一区九九 | 丰满少妇熟乱xxxxx视频 | 中文字幕人妻丝袜二区 | 丰满妇女强制高潮18xxxx | 鲁大师影院在线观看 | 1000部啪啪未满十八勿入下载 | 一本久道高清无码视频 | 伊人久久婷婷五月综合97色 | a在线观看免费网站大全 | 日产精品高潮呻吟av久久 | 欧洲极品少妇 | 亚洲色大成网站www国产 | 未满小14洗澡无码视频网站 | 久久国语露脸国产精品电影 | 亚洲 激情 小说 另类 欧美 | 玩弄中年熟妇正在播放 | 日本肉体xxxx裸交 | 九一九色国产 | 少妇一晚三次一区二区三区 | 久久综合给久久狠狠97色 | 一本大道伊人av久久综合 | 色诱久久久久综合网ywww | 国产精品福利视频导航 | 午夜理论片yy44880影院 | 高清无码午夜福利视频 | 成 人影片 免费观看 | 国产xxx69麻豆国语对白 | 久久精品人人做人人综合试看 | 国产绳艺sm调教室论坛 | 玩弄中年熟妇正在播放 | 在线视频网站www色 | 国产绳艺sm调教室论坛 | 好男人www社区 | 天堂无码人妻精品一区二区三区 | 国产97人人超碰caoprom | 亚洲阿v天堂在线 | 丰满少妇弄高潮了www | 又大又黄又粗又爽的免费视频 | 国产成人av免费观看 | 一本久久伊人热热精品中文字幕 | 一个人免费观看的www视频 | 97久久国产亚洲精品超碰热 | 国产一区二区三区四区五区加勒比 | 亚洲国产精品一区二区美利坚 | 双乳奶水饱满少妇呻吟 | 成人欧美一区二区三区黑人免费 | 丰满少妇熟乱xxxxx视频 | 中文字幕乱码亚洲无线三区 | 成人影院yy111111在线观看 | 国产免费无码一区二区视频 | 丝袜 中出 制服 人妻 美腿 | 国产成人无码av片在线观看不卡 | 性欧美疯狂xxxxbbbb | 精品国产精品久久一区免费式 | 成年美女黄网站色大免费视频 | 在线观看国产一区二区三区 | 亚洲精品中文字幕久久久久 | 无码av最新清无码专区吞精 | 日本www一道久久久免费榴莲 | 丰满人妻被黑人猛烈进入 | 亚洲经典千人经典日产 | 亚洲色无码一区二区三区 | 夜先锋av资源网站 | 东京无码熟妇人妻av在线网址 | 无码人妻少妇伦在线电影 | 自拍偷自拍亚洲精品10p | 樱花草在线播放免费中文 | 国产人成高清在线视频99最全资源 | 精品久久久久久人妻无码中文字幕 | 无码午夜成人1000部免费视频 | 小泽玛莉亚一区二区视频在线 | 久久婷婷五月综合色国产香蕉 | 3d动漫精品啪啪一区二区中 | 国产口爆吞精在线视频 | 亚洲中文字幕成人无码 | 少妇愉情理伦片bd | 丰满少妇高潮惨叫视频 | 激情综合激情五月俺也去 | 久久亚洲日韩精品一区二区三区 | 久久综合久久自在自线精品自 | 亚洲区欧美区综合区自拍区 | 国产av一区二区三区最新精品 | 国产精品多人p群无码 | 国产精品久久久久无码av色戒 | 亚洲精品久久久久久一区二区 | 在线观看国产午夜福利片 | 亚洲精品美女久久久久久久 | 国产午夜手机精彩视频 | 狠狠色色综合网站 | 日韩欧美成人免费观看 | 亚洲 另类 在线 欧美 制服 | 蜜桃臀无码内射一区二区三区 | 中文毛片无遮挡高清免费 | 高潮毛片无遮挡高清免费 | 中文字幕无码热在线视频 | 色偷偷人人澡人人爽人人模 | 亚洲一区二区三区无码久久 | 无码国内精品人妻少妇 | 水蜜桃色314在线观看 | 狠狠cao日日穞夜夜穞av | 午夜嘿嘿嘿影院 | 久久精品99久久香蕉国产色戒 | 蜜臀aⅴ国产精品久久久国产老师 | 日韩精品成人一区二区三区 | 亚洲男女内射在线播放 | 内射老妇bbwx0c0ck | 国产亚洲美女精品久久久2020 | 无人区乱码一区二区三区 | 中文字幕色婷婷在线视频 | 粉嫩少妇内射浓精videos | 亚洲中文字幕久久无码 | 久久精品无码一区二区三区 | 精品无码成人片一区二区98 | 久久午夜无码鲁丝片秋霞 | 亚洲欧美国产精品专区久久 | 老头边吃奶边弄进去呻吟 | 欧美第一黄网免费网站 | 国产国产精品人在线视 | av香港经典三级级 在线 | 亚洲日韩一区二区三区 | 99久久精品无码一区二区毛片 | 暴力强奷在线播放无码 | 人妻少妇精品久久 | 久久精品99久久香蕉国产色戒 | 装睡被陌生人摸出水好爽 | 亚洲欧美国产精品专区久久 | 高清无码午夜福利视频 | 欧美日韩一区二区综合 | 精品国产成人一区二区三区 | 国产在线无码精品电影网 | 亚洲色大成网站www国产 | 久久综合九色综合欧美狠狠 | 亚洲国产综合无码一区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 色综合视频一区二区三区 | 国产人成高清在线视频99最全资源 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲 另类 在线 欧美 制服 | 天天av天天av天天透 | 亚洲а∨天堂久久精品2021 | 四虎国产精品免费久久 | 欧美亚洲日韩国产人成在线播放 | 一本久久伊人热热精品中文字幕 | 性生交片免费无码看人 | 国产热a欧美热a在线视频 | 欧美熟妇另类久久久久久多毛 | 人妻无码αv中文字幕久久琪琪布 | 5858s亚洲色大成网站www | 丰满护士巨好爽好大乳 | 欧美日韩久久久精品a片 | 亚洲高清偷拍一区二区三区 | 国产精品第一国产精品 | 成人综合网亚洲伊人 | 欧美xxxx黑人又粗又长 | 夜夜影院未满十八勿进 | 日本精品少妇一区二区三区 | 亚洲成a人片在线观看日本 | www国产精品内射老师 | 亚洲欧美精品aaaaaa片 | 一本大道久久东京热无码av | 水蜜桃色314在线观看 | 国产又粗又硬又大爽黄老大爷视 | 国产精品.xx视频.xxtv | 乱码午夜-极国产极内射 | 97夜夜澡人人爽人人喊中国片 | 久久久亚洲欧洲日产国码αv | 丰满护士巨好爽好大乳 | 中文字幕色婷婷在线视频 | 人人妻人人澡人人爽欧美一区 | 欧美变态另类xxxx | 中文字幕av伊人av无码av | 国产 浪潮av性色四虎 | 扒开双腿疯狂进出爽爽爽视频 | 成 人影片 免费观看 | 97夜夜澡人人双人人人喊 | 国产午夜精品一区二区三区嫩草 | 97久久精品无码一区二区 | 国产又粗又硬又大爽黄老大爷视 | 7777奇米四色成人眼影 | 国产日产欧产精品精品app | 国产精品高潮呻吟av久久 | 国产成人一区二区三区在线观看 | 久久久精品成人免费观看 | 亚洲精品国产第一综合99久久 | 国产亚洲精品久久久久久大师 | 激情爆乳一区二区三区 | 亚洲欧美中文字幕5发布 | 乌克兰少妇xxxx做受 | 7777奇米四色成人眼影 | 国产绳艺sm调教室论坛 | 久久伊人色av天堂九九小黄鸭 | 欧美人与禽猛交狂配 | 国内精品人妻无码久久久影院 | 亚洲国产欧美在线成人 | 色噜噜亚洲男人的天堂 | 国产特级毛片aaaaaaa高清 | 亚洲精品一区三区三区在线观看 | 亚洲国产高清在线观看视频 | 亚洲熟熟妇xxxx | 国产精品igao视频网 | 久久精品国产日本波多野结衣 | 欧美freesex黑人又粗又大 | 少妇无码吹潮 | 无套内射视频囯产 | 任你躁国产自任一区二区三区 | 中文字幕精品av一区二区五区 | 欧美成人高清在线播放 | 亚洲狠狠色丁香婷婷综合 | 97夜夜澡人人双人人人喊 | 色偷偷人人澡人人爽人人模 | 国产精品久久久午夜夜伦鲁鲁 | 装睡被陌生人摸出水好爽 | 欧美xxxxx精品 | 国产精品久久久久久久9999 | 狠狠cao日日穞夜夜穞av | 久在线观看福利视频 | 国产成人久久精品流白浆 | 最新版天堂资源中文官网 | 久久久久久久久888 | 免费人成在线观看网站 | 亚洲va中文字幕无码久久不卡 | 人妻熟女一区 | 国产午夜无码视频在线观看 | 欧美黑人乱大交 | 少妇性l交大片欧洲热妇乱xxx | 综合激情五月综合激情五月激情1 | 国产精品久久福利网站 | 免费国产黄网站在线观看 | 国产午夜亚洲精品不卡下载 | 色五月五月丁香亚洲综合网 | 成人无码精品1区2区3区免费看 | 色爱情人网站 | 国产精品无码一区二区桃花视频 | 老头边吃奶边弄进去呻吟 | 扒开双腿疯狂进出爽爽爽视频 | 美女张开腿让人桶 | 人人妻人人澡人人爽欧美精品 | 精品人人妻人人澡人人爽人人 | 日日躁夜夜躁狠狠躁 | 亚洲熟熟妇xxxx | 国产激情无码一区二区app | 任你躁国产自任一区二区三区 | 国产婷婷色一区二区三区在线 | a在线观看免费网站大全 | 欧美日本精品一区二区三区 | 玩弄少妇高潮ⅹxxxyw | 亚洲中文字幕无码中文字在线 | 国产精品亚洲а∨无码播放麻豆 | 伊在人天堂亚洲香蕉精品区 | 久久99精品国产.久久久久 | 久久久www成人免费毛片 | 亚洲色在线无码国产精品不卡 | 亚洲精品午夜国产va久久成人 | 中文亚洲成a人片在线观看 | 亚洲国产欧美国产综合一区 | 99国产欧美久久久精品 | 秋霞特色aa大片 | 久久精品99久久香蕉国产色戒 | 欧美精品免费观看二区 | 小sao货水好多真紧h无码视频 | 欧美午夜特黄aaaaaa片 | 国产人妻精品一区二区三区 | 久久99国产综合精品 | 亚洲精品午夜无码电影网 | 亚洲一区二区三区香蕉 | 久久久久成人精品免费播放动漫 | 亚洲а∨天堂久久精品2021 | 久久久婷婷五月亚洲97号色 | 欧美人与动性行为视频 | av无码不卡在线观看免费 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 免费无码的av片在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 亚洲精品鲁一鲁一区二区三区 | 大肉大捧一进一出视频出来呀 | 国产激情无码一区二区app | 色综合久久久久综合一本到桃花网 | 日本爽爽爽爽爽爽在线观看免 | 亚洲成a人片在线观看无码 | 久久精品女人天堂av免费观看 | 亚洲色在线无码国产精品不卡 | 中文字幕无码免费久久9一区9 | 一个人看的视频www在线 | 国产手机在线αⅴ片无码观看 | 一本久久a久久精品亚洲 | 激情五月综合色婷婷一区二区 | 日韩人妻无码中文字幕视频 | 成人一在线视频日韩国产 | 亲嘴扒胸摸屁股激烈网站 | 巨爆乳无码视频在线观看 | 国产熟妇高潮叫床视频播放 | 男女超爽视频免费播放 | 中文无码精品a∨在线观看不卡 | 中文字幕乱妇无码av在线 | 成年美女黄网站色大免费全看 | 国产人妻人伦精品 | 成人aaa片一区国产精品 | 东京一本一道一二三区 | 1000部啪啪未满十八勿入下载 | 国产精品办公室沙发 | 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美丰满少妇xxxx性 | 丰满少妇女裸体bbw | 欧美日韩在线亚洲综合国产人 | 在线播放无码字幕亚洲 | 鲁鲁鲁爽爽爽在线视频观看 | 久久久婷婷五月亚洲97号色 | 国产乱人偷精品人妻a片 | 亚洲区小说区激情区图片区 | 无码任你躁久久久久久久 | 18精品久久久无码午夜福利 | 色欲综合久久中文字幕网 | 久久久久se色偷偷亚洲精品av | 国内精品人妻无码久久久影院 | 俺去俺来也www色官网 | 麻豆国产丝袜白领秘书在线观看 | 日日麻批免费40分钟无码 | 在线精品国产一区二区三区 | 亚洲国产一区二区三区在线观看 | 天天燥日日燥 | 亚洲欧美国产精品专区久久 | 国产精品理论片在线观看 | 久久精品无码一区二区三区 | 久久人人爽人人爽人人片av高清 | 99久久人妻精品免费二区 | 免费人成网站视频在线观看 | 搡女人真爽免费视频大全 | 午夜理论片yy44880影院 | 国产免费久久久久久无码 | 国产无遮挡吃胸膜奶免费看 | 国产特级毛片aaaaaa高潮流水 | 国产亚洲精品久久久ai换 | 日韩人妻少妇一区二区三区 | 丰满少妇熟乱xxxxx视频 | 红桃av一区二区三区在线无码av | 国产成人无码av片在线观看不卡 | 亚洲娇小与黑人巨大交 | 久久99精品久久久久久 | 特黄特色大片免费播放器图片 | 麻豆人妻少妇精品无码专区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 荫蒂添的好舒服视频囗交 | 久久人妻内射无码一区三区 | 国产精品毛片一区二区 | 性色欲情网站iwww九文堂 | 色五月五月丁香亚洲综合网 | 精品少妇爆乳无码av无码专区 | 女人被男人爽到呻吟的视频 | 国产美女精品一区二区三区 | 红桃av一区二区三区在线无码av | 色综合视频一区二区三区 | 九月婷婷人人澡人人添人人爽 | 日韩欧美中文字幕在线三区 | 性生交片免费无码看人 | 动漫av一区二区在线观看 | 亚洲自偷精品视频自拍 | 成 人 免费观看网站 | 妺妺窝人体色www在线小说 | 亚洲综合久久一区二区 | 男女猛烈xx00免费视频试看 | 久久精品人人做人人综合试看 | 中文无码精品a∨在线观看不卡 | 欧美变态另类xxxx | 国产亚洲精品久久久久久久久动漫 | 国产亚洲精品久久久久久 | 欧美日韩精品 | 国产成人一区二区三区在线观看 | 国产一区二区不卡老阿姨 | 久久精品一区二区三区四区 | 蜜桃av抽搐高潮一区二区 | 中文字幕无码热在线视频 | 大地资源中文第3页 | 九月婷婷人人澡人人添人人爽 | 国产超碰人人爽人人做人人添 | 成年美女黄网站色大免费全看 | 国产绳艺sm调教室论坛 | 99精品无人区乱码1区2区3区 | 又黄又爽又色的视频 | www国产亚洲精品久久久日本 | 日本高清一区免费中文视频 | 小鲜肉自慰网站xnxx | 日本熟妇浓毛 | 国产凸凹视频一区二区 | 日本爽爽爽爽爽爽在线观看免 | 欧美老妇与禽交 | 精品无码一区二区三区爱欲 | 国産精品久久久久久久 | 国产乱人偷精品人妻a片 | 牲交欧美兽交欧美 | 疯狂三人交性欧美 | 九九久久精品国产免费看小说 | 爱做久久久久久 | 亚洲中文字幕在线无码一区二区 | 日本精品高清一区二区 | 国产偷自视频区视频 | 少妇被黑人到高潮喷出白浆 | 日本又色又爽又黄的a片18禁 | 精品国产一区二区三区四区在线看 | 亚洲精品久久久久avwww潮水 | 又大又硬又爽免费视频 | 5858s亚洲色大成网站www | 国产成人无码区免费内射一片色欲 | 55夜色66夜色国产精品视频 | a片在线免费观看 | 在线播放免费人成毛片乱码 | 国内揄拍国内精品人妻 | 秋霞特色aa大片 | 377p欧洲日本亚洲大胆 | 四十如虎的丰满熟妇啪啪 | 日日橹狠狠爱欧美视频 | 亚洲欧美日韩综合久久久 | 人妻互换免费中文字幕 | 国产超碰人人爽人人做人人添 | 丰腴饱满的极品熟妇 | 亚洲乱亚洲乱妇50p | 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲精品www久久久 | √天堂资源地址中文在线 | 少妇厨房愉情理9仑片视频 | 久久久久亚洲精品中文字幕 | 国产高潮视频在线观看 | 永久黄网站色视频免费直播 | 少妇被黑人到高潮喷出白浆 | 久久国产精品精品国产色婷婷 | av人摸人人人澡人人超碰下载 | 亚洲国产一区二区三区在线观看 | 欧美猛少妇色xxxxx | 国产午夜福利亚洲第一 | 2019nv天堂香蕉在线观看 | 51国偷自产一区二区三区 | 天堂一区人妻无码 | 亚洲一区二区三区在线观看网站 | 国产肉丝袜在线观看 | 国产偷国产偷精品高清尤物 | 国产69精品久久久久app下载 | 欧美乱妇无乱码大黄a片 | 内射爽无广熟女亚洲 | 乱码午夜-极国产极内射 | 特黄特色大片免费播放器图片 | 内射爽无广熟女亚洲 | 国产农村妇女高潮大叫 | 久久久久久国产精品无码下载 | 老头边吃奶边弄进去呻吟 | 亚洲国产综合无码一区 | 久久久婷婷五月亚洲97号色 | 亚洲第一无码av无码专区 | 在线看片无码永久免费视频 | 欧美成人高清在线播放 | 九九综合va免费看 | 欧美 日韩 人妻 高清 中文 | 女人高潮内射99精品 | 无码人妻久久一区二区三区不卡 | 午夜福利一区二区三区在线观看 | 蜜桃视频插满18在线观看 | 少妇性l交大片欧洲热妇乱xxx | 色婷婷综合激情综在线播放 | 日日干夜夜干 | 国产精品a成v人在线播放 | 国产在线aaa片一区二区99 | 久久www免费人成人片 | 亚洲精品国偷拍自产在线观看蜜桃 | 午夜无码区在线观看 | 三级4级全黄60分钟 | 高中生自慰www网站 | 欧美国产日产一区二区 | 国产肉丝袜在线观看 | 中文亚洲成a人片在线观看 | 人妻尝试又大又粗久久 | 欧美第一黄网免费网站 | 精品一二三区久久aaa片 | 一区二区三区高清视频一 | 牲欲强的熟妇农村老妇女 | 国产精品自产拍在线观看 | 亚洲欧美综合区丁香五月小说 | 久久综合给合久久狠狠狠97色 | 精品无码av一区二区三区 | 欧美变态另类xxxx | 麻豆国产人妻欲求不满谁演的 | 国产人成高清在线视频99最全资源 | 2019nv天堂香蕉在线观看 | 一本大道久久东京热无码av | 曰韩少妇内射免费播放 | 国产精品亚洲а∨无码播放麻豆 | 久久亚洲日韩精品一区二区三区 | 国产激情无码一区二区app | 97久久精品无码一区二区 | 成在人线av无码免观看麻豆 | 免费网站看v片在线18禁无码 | 中文字幕日产无线码一区 | 成年美女黄网站色大免费视频 | 人妻无码久久精品人妻 | 1000部夫妻午夜免费 | 十八禁真人啪啪免费网站 | 成人av无码一区二区三区 | 久久亚洲国产成人精品性色 | 久久精品国产99久久6动漫 | 天下第一社区视频www日本 | 国产特级毛片aaaaaa高潮流水 | av无码不卡在线观看免费 | 一本加勒比波多野结衣 | 在线播放免费人成毛片乱码 | 国产超碰人人爽人人做人人添 | 无码人妻丰满熟妇区毛片18 | 图片区 小说区 区 亚洲五月 | 中文字幕无线码免费人妻 | 思思久久99热只有频精品66 | 人人妻人人澡人人爽人人精品浪潮 | 青青久在线视频免费观看 | 午夜免费福利小电影 | 国产精品内射视频免费 | 国产欧美亚洲精品a | 99久久久无码国产aaa精品 | 97se亚洲精品一区 | 精品日本一区二区三区在线观看 | 夜夜高潮次次欢爽av女 | 真人与拘做受免费视频 | 99精品国产综合久久久久五月天 | 亚洲男人av天堂午夜在 | 亚洲日韩av一区二区三区四区 | 日本乱偷人妻中文字幕 | 激情亚洲一区国产精品 | 成人无码视频免费播放 | 一本久久伊人热热精品中文字幕 | 荫蒂被男人添的好舒服爽免费视频 | 纯爱无遮挡h肉动漫在线播放 | 国产网红无码精品视频 | 男女下面进入的视频免费午夜 | 丝袜人妻一区二区三区 | 国产va免费精品观看 | 少妇性荡欲午夜性开放视频剧场 | 青草视频在线播放 | 欧美 日韩 亚洲 在线 | 日本乱偷人妻中文字幕 | 亚洲爆乳大丰满无码专区 | 天堂无码人妻精品一区二区三区 | 无码精品人妻一区二区三区av | 熟女少妇人妻中文字幕 | 国产精品国产自线拍免费软件 | 国产免费观看黄av片 | 鲁大师影院在线观看 | 麻豆国产人妻欲求不满 | 国产 精品 自在自线 | 大地资源中文第3页 | 亚洲一区二区三区无码久久 | 麻豆国产丝袜白领秘书在线观看 | 老太婆性杂交欧美肥老太 | 玩弄中年熟妇正在播放 | 青草青草久热国产精品 | 成人一区二区免费视频 | 色综合久久88色综合天天 | 国产69精品久久久久app下载 | 奇米影视7777久久精品人人爽 | 亚洲啪av永久无码精品放毛片 | 日日橹狠狠爱欧美视频 | 性欧美牲交在线视频 | 亚洲s色大片在线观看 | 国产亚洲人成在线播放 | 少妇厨房愉情理9仑片视频 | 国精产品一区二区三区 | 福利一区二区三区视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美日韩一区二区三区自拍 | 精品乱码久久久久久久 | 中文字幕色婷婷在线视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 精品久久综合1区2区3区激情 | 久久综合久久自在自线精品自 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲色大成网站www | 无码国产色欲xxxxx视频 | 丰腴饱满的极品熟妇 | 久久精品国产日本波多野结衣 | 亚洲国产精华液网站w | 丰满肥臀大屁股熟妇激情视频 | 国产一区二区三区日韩精品 | 成人无码精品1区2区3区免费看 | 天堂无码人妻精品一区二区三区 | 国产精品久免费的黄网站 | 人人妻人人澡人人爽欧美一区 | 无码免费一区二区三区 | 亚洲自偷精品视频自拍 | 亚洲精品一区二区三区大桥未久 | 国精品人妻无码一区二区三区蜜柚 | 亚洲中文字幕无码一久久区 | 久久精品丝袜高跟鞋 | 人人澡人人妻人人爽人人蜜桃 | 国产精品-区区久久久狼 | 六月丁香婷婷色狠狠久久 | 国产性生交xxxxx无码 | 国产成人无码一二三区视频 | 国产乱码精品一品二品 | 欧美freesex黑人又粗又大 | 亚洲熟妇色xxxxx欧美老妇 | 99久久精品国产一区二区蜜芽 | 日韩精品久久久肉伦网站 | 中文字幕人成乱码熟女app | 中文字幕中文有码在线 | 日韩精品乱码av一区二区 | 台湾无码一区二区 | 亚洲爆乳无码专区 | www国产精品内射老师 | 久久久久se色偷偷亚洲精品av | 国产女主播喷水视频在线观看 | 精品国产一区二区三区av 性色 | 人人妻人人澡人人爽欧美一区九九 | 国产尤物精品视频 | 国产两女互慰高潮视频在线观看 | 一本加勒比波多野结衣 | 狠狠色丁香久久婷婷综合五月 | 亚洲精品一区二区三区大桥未久 | 又大又黄又粗又爽的免费视频 | 无码纯肉视频在线观看 | 国产片av国语在线观看 | 久久久久av无码免费网 | 亚洲综合在线一区二区三区 | 成人无码精品1区2区3区免费看 | 欧美国产日产一区二区 | 国产精品手机免费 | 日本精品少妇一区二区三区 | 国产又爽又黄又刺激的视频 | 特大黑人娇小亚洲女 | 男人的天堂2018无码 | 无码精品国产va在线观看dvd | 成人精品一区二区三区中文字幕 | 对白脏话肉麻粗话av | 国产免费观看黄av片 | 久久久精品成人免费观看 | 国内少妇偷人精品视频 | 国产精品毛片一区二区 | 精品水蜜桃久久久久久久 | 亚洲国产精品成人久久蜜臀 | 亚洲一区av无码专区在线观看 | 久久国产精品二国产精品 | 成人欧美一区二区三区黑人免费 | 成人精品视频一区二区三区尤物 | 精品无码国产自产拍在线观看蜜 | 欧美变态另类xxxx | 欧美日本免费一区二区三区 | 亚洲の无码国产の无码步美 | 亚洲日本在线电影 | 亚洲综合久久一区二区 | 少妇性l交大片 | 久久久亚洲欧洲日产国码αv | 人人妻人人澡人人爽人人精品浪潮 | 日日碰狠狠丁香久燥 | 婷婷五月综合激情中文字幕 | 中文精品久久久久人妻不卡 | 好男人社区资源 | 国产精品久久久 | 久久亚洲国产成人精品性色 | 色综合久久久无码中文字幕 | 免费观看激色视频网站 | 欧美日本精品一区二区三区 | 久久这里只有精品视频9 | 国产又粗又硬又大爽黄老大爷视 | 奇米影视888欧美在线观看 | 精品日本一区二区三区在线观看 | 最近中文2019字幕第二页 | 欧美激情综合亚洲一二区 | 国産精品久久久久久久 | 亚洲人成无码网www | 国产黄在线观看免费观看不卡 | 少妇人妻大乳在线视频 | 亚洲精品国产a久久久久久 | 国产精华av午夜在线观看 | 国产精品二区一区二区aⅴ污介绍 | 亚洲va中文字幕无码久久不卡 | 久久伊人色av天堂九九小黄鸭 | 国产精品亚洲lv粉色 | 偷窥村妇洗澡毛毛多 | 我要看www免费看插插视频 | 国产精品久久国产精品99 | 国产精品人人爽人人做我的可爱 | 少妇性荡欲午夜性开放视频剧场 | 学生妹亚洲一区二区 | 亚洲区欧美区综合区自拍区 | 亚洲精品一区二区三区四区五区 | 99久久人妻精品免费二区 | 人妻无码久久精品人妻 | 九九在线中文字幕无码 | 成人动漫在线观看 | 日日摸日日碰夜夜爽av | 精品亚洲韩国一区二区三区 | 国产性生大片免费观看性 | 丰满妇女强制高潮18xxxx | 欧美日韩一区二区三区自拍 | 欧美日韩一区二区免费视频 | 青青久在线视频免费观看 | 中文字幕精品av一区二区五区 | 装睡被陌生人摸出水好爽 | 亚洲熟悉妇女xxx妇女av | 人人妻人人澡人人爽欧美精品 | 精品无码国产自产拍在线观看蜜 | 国产av无码专区亚洲awww | 国产精品理论片在线观看 | 欧美老妇交乱视频在线观看 | 国产无遮挡又黄又爽免费视频 | 亚洲成av人在线观看网址 | 双乳奶水饱满少妇呻吟 | 国产香蕉97碰碰久久人人 | 国产麻豆精品一区二区三区v视界 | www国产精品内射老师 | 秋霞成人午夜鲁丝一区二区三区 | 中文字幕人妻丝袜二区 | 动漫av一区二区在线观看 | 国产办公室秘书无码精品99 | 青春草在线视频免费观看 | 亚洲aⅴ无码成人网站国产app | 动漫av网站免费观看 | 亚洲国产精品无码久久久久高潮 | 欧美刺激性大交 | 久久精品成人欧美大片 | 无套内谢的新婚少妇国语播放 | 免费看男女做好爽好硬视频 | 日本免费一区二区三区最新 | 国产av一区二区精品久久凹凸 | 无码一区二区三区在线 | 久久综合狠狠综合久久综合88 | 国产成人av免费观看 | 亚洲 激情 小说 另类 欧美 | 欧美成人午夜精品久久久 | 午夜免费福利小电影 | 伊人久久大香线焦av综合影院 | 国产亚洲精品久久久久久久久动漫 | 精品国产一区av天美传媒 | 欧美熟妇另类久久久久久不卡 | 亚洲欧美精品伊人久久 | 精品国产福利一区二区 | 97久久国产亚洲精品超碰热 | 日韩少妇白浆无码系列 | 精品乱码久久久久久久 | 久久无码人妻影院 | 欧美放荡的少妇 | 国产成人精品优优av | 国产超级va在线观看视频 | 中文字幕乱码人妻二区三区 | 欧美成人免费全部网站 | 国产av人人夜夜澡人人爽麻豆 | 在线成人www免费观看视频 | 久久亚洲精品成人无码 | 男人扒开女人内裤强吻桶进去 | 国产后入清纯学生妹 | 亚洲日韩乱码中文无码蜜桃臀网站 | 日韩人妻系列无码专区 | 少妇高潮喷潮久久久影院 | 国产九九九九九九九a片 | 精品无码国产一区二区三区av | 国产午夜精品一区二区三区嫩草 | 国产无遮挡又黄又爽免费视频 | 少妇一晚三次一区二区三区 | 精品 日韩 国产 欧美 视频 | 国产黑色丝袜在线播放 | 国产亚洲精品久久久久久国模美 | 一本久久a久久精品亚洲 | 亚洲自偷精品视频自拍 | 人人超人人超碰超国产 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品国产a久久久久久 | 国产在线精品一区二区三区直播 | www国产精品内射老师 | 亚洲精品午夜无码电影网 | 内射白嫩少妇超碰 | 日韩在线不卡免费视频一区 | 色五月五月丁香亚洲综合网 | 亚洲一区二区三区播放 | 欧美成人高清在线播放 | 国产精品久久久久久久9999 | 人妻少妇精品无码专区二区 | 日韩av无码中文无码电影 | 日韩人妻少妇一区二区三区 | 久久久久久国产精品无码下载 | 少妇无码一区二区二三区 | 丝袜人妻一区二区三区 | 亚洲成av人影院在线观看 | 日韩人妻系列无码专区 | 午夜时刻免费入口 | 国产精品久久久一区二区三区 | 欧美freesex黑人又粗又大 | 国产口爆吞精在线视频 | 亚洲伊人久久精品影院 | 香蕉久久久久久av成人 | 最近中文2019字幕第二页 | 国产偷自视频区视频 | 未满小14洗澡无码视频网站 | 最近的中文字幕在线看视频 | 色婷婷av一区二区三区之红樱桃 | 国产精品第一国产精品 | 亚洲无人区一区二区三区 | 色五月五月丁香亚洲综合网 | 动漫av一区二区在线观看 | 精品一二三区久久aaa片 | 无码国产色欲xxxxx视频 | 国产三级久久久精品麻豆三级 | 六十路熟妇乱子伦 | 荫蒂被男人添的好舒服爽免费视频 | 色老头在线一区二区三区 | 人妻天天爽夜夜爽一区二区 | 久久精品国产一区二区三区肥胖 | 亚洲日本在线电影 | 亚洲熟女一区二区三区 | 国产欧美亚洲精品a | 久久久久久国产精品无码下载 | 久久久无码中文字幕久... | 国产农村乱对白刺激视频 | 久久久久99精品国产片 | 国产无遮挡又黄又爽免费视频 | 超碰97人人做人人爱少妇 | 少妇无码一区二区二三区 | 久久无码专区国产精品s | 久久久国产精品无码免费专区 | 国产情侣作爱视频免费观看 | 又紧又大又爽精品一区二区 | 狠狠色欧美亚洲狠狠色www | 日日天干夜夜狠狠爱 | 久久久久久a亚洲欧洲av冫 | 无人区乱码一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 亚洲成a人片在线观看无码 | 亚洲熟熟妇xxxx | 久久久久久av无码免费看大片 | 亚洲国产精品成人久久蜜臀 | 亚洲 另类 在线 欧美 制服 | 国产婷婷色一区二区三区在线 | 久久精品国产一区二区三区肥胖 | 亚洲高清偷拍一区二区三区 | 亚洲欧洲日本无在线码 | 精品无码一区二区三区的天堂 | 老太婆性杂交欧美肥老太 | 亚洲人成网站在线播放942 | 97资源共享在线视频 | 98国产精品综合一区二区三区 | 亚洲成a人片在线观看无码3d | 在线 国产 欧美 亚洲 天堂 | 动漫av网站免费观看 | 波多野42部无码喷潮在线 | 欧美三级a做爰在线观看 | 小泽玛莉亚一区二区视频在线 | 国产9 9在线 | 中文 | 日韩av无码一区二区三区 | 亲嘴扒胸摸屁股激烈网站 | 久久久婷婷五月亚洲97号色 | 骚片av蜜桃精品一区 | 久久久久久九九精品久 | 欧美变态另类xxxx | 亚洲精品一区二区三区在线 | 高清国产亚洲精品自在久久 | 久久久精品欧美一区二区免费 | 帮老师解开蕾丝奶罩吸乳网站 | 久久伊人色av天堂九九小黄鸭 | 国产亚洲精品精品国产亚洲综合 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产精品无码mv在线观看 | 亚洲欧洲日本综合aⅴ在线 | 午夜丰满少妇性开放视频 | 久久zyz资源站无码中文动漫 | 无码免费一区二区三区 | 最近免费中文字幕中文高清百度 | 欧洲极品少妇 | 国产亚洲人成在线播放 | 麻豆成人精品国产免费 | 亚洲国产精品美女久久久久 | 俺去俺来也www色官网 | 亚洲日韩精品欧美一区二区 | 2020最新国产自产精品 | 日韩精品乱码av一区二区 | 成人免费视频视频在线观看 免费 | 初尝人妻少妇中文字幕 | 成人性做爰aaa片免费看 | 丰满少妇弄高潮了www | 秋霞成人午夜鲁丝一区二区三区 | 久久综合给合久久狠狠狠97色 | 在线播放无码字幕亚洲 | 久久久久久亚洲精品a片成人 | 网友自拍区视频精品 | 色一情一乱一伦一视频免费看 | 精品久久久久香蕉网 | 国产女主播喷水视频在线观看 | 国产极品视觉盛宴 | 人妻尝试又大又粗久久 | 扒开双腿吃奶呻吟做受视频 | 国产日产欧产精品精品app | 日韩精品久久久肉伦网站 | 国产一区二区三区四区五区加勒比 | 性史性农村dvd毛片 | 国产精华av午夜在线观看 | 色欲综合久久中文字幕网 | 亚洲国产精品无码一区二区三区 | 一本久久伊人热热精品中文字幕 | 一本加勒比波多野结衣 | 18禁黄网站男男禁片免费观看 | 国产精品久久久久久无码 | 一本久道久久综合婷婷五月 | 亚洲va中文字幕无码久久不卡 | 丁香啪啪综合成人亚洲 | 无套内谢的新婚少妇国语播放 | 日韩亚洲欧美精品综合 | 日韩人妻系列无码专区 | 粗大的内捧猛烈进出视频 | 国产明星裸体无码xxxx视频 | 久久亚洲中文字幕精品一区 | 久久精品国产一区二区三区肥胖 | 日韩av无码一区二区三区不卡 | 久久国产精品_国产精品 | 99精品视频在线观看免费 | 熟女体下毛毛黑森林 | 真人与拘做受免费视频 | 亚洲国产综合无码一区 | 色欲久久久天天天综合网精品 | 少妇久久久久久人妻无码 | 少妇久久久久久人妻无码 | 亚洲欧美国产精品专区久久 | 成人影院yy111111在线观看 | 亚洲国产精品一区二区第一页 | av人摸人人人澡人人超碰下载 | 无码乱肉视频免费大全合集 | 天天爽夜夜爽夜夜爽 | 丰满肥臀大屁股熟妇激情视频 | 日日摸天天摸爽爽狠狠97 | 久久亚洲中文字幕精品一区 | 久久人人97超碰a片精品 | 黄网在线观看免费网站 | 97无码免费人妻超级碰碰夜夜 | 免费乱码人妻系列无码专区 | 好爽又高潮了毛片免费下载 | 精品偷拍一区二区三区在线看 | 性史性农村dvd毛片 | 欧美亚洲日韩国产人成在线播放 | 国产办公室秘书无码精品99 | 国产午夜无码视频在线观看 | 亚洲精品午夜无码电影网 | 午夜福利试看120秒体验区 | а√天堂www在线天堂小说 | 18黄暴禁片在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲熟女一区二区三区 | 少妇厨房愉情理9仑片视频 | 男女下面进入的视频免费午夜 | 国产精品人人爽人人做我的可爱 | 在线播放无码字幕亚洲 | 亚洲s色大片在线观看 | 少妇人妻偷人精品无码视频 | 又湿又紧又大又爽a视频国产 | 97色伦图片97综合影院 | 久久五月精品中文字幕 | 亚洲精品综合一区二区三区在线 | 欧美日韩在线亚洲综合国产人 | 国产电影无码午夜在线播放 | av无码电影一区二区三区 | 久久精品国产大片免费观看 | 1000部啪啪未满十八勿入下载 | 精品久久8x国产免费观看 | 波多野结衣aⅴ在线 | 成 人 网 站国产免费观看 | 少妇人妻大乳在线视频 | 无码国内精品人妻少妇 | 国产舌乚八伦偷品w中 | 日日橹狠狠爱欧美视频 | 亚洲大尺度无码无码专区 | 97久久国产亚洲精品超碰热 | 久久久久免费看成人影片 | 国产精品久久国产精品99 | 国产精品怡红院永久免费 | 无码乱肉视频免费大全合集 | 人人妻在人人 | 全球成人中文在线 | 一本精品99久久精品77 | 又湿又紧又大又爽a视频国产 | 精品人妻av区 | 国精产品一品二品国精品69xx | 久久午夜无码鲁丝片秋霞 | 丰满人妻翻云覆雨呻吟视频 | 1000部夫妻午夜免费 | 中文字幕av日韩精品一区二区 | 国产人妻精品午夜福利免费 | 亚洲人交乣女bbw | 麻豆国产97在线 | 欧洲 | 九九久久精品国产免费看小说 | 双乳奶水饱满少妇呻吟 | 亚洲欧美日韩成人高清在线一区 | 一本久久伊人热热精品中文字幕 | 久久综合色之久久综合 | www成人国产高清内射 | 九一九色国产 | 青草视频在线播放 | 亚洲日韩一区二区三区 | 大地资源网第二页免费观看 | 欧美日本日韩 | 色窝窝无码一区二区三区色欲 | 精品 日韩 国产 欧美 视频 | 一区二区三区高清视频一 | 亚洲精品国偷拍自产在线麻豆 | 国语精品一区二区三区 | 性色欲网站人妻丰满中文久久不卡 | 久久 国产 尿 小便 嘘嘘 | 国产亲子乱弄免费视频 | 一个人免费观看的www视频 | 丰满护士巨好爽好大乳 | 精品无码国产自产拍在线观看蜜 | 国产激情精品一区二区三区 | 久久zyz资源站无码中文动漫 | 大屁股大乳丰满人妻 | 18禁黄网站男男禁片免费观看 | 国产精品鲁鲁鲁 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品-区区久久久狼 | 久久精品一区二区三区四区 | 国色天香社区在线视频 | 成人性做爰aaa片免费看不忠 | 国产成人精品优优av | 天天爽夜夜爽夜夜爽 | 久久aⅴ免费观看 | 在线视频网站www色 | 国产一区二区三区影院 | 夫妻免费无码v看片 | 欧美成人高清在线播放 | 桃花色综合影院 | 国产精品亚洲lv粉色 | 无码精品人妻一区二区三区av | 国产无套内射久久久国产 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品鲁鲁鲁 | 女人被男人爽到呻吟的视频 | 久久国产精品_国产精品 | 2019午夜福利不卡片在线 | 成人免费视频视频在线观看 免费 | 中文字幕乱码中文乱码51精品 | 国产欧美亚洲精品a | 亚洲国产精品成人久久蜜臀 | av在线亚洲欧洲日产一区二区 | 婷婷丁香五月天综合东京热 | 大乳丰满人妻中文字幕日本 | 成人试看120秒体验区 | 亚无码乱人伦一区二区 | 国产人妻大战黑人第1集 | 午夜成人1000部免费视频 | 国产超级va在线观看视频 | 18精品久久久无码午夜福利 | 国产亚洲精品久久久ai换 | 狠狠cao日日穞夜夜穞av | 国产在线一区二区三区四区五区 | 99久久人妻精品免费二区 | 日韩在线不卡免费视频一区 | 国产香蕉97碰碰久久人人 | 国产va免费精品观看 | 国产成人无码a区在线观看视频app | 国产精品永久免费视频 | 久久国产自偷自偷免费一区调 | 在线精品亚洲一区二区 | 在线亚洲高清揄拍自拍一品区 | 黑人巨大精品欧美一区二区 | 国内精品九九久久久精品 | 国产美女精品一区二区三区 | 丝袜 中出 制服 人妻 美腿 | 欧洲欧美人成视频在线 | aⅴ在线视频男人的天堂 | 奇米影视7777久久精品 | 黑人巨大精品欧美一区二区 | 男女作爱免费网站 | 婷婷五月综合激情中文字幕 | 精品久久久久久人妻无码中文字幕 | 国产真实伦对白全集 | 无码免费一区二区三区 | 自拍偷自拍亚洲精品10p | 丰满岳乱妇在线观看中字无码 | 又大又紧又粉嫩18p少妇 | 久久久久成人精品免费播放动漫 | 欧美日韩在线亚洲综合国产人 | 熟妇人妻激情偷爽文 | 天天躁日日躁狠狠躁免费麻豆 | 午夜精品一区二区三区在线观看 | 亚洲色大成网站www | 久久精品女人的天堂av | 永久免费观看美女裸体的网站 | 国产成人午夜福利在线播放 | 亚洲成在人网站无码天堂 | 国产黑色丝袜在线播放 | 日日麻批免费40分钟无码 | 偷窥日本少妇撒尿chinese | 77777熟女视频在线观看 а天堂中文在线官网 | 精品水蜜桃久久久久久久 | 国产成人无码专区 | 亚洲毛片av日韩av无码 | 樱花草在线播放免费中文 | 我要看www免费看插插视频 | 色综合久久久无码网中文 | 成人无码精品一区二区三区 |