色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

時序優化之接收端打拍策略探討

冬至子 ? 來源:芯時代青年 ? 作者:尼德蘭的喵 ? 2023-12-04 10:20 ? 次閱讀

這篇文章是探討對接收端進行時序優化(即ready打拍,或稱backward打拍)的方式。

ready本身是不攜帶任何隨路信息的,但如果因此就覺得可以簡單把ready打一拍來進行時序優化那就大錯特錯了,要不然可以試一試看看錯的多離譜。

無論valid打拍還是ready打拍,都需要將控制信號(valie或ready)和傳輸信息(data)進行寄存,因此二者的資源消耗是沒有明顯區別的。因此我們還是要借助兩個寄存器

module dffse #(
	parameter WIDTH = 1
)(
	input 			clk,
	input 			rst_n,
	input  	[WIDTH -1:0]	d,
	input			en,
	output reg[WIDTH -1:0]	q
);
always @(posedge clk or negedge rst_n)begin
	if(~rst_n)  q <={WIDTH{1'b1}};
	else if(en) q <= d;
end
endmodule

module dffe#(
	parameter WIDTH = 1
)(
	input 			clk,
	input  	[WIDTH -1:0]	d,
	input	    		en,
	output reg[WIDTH -1:0]	q
);
always @(posedge clk)begin
	if(en) q <= d;
end
endmodule

這次用了dffse寄存器,說白了就是復位值為全1寄存器,沒什么稀奇的。

那么對于ready打拍,關鍵點顯然就是data_in_ready的控制邏輯,不過這個邏輯不是太容易理解,所以咱們鏡像著data_in_valid的打拍來看。還記得fw_pipe中對data_in_valid打拍的方法么:

wire in_valid_en = data_in_ready;
wire in_valid_d  = data_in_valid;
wire in_valid_q;
dffre #(.WIDTH(1))
u_in_valid_dffre(
	.clk(clk),
	.rst_n(rst_n),
	.d(in_valid_d),
	.en(in_valid_en),
	.q(in_valid_q)
);
assign data_in_ready  = data_out_ready || (~in_valid_q);
assign data_out_valid = in_valid_q;

那咱們鏡像的來做bw_pipe中data_in_ready的邏輯應該是:

wire out_ready_en = data_out_valid;
wire out_ready_d  = data_out_ready;
wire out_ready_q;
dffse #(.WIDTH(1))
u_out_ready_dffse(
	.clk(clk),
	.rst_n(rst_n),
	.d(out_ready_d),
	.en(out_ready_en),
	.q(out_ready_q)
);
assign data_out_valid = data_in_valid || (~out_ready_q);
assign data_in_ready = out_ready_q;

深深地感受下代碼的對稱之美!那么在fw_pipe中u_in_valid_dffre寄存的狀態是發送端是否有發送數據的請求,那么對應的bw_pipe中u_out_ready_dffse寄存的狀態是什么呢?自然是接收端是否有接收數據的能力,因此這個寄存器的復位值應該為1(就算上來下游就堵住了,pipe里至少能緩存一拍數)。

因此當該寄存器值為1時表明pipe內是空的,為0時表示pipe內有一筆數,所以也就構成了data_out_valid的一部分邏輯。

data_out_valid雖然是我們通過鏡像對稱得到的,但是也要理解所以然。當out_ready_q == 0時表明pipe中有一筆數那么data_out_valid必然為1,此外無論out_ready_q什么狀態只要data_in_valid == 1那么也表明向下游傳輸的數據已經準備好了,data_out_valid也需要為1(對ready打拍,那么必然valid是存在bypass通路的。你想想在對valid進行打拍時,ready是不是有一條bypass通路)。

而out_ready_d = data_out_ready就需要感受一下了,如果這拍向下游握手成功了那么無論如何下一拍bw_pipe也是空的了。你結合data_out的邏輯一起品一品:

wire 		 data_en = data_in_valid && data_in_ready;
wire [WIDTH -1:0]data_d  = data_in;
wire [WIDTH -1:0]data_q;
dffe #(.WIDTH(WIDTH))
u_in_data_dffe(
	.clk(clk),
	.d(data_d),
	.en(data_en),
	.q(data_q)
);

assign data_out       = out_ready_q ? data_in : data_q;

如果當拍out_ready_q == 0(bw_pipe內有數)則取走data_q,否則直接通過bypass通路取走data_in。那是不是意味著,只有對下游握手了,下一拍的bw_pipe中就一定沒有數了!

問題解決啦,最后的代碼就完整的出來了呀:

module bw_pipe #(
	parameter WIDTH = 8)
(
	input clk,
	input rst_n,
	
	input [WIDTH -1:0]data_in,
	input 		  data_in_valid,
	output		  data_in_ready,
	
	output[WIDTH -1:0]data_out,
	output		  data_out_valid,
	input		  data_out_ready
);

wire out_ready_en = data_out_valid;
wire out_ready_d  = data_out_ready;
wire out_ready_q;
dffse #(.WIDTH(1))
u_out_ready_dffse(
	.clk(clk),
	.rst_n(rst_n),
	.d(out_ready_d),
	.en(out_ready_en),
	.q(out_ready_q)
);

wire 		 data_en = data_in_valid && data_in_ready;
wire [WIDTH -1:0]data_d  = data_in;
wire [WIDTH -1:0]data_q;
dffe #(.WIDTH(WIDTH))
u_in_data_dffe(
	.clk(clk),
	.d(data_d),
	.en(data_en),
	.q(data_q)
);

assign data_out_valid = data_in_valid || (~out_ready_q);
assign data_out       = out_ready_q ? data_in : data_q;
assign data_in_ready  = out_ready_q;

endmodule

當然了我們會發現一個特性,bw_pipe不像fw_pipe那樣會至少對數據打一拍,bw_pipe在通路暢通時data_in_valid/data_in是直接bypass到下游的,而通路阻塞時才會將數據在bw_pipe中寄存。

最后仍然借助auto_testbench驗證一下代碼:

圖片

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120235
  • 時序優化
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1448
收藏 人收藏

    評論

    相關推薦

    時序優化發送打拍策略解析

    打拍是進行時需優化最常用和最簡單的方式之一,不過握手型協議的打拍和通常的使能型協議是不同的。
    的頭像 發表于 12-04 10:23 ?738次閱讀
    <b class='flag-5'>時序</b><b class='flag-5'>優化</b><b class='flag-5'>之</b>發送<b class='flag-5'>端</b><b class='flag-5'>打拍</b><b class='flag-5'>策略</b>解析

    觸摸屏知識及軟件優化策略

    觸摸屏知識及軟件優化策略
    發表于 08-20 10:04

    【InTime試用體驗】使用簡易、策略選擇精確度高的一款時序優化軟件

    解決FPGA時序優化問題的軟件。InTime 內嵌學習引擎,可以智能分析FPGA設計,為綜合和布局布線提供更優的策略組合。同時,根據對器件、設計和工具特點的了解,以及獨有的算法,InTime 可以生成最能滿足
    發表于 07-05 11:00

    幾個FPGA時序優化簡單技巧

    特定模塊劃分到不同的時鐘域里;但異步時鐘域不宜太多。綜合時使用retiming,duplication;physical synthesis優化,現在的綜合器這方面已經足夠聰明了。預算允許可使用速度更快的芯片;這個也許是實現 “不修改RTL又時序收斂” 的最可能的方式。
    發表于 06-07 17:55

    靜態時序優化策略有哪些?

    變則通,通則久。事物都有其運行的規律,把握好規律,就能更好的實現人的目的。在數字后端設計中,時序優化一直是關鍵問題,尤其追求高頻高性能的設計中,時許問題常常貫穿始終。大大小小二十幾個項目模塊后端工作
    發表于 12-10 07:37

    怎樣去設計SpaeeWire Codec接收時序

    SpaceWire Codec接收是什么?怎樣去設計SpaeeWire Codec接收時序?時鐘域可劃分為哪幾個模塊?如何實現多時鐘域
    發表于 04-08 07:10

    FPGA設計應用及優化策略有哪些?

    EDA技術具有什么特征?FPGA是什么原理?FPGA設計應用及優化策略基于VHDL的FPGA系統行為級設計
    發表于 04-15 06:33

    你知道RTL時序優化迭代的技巧有哪些嗎

    專項優化時序與門控精度的trade off。我優化的模塊的一個典型的特點是低功耗要求很高,幾乎所有Always塊都會有綜合自動生成的時鐘門控。由于時鐘樹長差異和Setup要求更嚴,時鐘門控的E
    發表于 06-23 15:43

    基于FPGA時序優化設計

    現有的工具和技術可幫助您有效地實現時序性能目標。當您的FPGA 設計無法滿足時序性能目標時,其原因可能并不明顯。解決方案不僅取決于FPGA 實現工具為滿足時序要求而優化設計的能力,還取
    發表于 11-18 04:32 ?3310次閱讀

    FPGA設計中層次結構設計和復位策略影響著FPGA的時序

    FPGA設計中,層次結構設計和復位策略影響著FPGA的時序。在高速設計時,合理的層次結構設計與正確的復位策略可以優化時序,提高運行頻率。
    發表于 02-15 15:15 ?1005次閱讀

    時序分析的優化策略詳細說明

    本文檔的主要內容詳細介紹的是FPGA的時序分析的優化策略詳細說明。
    發表于 01-14 16:03 ?17次下載
    <b class='flag-5'>時序</b>分析的<b class='flag-5'>優化</b><b class='flag-5'>策略</b>詳細說明

    時序分析的優化策略詳細說明

    本文檔的主要內容詳細介紹的是FPGA的時序分析的優化策略詳細說明。
    發表于 01-14 16:03 ?19次下載
    <b class='flag-5'>時序</b>分析的<b class='flag-5'>優化</b><b class='flag-5'>策略</b>詳細說明

    如何降低面積和功耗?如何優化電路時序?

    1、如何降低功耗? (1) 優化方向: 組合邏輯+時序邏輯+存儲 (2) 組合邏輯: ??(a)通過算法優化的方式減少門電路 ??(b)模塊復用、資源共享 (3) 時序邏輯: ??(a
    發表于 02-11 15:30 ?2次下載
    如何降低面積和功耗?如何<b class='flag-5'>優化</b>電路<b class='flag-5'>時序</b>?

    IC設計的特殊信號打拍方式及RR輪詢調度

    Axi總線打拍模塊通常會采用特殊設計的IP模塊,將所有axi總線信號互聯到axi打拍ip上,起到一個橋接的作用,能夠解決時序問題。
    發表于 10-03 15:26 ?1365次閱讀

    在valid ready協議中對ready進行timing修復打拍的方法

    首先將把目標設計想象成一個黑盒子,如圖1所示,我們的目標是將READY_DOWN通過打拍的方法獲得時序優化
    的頭像 發表于 06-27 16:20 ?1331次閱讀
    在valid ready協議中對ready進行timing修復<b class='flag-5'>打拍</b>的方法
    主站蜘蛛池模板: 芳草地社区在线视频| 精品国内自产拍在线观看视频| 中国老太60old mantv| 一本道亚洲区免费观看| 91精品国产免费入口| 在线精彩视频在线观看免费| 69SEX久久精品国产麻豆| 26uuu老色哥| 亚洲精品久久久992KVTV| 亚洲国产成人久久精品影视| 一区一区三区产品| 99精品视频在线观看| 岛国片在线免费观看| 第一次玩老妇真实经历| 好男人在线观看视频观看高清视频免费 | 国产永久免费高清在线观看| 国产在线精彩亚洲久久| 久久这里的只有是精品23| 免费女性裸身照无遮挡网站| 日韩中文无线码在线视频| 亚洲xxxx动漫| GAY东北澡堂激情2022| 国产精品久久久久影院| 国产偷抇久久精品A片蜜臀AV| 久久噜国产精品拍拍拍拍| 乳液全集电影在线观看| 亚洲精品天堂在线| 9277在线观看免费高清完整版| 国产精品亚洲二线在线播放| 老人洗澡自拍xxx互摸| 色偷偷777| 99热免费精品店| 久久精品综合电影| 无止侵犯高H1V3无止侵犯| 99精品国产AV一区二区麻豆| 国产精品毛片AV久久97| 欧美日韩精品一区二区三区四区| 亚洲精品成人A8198A片漫画| 国产69精品9999XXXX| 韩国g奶空姐| 午夜国产在线观看|