1.什么是控制交互信號?
答:控制交互信號用于作為控制指示信號,比如當某個電路模塊有數(shù)據(jù)輸入端口data,但是電路不可能每個時鐘周期都對端口輸入的數(shù)據(jù)做處理,那一般上一級電路會同時給出一個指示信號,比如in_valid,用于表示當前端口data輸入的數(shù)據(jù)是有效的,電路需要對其進行采集或做運算處理。同樣的對于電路模塊輸出數(shù)據(jù)時,也需要給出類似的信號,表明當前輸出端口的數(shù)據(jù)是否有效,例如o_valid信號等。
還有就是比如像FIFO,RAM的讀寫使能信號,用于控制FIFO,RAM是否需要正常進行工作;讀寫控制信號用于指示是讀還是寫操作行為。以及總線的一系列控制信號等,CPU的指令等等,都可以說是控制信號。常用于作為控制模塊產(chǎn)生控制信號的就是狀態(tài)機。
總結(jié)一下,就是沒有控制信號只有運算電路,電路就是塊板磚,我行我素,無任何意義,當我們設(shè)計電路模塊的時候,往往最先需要搞明白的就是本電路模塊的交互控制接口的時序。
2.跨時鐘域時,控制信號從慢時鐘域(時鐘頻率較小)到快時鐘域(時鐘頻率較大)快遞時會存在什么問題呢?
答:如下圖所示,CLK1為慢時鐘域的時鐘,IN_VALID信號由慢時鐘域電路生成,比如用于指示DATA(由CLK1時鐘域電路生成)的有效,或者指示完成一次運算。原本IN_VALID在CLK1時鐘域下只有一個脈沖寬度,表示完成一次運算。但是跨時鐘域傳遞到CLK2(快時鐘域下),CLK2由于頻率較快,多個上升沿都采集到IN_VALID為高,在CLK1時鐘域下就會誤以為完成了多次運算(或者連續(xù)多個DATA為有效的)。
3.上述問題怎么解決呢?
答:如果需要跨時鐘域的控制信號不會出現(xiàn)多個脈沖連續(xù)為高的情況的話,則可以在快時鐘域通過邊沿檢測電路解決。電路如下。將最后的IN_VALID_CLK2作為最后的控制信號。
其波形如下:
4.如果IN_VALID有多個連續(xù)的為高電平的情況怎么辦?
答:如果IN_VALID是用來傳遞數(shù)據(jù)的,用來指示DATA有效的,則可以采用一個異步FIFO將數(shù)據(jù)進行緩存,將IN_VALID作為FIFO的寫使能信號。如若是其他的這種情況則需要按情況來定制電路。
拓展問題
1.脈沖上升沿檢測電路(被檢測的脈沖寬度不小于一個時鐘周期)。
2.脈沖下降沿檢測電路(被檢測的脈沖寬度不小于一個時鐘周期)
3.脈沖邊沿(IN_VALID的下降沿、上升沿時電路都會輸出一個高脈沖)檢測電路(被檢測的脈沖寬度不小于一個時鐘周期)。
下面給出邊沿檢測電路的示例Verilog代碼:
向上滑動閱覽
module EDGE_DEC(
input clk2,
input rst_n,
input in_valid,
output in_valid_edge
);
reg in_valid_d;
reg in_valid_dd;
always @( posedge clk2 or negedge rst_n ) begin
if( !rst_n )
in_valid_d <= 1'b0;
else
in_valid_d <= in_valid;
end
always @( posedge clk2 or negedge rst_n ) begin
if( !rst_n )
in_valid_dd <= 1'b0;
else
in_valid_dd <= in_valid_d;
end
assign in_valid_edge = in_valid_d ^ in_valid_dd;
endmodule
-
RAM
+關(guān)注
關(guān)注
8文章
1365瀏覽量
114476 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
491瀏覽量
27461 -
FIFO存儲
+關(guān)注
關(guān)注
0文章
103瀏覽量
5955 -
CLK
+關(guān)注
關(guān)注
0文章
127瀏覽量
17105 -
控制器
+關(guān)注
關(guān)注
0文章
24瀏覽量
3274
發(fā)布評論請先 登錄
相關(guān)推薦
評論