vivado使用筆記(3)--打拍的含義

1 IOB
爲了保證FPGA輸入輸出接口的時序,一般會要求將輸入管腳首先打一拍再使用,輸出接口也要打一拍再輸出FPGA。將信號打一拍的方法是將信號通過一次寄存器,而且必須在IOB裏面的寄存器中打一拍。因爲,從FPGA的PAD到IOB裏面的寄存器是有專用佈線資源的,而到內部其他寄存器沒有專用的佈線資源。使用IOB裏面的寄存器可以保證每次實現的結果都一樣,使用內部其他寄存器就無法保證每次用的都是同一個寄存器且採用同樣的佈線。同時,爲了使用輸入輸出延遲功能(Input / Output delay),也必須要求信號使用IOB裏面的寄存器。
1.輸入信號爲什麼要寄存
一般來說,在全同步設計中,如果信號來自同一時鐘域,各模塊的輸入不需要寄存。只要滿足建立時間,保持時間的約束,可以保證在時鐘上升沿到來時,輸入信號已經穩定,可以採樣得到正確的值。但是如果模塊需要使用輸入信號的跳變沿(比如幀同步信號),千萬不要直接這樣哦。
always @ (posedge inputs)
begin

end
2.所有信號都需要寄存兩拍嗎
如果這個輸入信號來自異步時鐘域(比如FPGA芯片外部的輸入),必須寄存兩拍。第一拍將輸入信號同步化,同步化後的輸出可能帶來建立/保持時間的衝突,產生亞穩態。需要再寄存一拍,減少(注意是減少)亞穩態帶來的影響。
如果這個輸入信號來自於同一時鐘域且需要用到跳變沿,需要寄存一拍。否則時序報告多半會報clock skew > data delay,造成建立/保持時間的衝突。
總而言之,五條原則:
1.全局時鐘的跳變沿最可靠。
2.來自異步時鐘域的輸入需要寄存一次以同步化,再寄存一次以減少亞穩態帶來的影響。
3.不需要用到跳變沿的來自同一時鐘域的輸入,沒有必要對信號進行寄存。
4.需要用到跳變沿的來自同一時鐘域的輸入,寄存一次即可。
5.需要用到跳變沿的來自不同時鐘域的輸入,需要用到3個觸發器,前兩個用以同步,第3個觸發器的輸出和第2個的輸出經過邏輯門來判斷跳變沿。
給出一個verilog模板:
always @ (posedge Clk) //不對輸入信號進行寄存
begin
if (inputs)
begin

end

end
always @ (posedge Clk) //對輸入信號寄存一拍
begin
inputs_reg <= inputs;
if (inputs_reg == 1’b0 && inputs == 1’b1)
begin

end

end
always @ (posedge Clk) //對輸入信號寄存三拍
begin
inputs_reg1 <= inputs;
inputs_reg2 <= inputs_reg1;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1’b1 && inputs_reg3 == 1’b0)
begin

end

end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章