Verilog/數電 知識點隨記(3)

一、2x1 MUX實現邏輯門(傳輸門可化簡)

  • 各種邏輯門均可以使用三目運算符實現,三目運算符F = X?B:A 對應於2x1 MUX可見下圖。在這裏插入圖片描述

1、與門:F=A?B:0;或門:F=A?1:B;非門:F=A?0:1;傳輸門:F=A:1:0;
2、異或:F=A?(B?0:1):(B?1:0);同或:F=A?(B?1:0):(B?0:1);(傳輸門化簡後僅使用2個2選1MUX),其中inv可替換非門。
參考:加油站| 邏輯電路中的24種表達式(大疆通用硬件崗解析)

二、邊沿檢測

在這裏插入圖片描述

如上圖所示dat爲輸入信號,紅色虛線所標即爲輸入信號上升沿,藍色虛線所標即爲輸入信號下降沿,pose_dge爲上升沿檢測信號,nege_dge即爲下降沿檢測信號。(assign寫法)

1、對應verilog代碼爲:
module u1(
input CLK,
input dat,
input rst_n,
output pose_dge,
output nege_dge
);
reg dat_delay;
always @(posedge CLK)begin
if(!rst_n)
	dat_delay <= 1'b0;
else
	dat_delay <= dat;
end

assign pose_dge = rst_n ? (dat)&(~dat_delay ) : 0;
assign nege_dge = rst_n ? (~dat)&(dat_delay ) : 0;
endmodule
2、時序改寫verilog:
  • 該方法會使得輸出延後一個時鐘
module u2(
input CLK,
input dat,
input rst_n,
output pose_dge,
output nege_dge
);
reg dat_delay,pose_dge,nege_dge;
always @(posedge CLK)begin
if(!rst_n)
	dat_delay <= 1'b0;
else
	dat_delay <= dat;
end

always @(posedge CLK)begin
if(!rst_n)
	pose_dge <= 1'b0;
else
	pose_dge <= (dat)&(~dat_delay );
end

always @(posedge CLK)begin
if(!rst_n)
	nege_dge<= 1'b0;
else
	nege_dge<= (~dat)&(dat_delay );
end
endmodule
3、同時檢測上升下降沿:

不難發現上升沿檢測爲ABA\overline{B}形式,下降沿檢測爲AB\overline{A}B形式,同時檢測即爲異或操作即可 dat^dat_delay。

4、快時鐘域 向慢時鐘域 傳輸脈衝數據 :

由於快時鐘域數據週期短,存在漏檢情況,除了週期展寬之外還可以將數據轉化爲沿,即發送端數據每存在一個脈衝,輸出信號進行一次翻轉,輸出信號跨時鐘域打拍後(需要多打一拍作爲延遲信號),進行邊沿檢測(異或)即可恢復。
參考:加油站| 單比特信號跨時鐘域問題詳解(大疆FPGA邏輯崗A卷)

三、使用卡諾圖進行化簡/形式變化

  • 最小項,最大項,最小項化簡式,最大項化簡式 之間互相轉化時,已知最小項將K圖標1,剩下標0即爲最大項對應項,畫圈化簡即可得到最大項化簡式,最大項轉化最小項反之。
  • 最大項本身對應卡諾圖行列標號是相反的:如A+B+CA+B+\overline{C},對應標號爲 00/1。
  • K圖細節知識參考:卡諾圖化簡法

四、異步FIFO實現

  • 其中FIFO深度計算公式(快時鐘域至慢時鐘域)爲:num=numframe2(1flowffast)num=num_{frame} * 2 *(1-\frac{f_{low}}{f_{fast}})

numframenum_{frame}爲給出單週期中最大發送量,flowf_{low}爲慢時鐘頻率,ffastf_{fast}爲快時鐘頻率。

  • verilog實現中的關鍵點:

1、 二進制轉格雷碼:a^(a>>1);

2、格雷碼轉二進制(假設N位數據):
parameter N=
assign binary[N-1]=grey[N-1];//
generate
genvar i;
for(i=N-2;i>=0;i=i-1)
assign binary[i] = grey[i+1]^binary[i];//
end
endgenerate
參考:verilog實現格雷碼與二進制的轉化
3、加入標誌位(標誌兩個指針之間計數週期差別)後的格雷碼空滿比較(默認讀指針不會超過寫指針):

讀空:格雷碼相同,由於打拍可能出現虛空;
寫滿:格雷碼高兩位相異,其餘位相同,由於打拍可能出現虛滿;

五、靜態時序分析

  • 建立時間需滿足:SetupSlack=TcycleTsu+Tclk2Tclk1TcoTdata>0Setup Slack=T_{cycle}-T_{su}+T_{clk2}-T_{clk1}-T_{co}-T_{data}>0
  • 保持時間需滿足:holdSlack=Tclk1+Tco+TdataTclk2Thold>0hold Slack=T_{clk1}+T_{co}+T_{data}-T_{clk2}-T_{hold}>0
  • FmaxF_{max}可根據建立時間餘量(Setup Slack)爲0時對應的TcycleT_{cycle}得到。

微信公衆號:通信隨筆XIDIAN

在這裏插入圖片描述

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