主頁 >  其他 > FPGA邏輯設計回顧(4)亞穩態與單位元脈沖信號的CDC處理問題

FPGA邏輯設計回顧(4)亞穩態與單位元脈沖信號的CDC處理問題

2021-01-18 10:20:22 其他

文章目錄

      • 前言
      • 時鐘域以及跨時鐘域的概念
      • 亞穩態的概念
      • 單脈沖信號的跨時鐘域處理
        • 從慢時鐘域到快時鐘域的場景
        • 從快時鐘域到慢時鐘域的場景
      • 參考資料

前言

注:本文首發自易百納技術社區,原文地址:https://www.ebaina.com/articles/140000005331

另外,請近期路過的朋友投個csdn年度博客之星的票,博主需要你的鼓勵,https://bss.csdn.net/m/topic/blog_star2020/detail?username=reborn_lee

本文是上一篇文章FPGA邏輯設計回顧(3)多位元信號上升沿檢測的設計方式與陷阱?的姊妹篇,都是FPGA以及ASIC設計中再重要不過的設計且應用場景十分廣泛,我在以前也分享過類似的設計,但本文在大量參考外文文獻的基礎上,重新立意,重新組織,相信經過時間與設計經驗的積累,會有更清晰更規范的表述,既然是具有分享意義的技術教程,本文分享的RTL設計的原則應是以看得懂、能說明問題為宗旨,不追求復雜隱晦似的“高端大氣”,

時鐘域以及跨時鐘域的概念

通俗地講,時鐘域就是時鐘的管轄范圍,在我的管轄范圍之內的邏輯由我來提供時鐘,這樣一來,跨時鐘域就是資料在不同時鐘域之間的互動!從一個時鐘域到另一個時鐘域,環境(時鐘快慢、相位)可能不同,這樣就可能導致一系列的問題,輕則亞穩態(水土不服生病),重則影子都沒(對方檢測不到,當成不存在)了,

上面的描述主要讓你更通俗地了解時鐘域以及跨時鐘域的意思,但是上不了“臺面”,寫到答卷上要斟酌,一般來說, 邏輯設計中將所有同步元件(例如觸發器和RAM等)使用相同時鐘信號的部分稱為時鐘域

各大FPGA廠家的FPGA編譯工具(這是習慣性叫法)在邏輯綜合以及實作之后都會出一個時序報告,里面就有跨時鐘域的報告,在里面你可以看到你有哪些信號進行了跨時鐘域,如下圖為Vivado工具的報告位置:

時序報告與跨時鐘域路徑

對于這些跨時鐘域的情況,一般我們要在邏輯設計的時候就解決,當然之后也要對其進行約束,一般可以設定為false path等,即讓綜合工具不要機關算盡般去布局布線讓時序滿足要求(這會拖慢編譯時間,當然時序也不會成功),設定為false path或者時鐘組之后,工具默認不對其進行時序分析(因為設計中已經解決了跨時鐘域的問題,這也就是為什么輸跨時鐘域問題是設計解決的,而不是約束解決的),

亞穩態的概念

上面說了如果信號從一個時鐘域到達另一個時鐘域會出現一系列問題,就像人因水土不服一樣,信號也會“生病”,最常見的癥狀就是亞穩態!什么是亞穩態呢?

對于這個問題,我覺得使用一個簡單的示例來解釋會更清晰,如下圖:

兩個不同的時鐘域之間的信號互動

可能的場景可以為在時鐘域A中生成了一個使能信號En_Out去觸發時鐘域B內的演算法,總之時鐘域B內的邏輯需要時鐘域A中生成的使能控制信號,

注意:時鐘域A中的使能信號En_Out有效狀態至少持續一個時鐘周期的時間,否則稱不上脈沖,只能叫做毛刺!

假設時鐘1(clk1)和時鐘2(clk2)的波形關系以及使能信號En_Out的波形圖如下:

跨時鐘域傳輸的波形時序分析

上圖還給出了各個信號之間的時序關系,Tclk-to-Q,DFF1的含義為信號從被clk1采樣到輸出(En_Out是輸出)之間的延遲(器件是有延遲的,觸發器也不例外!)Tsetup,DFF2的含義是觸發器DFF2的建立時間(setup time)要求,被采樣信號不要在時鐘的建立時間范圍內翻轉(變化),才能滿足觸發器的建立時間要求,否則就可能導致亞穩態,

可見,上述時序圖滿足關系
時序關系
即信號En_Out的翻轉時刻不在時鐘clk2的建立時間范圍內,滿足建立時間要求,因此可以正常采樣,不存在亞穩態問題,

為了更清晰的描述,下圖用箭頭和標號給出了上述描述的示意,幫助理解,

正常時序關系

但是問題是不一定都像上述設計那樣幸運,如果二者的時鐘關系如下呢?

例外時序關系

上述的時序引數應該不需要我重復了,可以清楚地看到兩個時鐘之間的上升沿很近,這會導致時鐘clk1下的信號輸出變化時刻出現在時鐘clk2的建立時間范圍內,導致不滿足時鐘clk2的建立時間,而就是這個不滿足建立時間,就會導致亞穩態,

導致這種情況出現的原因可能還不只進行資料互動的時鐘采樣沿過近這一條,還可能下圖的情況:

布線延遲過大導致建立時間不足

也就是說,時鐘二者之間的布線延遲過大(上面的分析未考慮),導致信號En_Out的翻轉處傳輸到時鐘clk2時,進入了DFF2的建立時間范圍,
下面我們總結,如果不滿足建立時間要求導致的亞穩態會導致輸出的結果是怎么樣,如下圖:

亞穩態

  • 作為第一種情況,假設DFF2的輸出值在t=t2的clk2上升沿時進入邏輯高電平, 在這種情況下,雖然我們有建立時間違規,但沒有錯誤,并且觸發器包含有效資料,資料的轉換符合預期,沒有錯誤,

  • 第二種情況:假設在t= t2的clk2上升沿時,DFF2輸出轉為邏輯低電平,在這種情況下,使能信號在B時鐘域沒有成功采樣,然而,這不會是一個問題,因為En_Out來自A時鐘域,它將至少在clk1的一個周期內為高電平, 因此,下一個上升沿clk2在 t = t 3 將正確地采樣En_Out值,對于這個時鐘邊沿,DFF2的時序要求將得到滿足,因為En_Out的變化沒有超過clk2的一個周期,在這種情況下,我們對En_Out的采樣比它實際轉換的時間晚了一個時鐘周期,然而,這并不是一個問題,因為兩個時鐘域的時鐘被假設為獨立的,我們沒有對En_Out信號的到達時間做任何假設,如下圖:

t3處采樣

  • 接下來假設DFF2暫存器進入了亞穩態狀態,在這種情況下,暫存器的輸出變成了介于邏輯高電壓和邏輯低電壓之間的電壓,但這只是暫時的,觸發器最終將退出metastable狀態,進入邏輯高或邏輯低狀態,退出亞穩態所需的時間被稱為resolution Time(Tr)

決斷時間

如上圖的綠色方框部分就是resolution time,定義為處于不穩定狀態的時間或者退出亞穩態的時間,可以翻譯為決斷時間,其實從字面意思上也挺好理解的,決斷即決定輸出是高還是低的時間,一旦過了這個時間,輸出的電平狀態就確定了,

最后,我們對亞穩態進行總結:

在任何設計中使用的每個觸發器(FF)都有一個指定的設定和保持時間,或者說在采樣時鐘邊沿之前和之后,資料輸入在規則上不允許改變的時間,

由于DFF2的輸入資料在建立時間內發生了變化,暫存器的行為將是不可預測的, 由于建立時間的違反,暫存器的輸出電壓可能是代表邏輯高、邏輯低,甚至更糟糕的是介于邏輯高和邏輯低之間的電壓,

這三種情況都有可能發生,而輸入資料在相應的時鐘邊沿實際上是邏輯高電平,同樣,當違反暫存器保持時間時,即En_Out在暫存器保持時間定義的活動時鐘邊沿后的時間視窗內發生變化時,暫存器的輸出值將無法預測,

亞穩態是指觸發器無法在特定時間內達到已知狀態,當觸發器進入亞穩狀態時,您既無法預測元件的輸出電壓電平,也無法預測輸出何時將穩定至正確的電壓電平,在此穩定時間內,觸發器的輸出處于某個中間電壓電平,或者可能振蕩,并且可以級聯無效的輸出電平,以使觸發器在信號路徑的更下方,

既然跨時鐘域傳輸會有可能出現亞穩態,那么如何解決這個問題呢?答案我們接著看下面的小專題,單脈沖信號的跨時鐘域處理,就是為了解決這個問題且不只是解決這一個問題而生,

單脈沖信號的跨時鐘域處理

所謂的單脈沖信號,就是單位元信號,如上一個小標題中的使能控制信號等!對于這類信號的跨時鐘域處理,有兩種場景:

  • 一種是上一個小標題 亞穩態的概念 中講到的從慢時鐘域到快時鐘域的脈沖信號處理,如圖:

慢時鐘域到快時鐘域之間跨時鐘處理

  • 另一種恰好相反,是從快時鐘域到慢時鐘域之間進行跨時鐘域傳輸的脈沖信號處理,

快時鐘域到慢時鐘域之間跨時鐘處理

針對這兩種情況,我們分別討論這兩種情況的跨時鐘域的處理方式!

從慢時鐘域到快時鐘域的場景

為了表述方便,我們約定一個原則吧,將時鐘分為源時鐘和目的時鐘,如下圖:

源時鐘以及目的時鐘

在這個小標題下,源時鐘就是慢時鐘,目的時鐘就是快時鐘,將源時鐘域(慢)內的單位元信號同步到另一個目的時鐘域(快),我們默認單位元脈沖信號在源時鐘域內已經被本地時鐘控制的暫存器同步(例如DFF1),這是因為經過時鐘同步后信號不僅與時鐘保持同步,而且有利于時序優化(時序路徑為兩個時鐘元件之間的資料路徑,使用觸發器同步,無疑將長的資料路徑截短,有利于時序通過),這也是我們推薦的一種設計習慣;

信號從慢時鐘域同步到快時鐘域,在目的時鐘域是一定能采樣到的,只不過可能會出現亞穩態的結果,針對這種場景下出現的亞穩態,我們的處理方式是兩級暫存器同步,也就是通常我們說的使用目的暫存器對源時鐘域的脈沖信號”打兩拍“!

兩級暫存器同步

兩級暫存器同步能夠將最終輸出信號發生亞穩態發生的幾率降低到很低的量級,可以大致地認為“消除了”亞穩態,
可能還需要注意的是:
在一個完整的兩級暫存器同步電路中,信號跨時鐘域應從原時鐘域的原點觸發器傳遞到同步器的第一觸發器,而不需要經過原點觸發器和同步器的第一觸發器之間的任何組合邏輯,如下圖:

跨時鐘域之間不要存在組合邏輯

針對這張圖:

兩級暫存器同步

我們給出RTL語言描述(加入了復位信號):

module dff2(
    input   wire dat    ,
    input   wire aclk   ,
    input   wire bclk   ,
    input   wire rst    ,
    output  reg  bdat2

    );

    reg     adat    ;
    reg     bdat1   ;

    //源時鐘同步輸入脈沖信號,改善時序
    always@(posedge aclk or posedge rst) begin
        if(rst) begin
            adat <= 1'b1    ;
        end
        else begin
            adat <= dat     ;
        end
    end

    //兩級暫存器同步,“消除”亞穩態
    always@(posedge bclk or posedge rst) begin
        if(rst) begin
            bdat1 <= 1'b1   ;
            bdat2 <= 1'b1   ;
        end
        else begin
            bdat1 <= adat   ;
            bdat2 <= bdat1  ;
        end
    end


endmodule

綜合后RTL原理圖:
兩級同步器RTL原理圖

從快時鐘域到慢時鐘域的場景

上個小標題講過了從慢時鐘域到快時鐘域的場景,在那種場景下,目的時鐘域的暫存器一定能采樣到源時鐘域脈沖信號,只是不能保證不會出現亞穩態,因此采樣兩級暫存器同步的方式降低亞穩態發生的概率,

現在這個小標題下,我們來總結從快時鐘域到慢時鐘域的跨時鐘域場景,如下:

約定規則

同步一個單位元信號到頻率較慢的時鐘域,比較麻煩,因為這存在目的時鐘域檢測不到源時鐘域脈沖的情況,如下圖:

目的時鐘檢測不到源時鐘域脈沖信號

上圖可以清晰地看到目的時鐘域在時鐘上升沿采樣不到源時鐘域信號,如何才能讓目的時鐘域能夠檢測到源時鐘域信號呢?

我們首先應該會想到展寬源時鐘域信號,這里的展寬需要犧牲一點東西,例如展寬高電平信號就得犧牲低電平持續的時間,同理展寬低電平,就得犧牲一點高電平的時間,不過這都不是事,因為我們既然要展寬,肯定是展寬我們需要使用的電平信號,

如何做到呢?

這通常需要在每個時鐘域中設定一個暫存器,從目的時鐘域向源時鐘域反饋一種形式,表示檢測到了信號,

不好理解嗎?

下面我們結合時序圖來理解我們的處理方式:

信號展寬處理時序圖

針對這一處理程序,我們使用RTL硬體描述語言描述:

module fast2slow_CDC(
    input   wire    clk1            ,
    input   wire    clk2            ,
    input   wire    rst             ,
    input   wire    pulse_clk1      ,
    output  wire    pulse_syn_clk2  

    );

    reg     pulse_wide_clk2         ;
    reg     reg1_pulse_wide_clk2    ;

    reg     reg1_pulse_wide_clk1    ;
    reg     reg2_pulse_wide_clk1    ;

    //生成脈沖展寬信號
    reg     pulse_wide_clk1         ;
    always@(posedge clk1 or posedge rst) begin
        if(rst) begin
            pulse_wide_clk1 <= 1'b0             ;
        end
        else if(pulse_clk1) begin
            pulse_wide_clk1 <= 1'b1             ;
        end
        else if(reg2_pulse_wide_clk1) begin
            pulse_wide_clk1 <= 1'b0             ;
        end
        else begin
            pulse_wide_clk1 <= pulse_wide_clk1  ;
        end
    end


    //在目的時鐘域內采樣展寬后的信號

    always@(posedge clk2 or posedge rst) begin
        if(rst) begin
            pulse_wide_clk2 <= 1'b0                 ;
            reg1_pulse_wide_clk2 <= 1'b0            ;
        end
        else begin
            pulse_wide_clk2 <= pulse_wide_clk1      ;
            reg1_pulse_wide_clk2 <= pulse_wide_clk2 ;
        end
    end

    //在源時鐘域內同步目的時鐘域內的展寬信號,以生成反饋信號

    always@(posedge clk1 or posedge rst) begin
        if(rst) begin
            reg1_pulse_wide_clk1 <= 1'b0                    ;
            reg2_pulse_wide_clk1 <= 1'b0                    ;
        end
        else begin
            reg1_pulse_wide_clk1 <= reg1_pulse_wide_clk2    ;
            reg2_pulse_wide_clk1 <= reg1_pulse_wide_clk1    ;
        end
    end


    assign  pulse_syn_clk2 = reg1_pulse_wide_clk2;



endmodule

給出RTL原理圖:

RTL原理圖

其實這種方式的效果是不容懷疑的,但是如果你還是不放心,我還是簡單寫個仿真平臺仿真下吧:

仿真結果

可以看到,這種設計很不錯,效果很好,但是它也有自身的局限性:就是不能對過近的脈沖進行完美的同步,如下圖:

同步例外

可見,兩個源時鐘域的脈沖距離太近,導致目的暫存器無法完全同步;
如果距離足夠遠,就可以完美同步:

同步正常

盡管如此,這種方式也不失為一種很好的脈沖同步方式,因為大部分場景都是適用的,好了,這篇文章到此也快告一段落了,花了很久來重新構思,目前已經將近凌晨三點,手也凍僵了,好在自配高端臺式電腦性能不錯,跑Vivado也很快,可以邊實驗邊寫文章,

最后附出仿真平臺:

module cdc_tb(

    );


    reg     clk1            ;
    reg     clk2            ;
    reg     rst             ;
    reg     pulse_clk1      ;
    wire    pulse_syn_clk2  ;

    initial begin
        clk1 = 0;
        forever
        #3 clk1 = ~clk1;
    end

    initial begin
        clk2 = 0;
        forever
        #5.5 clk2 = ~clk2;
    end

    initial begin
        rst = 1;
        pulse_clk1 = 0;
        #15
        rst = 0;
        #15
        @(posedge clk1) begin
           pulse_clk1 = #0.5 1'b1;
        end
        @(posedge clk1) begin
            pulse_clk1 = #0.5 1'b0;
        end
        #3 //距離太近
        #59.5 //距離足夠遠
        @(posedge clk1) begin
            pulse_clk1 = #0.5 1'b1;
        end
        @(posedge clk1) begin
            pulse_clk1 = #0.5 1'b0;
        end        

    end


    fast2slow_CDC u_fast2slow_CDC(
        .clk1        ( clk1        ),
        .clk2        ( clk2        ),
        .rst         ( rst         ),
        .pulse_clk1  ( pulse_clk1  ),
        .pulse_syn_clk2  ( pulse_syn_clk2  )
    );


endmodule

本系列文章還未結束,下一篇來一起處理多位元信號的跨時鐘域問題!

參考資料

Synchronizer techniques for multi-clock domain SoCs & FPGAs

Verifying Clock Domain Crossing

Crossing Clock Domains in an FPGA

Crossing clock domains

Clock-Domain Crossing (CDC)

Get those clock domains in sync

Introduction to Clock Domain Crossing: Double Flopping

Understanding clock domain crossing issues

Clock Domain Crossing (CDC) : Asynchronous communications across boundaries

Clock Domain Crossing

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/250144.html

標籤:其他

上一篇:C++類和結構體 | 類與結構體型別

下一篇:運動影像分割-前景目標提取

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more