0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解

FPGA技術(shù)江湖 ? 來源:FPGA技術(shù)江湖 ? 2023-11-07 17:40 ? 次閱讀

204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解(二)

一、SPI協(xié)議

通過閱讀LMK04821數(shù)據(jù)手冊(cè),我們可以從中知道,可以通過SPI協(xié)議對(duì)LMK04821進(jìn)行寄存器的配置工作,進(jìn)而實(shí)現(xiàn)我們?cè)O(shè)計(jì)所需要的功能。

SPI協(xié)議部分,咱們可以用3線,或者4線,在本次設(shè)計(jì)中,使用3線。關(guān)于SPI的時(shí)序部分,這兒就不再贅述,手冊(cè)里面都有詳細(xì)的描述。

ee76fdf4-7d4e-11ee-939d-92fbcf53809c.png

圖1

二、SPI寄存器配置模塊設(shè)計(jì)

ee946c9a-7d4e-11ee-939d-92fbcf53809c.png

圖2

如圖2所示,就是配置LMK04821存器的單元,信號(hào)定義如下:

1、cfg_clk:系統(tǒng)時(shí)鐘;

2、cfg_rst:系統(tǒng)復(fù)位;

3、通過VIO控制的信號(hào),這組信號(hào)存在的目的在于方便檢測(cè)自己配置寄存器的正確性。

vio_cfg_en:配置寄存器使能信號(hào);

vio_cfg_wr:配置寄存器讀寫使能,0寫1讀;

vio_cfg_addr:配置的寄存器地址;

vio_cfg_wdata:寄存器中配置的值;

addr_118_data:預(yù)留信號(hào),模塊中沒有用;

我們?cè)谂渲肔MK04821寄存器時(shí),要驗(yàn)證配置寄存器操作是否正確,就要有寫有讀,在對(duì)應(yīng)的寄存器內(nèi)寫入對(duì)應(yīng)的數(shù)值,然后進(jìn)行讀操作,觀察正確性。本次設(shè)計(jì)是在vivado環(huán)境下進(jìn)行設(shè)計(jì),通過添加VIO的IP核,來控制讀寫操作。同時(shí),添加ILA配合VIO來進(jìn)行讀寫數(shù)據(jù)操作的觀測(cè)。別的開發(fā)環(huán)境下思路一樣。

該組信號(hào)僅在回讀寄存器時(shí)使用,目的是為了驗(yàn)證寄存器讀寫正確性。

eeb25cb4-7d4e-11ee-939d-92fbcf53809c.png

圖3

4、lmk_rst:LMK04821復(fù)位信號(hào),用于復(fù)位LMK04821,直接和LMK04821芯片相連;

5、3線制SPI信號(hào):

lmk_spi_csn:片選;

lmk_spi_sdio:數(shù)據(jù);

lmk_spi_clk:時(shí)鐘;

6、可編程管教:主要和LMK04821內(nèi)部的PLL相關(guān),本次設(shè)計(jì)中默認(rèn)為0;

lmk_clk_sel0 :sel0;

lmk_clk_sel1 :sel1;

三、SPI數(shù)據(jù)buffer定義

在本次設(shè)計(jì)中,SPI配置數(shù)據(jù)buffer,data_reg為24bit,r_w占1bit,箭頭1所指包含W1、W2以及地址位占13bit,具體見SPI時(shí)序圖;箭頭2所指數(shù)據(jù)位8bit。

eed2938a-7d4e-11ee-939d-92fbcf53809c.png

圖4

根據(jù)圖5我們可以知道,要配置LMK04821我們需要配置126個(gè)寄存器,這126個(gè)寄存器來源參見第一章實(shí)戰(zhàn)記錄。

其中,126個(gè)寄存器包含必須要配的寄存器、一些無關(guān)緊要的寄存器、以及功能實(shí)現(xiàn)所需要的寄存器等,有些寄存器需要配置多次。

eed9cbc8-7d4e-11ee-939d-92fbcf53809c.png

圖5

四、SPI時(shí)序?qū)崿F(xiàn)

設(shè)計(jì)中,我們需要按照順序配置126個(gè)寄存器,也就是說SPI要執(zhí)行126次。因此,在代碼實(shí)現(xiàn)過程中,注意寄存器配置的順序,并且保證每個(gè)寄存器都準(zhǔn)確無誤的配置完成,才能進(jìn)行下一個(gè)寄存器的配置。如果在設(shè)計(jì)中,要求LMK004821實(shí)現(xiàn)不同的功能,當(dāng)配置的寄存器個(gè)數(shù)不一致時(shí),在v文件中更改圖6所示的參數(shù)即可。

eef5071c-7d4e-11ee-939d-92fbcf53809c.png

圖6

如下:是LMK04821配置的模塊,讀者可以作為參考。

代碼區(qū)(參考代碼):

//###########################################################################//
// Copyright (C) 2017, JSZX, Co. Ltd. All Rights Reserved.
//###########################################################################//
//-- Project Name :
//-- File Name    :  lmk04821_spi
//-- Description  :
//###########################################################################//
//---------------------------Modification History----------------------------//
//-- Date        By            Ver   Comment
//-- 12/04/2017  hhh           1.0   Create new
//===================================================================
//-- End Revision
//===================================================================
`timescale 1ns / 1ps


module lmk04821_spi(
    input            cfg_clk               , //<=10MHz
    input            cfg_rst               ,
    input            vio_cfg_en            ,
    input            vio_cfg_wr            ,//0,write;1,read;
    input [12:0]     vio_cfg_addr          ,
    input [07:0]     vio_cfg_wdata         ,
    input [07:0]     addr_118_data         ,


    input            r_w                   ,
    input            lmk_cfgen             ,
    output           lmk_rst               ,
    output           lmk_spi_csn           ,
    inout  tri       lmk_spi_sdio          ,
    output           lmk_spi_clk           ,
    output           lmk_clk_sel0          ,
    output           lmk_clk_sel1          ,
    output reg       regdatareadvalid      ,
    output reg [7:0] regdataread           ,
    output reg       lmk_cfgdone = 1'b0
    );
    //parameter defination
    parameter   NUM_REG      = 8'd126      ;//需要配置的寄存器個(gè)數(shù)
    parameter   CFG_DONE_DLY = 32'hF4240   ;//100ms@10Mhz;
    //====================================================================//
    //----------------------internal signals------------------------------//
    //====================================================================//
    reg [00:0]  lmk_cfgen_d0               ;
    reg [00:0]  lmk_cfgen_d1               ;
    reg [00:0]  lmk_cfgen_d2               ;
    reg [00:0]  vio_cfg_en_d0              ;
    reg [00:0]  vio_cfg_en_d1              ;
    reg [00:0]  vio_cfg_en_d2              ;
    reg [07:0]  cnt_clk                    ;// 每個(gè)寄存器需要的時(shí)鐘數(shù)計(jì)數(shù)器
    reg [07:0]  cnt_reg                    ;// 需要配置的寄存器計(jì)數(shù)器,最多255個(gè)!
    reg [23:0]  data_reg                   ;
    reg [00:0]  load_p                     ;
    reg [00:0]  load_p_d0                  ;
    reg [35:0]  mid_data_o                 ;
    reg [35:0]  mid_csn_o                  ;
    reg [00:0]  spi_sdo                    ;
    reg [00:0]  spi_cs_n                   ;
    wire[00:0]  spi_sdi                    ;
    reg [05:0]  sdo_cnt                    ;
//    //====================================================================//
//    //-----------------------------ila debug------------------------------//
//    //====================================================================//
//    //ila_spi
//    ila_spi ila_spi(
//    .clk        ( cfg_clk             ),
//
//    .probe0     ( cnt_clk             ),//8
//    .probe1     ( cnt_reg             ),//8
//    .probe2     ( data_reg            ),//24
//    .probe3     ( load_p              ),//1
//    .probe4     ( sdo_cnt             ),//6
//    .probe5     ( spi_cs_n            ),//1
//    .probe6     ( spi_sdi             ),//1
//    .probe7     ( spi_sdo             ),//1
//    .probe8     ( lmk_cfgen_d1        ) //1
//    );
    //====================================================================//
    //--------------------------main process------------------------------//
    //====================================================================//
    //lmk_clk_sel
    assign      lmk_clk_sel0= 1'b0 ;
    assign      lmk_clk_sel1= 1'b0 ;
    //spi signals;
    assign      lmk_rst     = cfg_rst    ;
    assign      lmk_spi_clk = (spi_cs_n) ? 1'b0 : ~cfg_clk    ;
    assign      lmk_spi_csn = spi_cs_n    ;
    assign      spi_sdi     = lmk_spi_sdio;
    assign      lmk_spi_sdio= (data_reg[23]==1'b1 && sdo_cnt>6'h18)? 1'bz : spi_sdo ;
    //lmk_cfgen_d0/lmk_cfgen_d1/lmk_cfgen_d2/load_p_d0
    always @(posedge cfg_clk or posedge cfg_rst)
    begin
        if(cfg_rst==1'b1)
        begin
            lmk_cfgen_d0 <= 1'b0 ;
            lmk_cfgen_d1 <= 1'b0 ;
            lmk_cfgen_d2 <= 1'b0 ;
            load_p_d0    <= 1'b0 ;
            vio_cfg_en_d0 <= 1'b0 ;
            vio_cfg_en_d1 <= 1'b0 ;
            vio_cfg_en_d2 <= 1'b0 ;
        end
        else
        begin
            lmk_cfgen_d0 <= lmk_cfgen ;
            lmk_cfgen_d1 <= lmk_cfgen_d0 ;
            lmk_cfgen_d2 <= lmk_cfgen_d1 ;
            load_p_d0    <= load_p ;
            vio_cfg_en_d0 <= vio_cfg_en ;
            vio_cfg_en_d1 <= vio_cfg_en_d0 ;
            vio_cfg_en_d2 <= vio_cfg_en_d1 ;
        end
    end
    //load_p/cnt_reg/cnt_clk
    always @(posedge cfg_clk or posedge cfg_rst)
    begin
        if(cfg_rst==1'b1)
        begin
            cnt_reg <= 8'd0  ;
            cnt_clk <= 8'd36 ;
            load_p  <= 1'b0  ;
        end
        else
        begin
            if(lmk_cfgen_d1==1'b1 && lmk_cfgen_d2==1'b0)
            begin
                cnt_clk <= 8'd0 ;
                cnt_reg <= 8'd0  ;
                load_p  <= 1'b0 ;
            end
            else if((cnt_clk==8'd36)&&(cnt_reg6'd18 && sdo_cnt<6'd25)//2-17;18-25;
                    begin
                        regdatareadvalid <= 1'b0 ;
                        regdataread <= {regdataread[6:0],spi_sdi};
                    end
                    else if(sdo_cnt==6'd25)
                    begin
                        regdatareadvalid <= 1'b1 ;
                        regdataread <= {regdataread[6:0],spi_sdi};
                    end
                    else
                    begin
                        regdatareadvalid <= 1'b0 ;
                        regdataread <= regdataread ;
                    end
                end
                else
                begin
                    regdatareadvalid <= 1'b0 ;
                    regdataread <= regdataread ;
                end
            end
            else
            begin
                regdatareadvalid <= 1'b0 ;
                regdataread <= regdataread ;
            end
        end
    end
    //lmk_cfgdone
    always @(posedge cfg_clk or posedge cfg_rst)
    begin
        if(cfg_rst)
        begin
            lmk_cfgdone <= 1'b0 ;
        end
        else
        begin
            if(cnt_reg>=NUM_REG)
            begin
                lmk_cfgdone <= 1'b1 ;
            end
            else
            begin
                lmk_cfgdone <= 1'b0 ;
            end
        end
    end
    //====================================================================//
    //-------------------------------  end  ------------------------------//
    //====================================================================//


endmodule

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598902
  • 芯片
    +關(guān)注

    關(guān)注

    450

    文章

    49636

    瀏覽量

    417144
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1669

    瀏覽量

    90729
  • JESD204B
    +關(guān)注

    關(guān)注

    5

    文章

    72

    瀏覽量

    19067

原文標(biāo)題:往期精選:204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA開發(fā)經(jīng)驗(yàn)分享:基于JESD204BLMK04821芯片項(xiàng)目開發(fā)

    今天給各位大俠帶來一篇項(xiàng)目開發(fā)經(jīng)驗(yàn)分享基于JESD204BLMK04821芯片項(xiàng)目開發(fā),這是本人實(shí)打?qū)嵉捻?xiàng)目開發(fā)經(jīng)驗(yàn),希望可以給有需要的大俠提供一些參考學(xué)習(xí)作用。 以后機(jī)會(huì)多多,慢慢分享一些項(xiàng)目
    發(fā)表于 04-21 09:33 ?3117次閱讀
    FPGA開發(fā)經(jīng)驗(yàn)分享:基于JESD<b class='flag-5'>204B</b>的<b class='flag-5'>LMK04821</b>芯片項(xiàng)目開發(fā)

    A9680采集低頻信號(hào)時(shí) 發(fā)生204B鏈路斷開的問題

    在使用AD9680采樣過程中,采樣率1Gbps,204B為4lane,每個(gè)Lnae的速率為10gbps,使用外部模擬源進(jìn)行正弦波輸入,發(fā)現(xiàn): 1、在50K~200M的正弦波輸入下,通過FPGA(K7
    發(fā)表于 04-09 08:15

    AD9694的204B接口鎖相環(huán)無法鎖定是怎么回事?

    我在配置AD9694的過程中發(fā)現(xiàn)AD9694的采樣率對(duì)應(yīng)的線速率只有在6.75Gbps-13.5Gbps之間時(shí),204b接口的鎖相環(huán)才能鎖定,現(xiàn)在想配置200M采樣率,但是204B接口的鎖相環(huán)無法鎖定。 配置的參數(shù)是:L=2, M=2, F=2。
    發(fā)表于 07-03 06:18

    時(shí)序至關(guān)重要:怎么提高JESD204B時(shí)鐘方案的性能

    中,筆者將談?wù)摱秳?dòng)合成器與清除器的不同系統(tǒng)參考信號(hào)(SYSREF)模式,以及如何用它們來最大限度地提高JESD204B時(shí)鐘方案的性能。 LMK04821系列器件為該話題提供了很好的范例研究素材,因?yàn)樗鼈?/div>
    發(fā)表于 09-06 15:10

    如何采用系統(tǒng)參考模式設(shè)計(jì)JESD204B時(shí)鐘

    LMK04821系列器件為該話題提供了很好的范例研究素材,因?yàn)樗鼈兪歉咝阅艿碾p環(huán)路抖動(dòng)清除器,可在具有器件和SYSREF時(shí)鐘的子類1時(shí)鐘方案里驅(qū)動(dòng)多達(dá)七個(gè)JESD204B轉(zhuǎn)換器或邏輯器件。圖1是典型
    發(fā)表于 11-18 06:36

    FPGA項(xiàng)目開發(fā):204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解(二)

    大俠一起切磋交流。也歡迎進(jìn)群交流,文章末尾有進(jìn)群方式。話不多說,上貨。FPGA項(xiàng)目開發(fā):204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解(二)一、
    發(fā)表于 04-20 16:59

    采用系統(tǒng)參考模式設(shè)計(jì)JESD204B時(shí)鐘

    在本文中,筆者將談?wù)摱秳?dòng)合成器與清除器的不同系統(tǒng)參考信號(hào)(SYSREF)模式,以及如何用它們來最大限度地提高JESD204B時(shí)鐘方案的性能。 LMK04821系列器件為該話題提供了很好的范例研究素材
    發(fā)表于 11-17 10:31 ?3124次閱讀
    采用系統(tǒng)參考模式設(shè)計(jì)JESD<b class='flag-5'>204B</b>時(shí)鐘

    基于JESD204BLMK04821芯片項(xiàng)目詳解

    可以給有需要的大俠提供一些參考學(xué)習(xí)作用。 以后機(jī)會(huì)多多,慢慢分享一些項(xiàng)目開發(fā)以及學(xué)習(xí)方面的內(nèi)容,歡迎各位大俠一起切磋交流。 204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼
    的頭像 發(fā)表于 04-04 17:08 ?1710次閱讀
    基于JESD<b class='flag-5'>204B</b>的<b class='flag-5'>LMK04821</b>芯片項(xiàng)目<b class='flag-5'>詳解</b>

    204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解(二)

    可以給有需要的大俠提供一些參考學(xué)習(xí)作用。 以后機(jī)會(huì)多多,慢慢分享一些項(xiàng)目開發(fā)以及學(xué)習(xí)方面的內(nèi)容,歡迎各位大俠一起切磋交流。也歡迎進(jìn)群交流,文章末尾有進(jìn)群方式。話不多說,上貨。 204B實(shí)戰(zhàn)應(yīng)用-LMK04821
    的頭像 發(fā)表于 10-08 10:18 ?2891次閱讀
    <b class='flag-5'>204B</b><b class='flag-5'>實(shí)戰(zhàn)</b>應(yīng)用-<b class='flag-5'>LMK04821</b><b class='flag-5'>代碼</b><b class='flag-5'>詳解</b>(二)

    LMK04821芯片項(xiàng)目代碼詳解

    可以給有需要的大俠提供一些參考學(xué)習(xí)作用。 以后機(jī)會(huì)多多,慢慢分享一些項(xiàng)目開發(fā)以及學(xué)習(xí)方面的內(nèi)容,歡迎各位大俠一起切磋交流。 204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼
    的頭像 發(fā)表于 10-08 17:51 ?2253次閱讀
    <b class='flag-5'>LMK04821</b>芯片項(xiàng)目<b class='flag-5'>代碼</b><b class='flag-5'>詳解</b>

    采用系統(tǒng)參考模式設(shè)計(jì)JESD 204B時(shí)鐘

    中,筆者將談?wù)摱秳?dòng)合成器與清除器的不同系統(tǒng)參考信號(hào)(SYSREF)模式,以及如何用它們來最大限度地提高JESD204B時(shí)鐘方案的性能。 ? LMK04821系列器件為該話題提供了很好的范例研究素材,因?yàn)?/div>
    的頭像 發(fā)表于 11-24 14:48 ?2562次閱讀
    采用系統(tǒng)參考模式設(shè)計(jì)JESD <b class='flag-5'>204B</b>時(shí)鐘

    時(shí)序至關(guān)重要:采用系統(tǒng)參考模式設(shè)計(jì)JESD 204B時(shí)鐘

    時(shí)序至關(guān)重要:采用系統(tǒng)參考模式設(shè)計(jì)JESD 204B時(shí)鐘
    發(fā)表于 11-04 09:50 ?0次下載
    時(shí)序至關(guān)重要:采用系統(tǒng)參考模式設(shè)計(jì)JESD <b class='flag-5'>204B</b>時(shí)鐘

    基于JESD204BLMK04821芯片項(xiàng)目開發(fā)

    LMK0482X系列是德州儀器推出的高性能時(shí)鐘調(diào)節(jié)芯片系列,該芯片目前有三種,分別為LMK04821、LMK04826以及LMK04828,該系列芯片都支持最新的JESD
    的頭像 發(fā)表于 01-05 11:03 ?901次閱讀

    FPGA項(xiàng)目開發(fā)精選:204B實(shí)戰(zhàn)應(yīng)用-LMK04821代碼詳解

    我們?cè)谂渲?b class='flag-5'>LMK04821寄存器時(shí),要驗(yàn)證配置寄存器操作是否正確,就要有寫有讀,在對(duì)應(yīng)的寄存器內(nèi)寫入對(duì)應(yīng)的數(shù)值,然后進(jìn)行讀操作,觀察正確性。本次設(shè)計(jì)是在vivado環(huán)境下進(jìn)行設(shè)計(jì),通過添加VIO的IP核,來控制讀寫操作。同時(shí),添加ILA配合VIO來進(jìn)行讀寫數(shù)據(jù)操作的觀測(cè)。別的開發(fā)環(huán)境下思路一樣。
    的頭像 發(fā)表于 01-05 14:05 ?1416次閱讀

    采用系統(tǒng)參考模式設(shè)計(jì)JESD 204B時(shí)鐘

      LMK04821系列器件為該話題提供了很好的范例研究素材,因?yàn)樗鼈兪歉咝阅艿碾p環(huán)路抖動(dòng)清除器,可在具有器件和SYSREF時(shí)鐘的子類1時(shí)鐘方案里驅(qū)動(dòng)多達(dá)七個(gè)JESD204B轉(zhuǎn)換器或邏輯器件。圖1是典型JESD204B系統(tǒng)(以
    的頭像 發(fā)表于 04-18 09:25 ?1279次閱讀
    采用系統(tǒng)參考模式設(shè)計(jì)JESD <b class='flag-5'>204B</b>時(shí)鐘