日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

寄存器自动化配置通用案例

發(fā)布時(shí)間:2025/3/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寄存器自动化配置通用案例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  本博文設(shè)計(jì)思想采用明德?lián)P至簡(jiǎn)設(shè)計(jì)法。之前都是通過(guò)一些完整的案例來(lái)分享設(shè)計(jì)心得,而這篇文章以需要配置多個(gè)寄存器的場(chǎng)景講述核心設(shè)計(jì)技巧。

  在設(shè)計(jì)案例時(shí)發(fā)現(xiàn),經(jīng)常會(huì)配置比較復(fù)雜的IP核或驅(qū)動(dòng)一些接口進(jìn)而操作外設(shè)。此時(shí),為了讓外設(shè)或IP核正常工作,需要對(duì)其內(nèi)部多個(gè)寄存器進(jìn)行適當(dāng)配置來(lái)保證在所需模式下正常工作。我們一般先設(shè)計(jì)接口模塊或IP核頂層文件,之后通過(guò)控制模塊按照先后順序自動(dòng)給出所需指令,如讀寫(xiě)等(下面的講述以只有讀寫(xiě)指令為例)。接口模塊或IP核頂層模塊收到指令后完成相應(yīng)的操作。

  第一個(gè)問(wèn)題:如何實(shí)現(xiàn)多個(gè)寄存器且每個(gè)寄存器多個(gè)指令的自動(dòng)化配置?

  我們可以在控制模塊中建立一個(gè)“配置表”,把讀寫(xiě)指令以及相應(yīng)的地址和待寫(xiě)入數(shù)據(jù)保存其中,然后通過(guò)計(jì)數(shù)器進(jìn)行指令掃描。這里需要兩級(jí)計(jì)數(shù)器,第一級(jí)計(jì)數(shù)一個(gè)寄存器的指令數(shù),第二級(jí)計(jì)數(shù)器記錄已經(jīng)操作過(guò)的寄存器個(gè)數(shù)。配置表以always組合邏輯中case語(yǔ)句塊形式給出,使用寄存器計(jì)數(shù)值區(qū)分不同寄存器。區(qū)分出待操作寄存器后根據(jù)操作計(jì)數(shù)器解析出讀寫(xiě)指令。

  第二個(gè)問(wèn)題:當(dāng)控制模塊給出指令時(shí),接口模塊或IP核一定能有時(shí)間響應(yīng)么?

  這是我們?cè)O(shè)計(jì)時(shí)需要深思熟慮的問(wèn)題:如何才能保證給出的指令一定會(huì)被下一模塊有效地響應(yīng)?為了實(shí)現(xiàn)這一目的,可以在控制(配置)模塊和時(shí)序接口模塊或IP核頂層模塊之間放置一個(gè)接口銜接模塊,結(jié)構(gòu)如下:

  根據(jù)上述需求定義銜接模塊功能:在下游模塊準(zhǔn)備好后才讓上游模塊ctrl給出下一命令,否則等待。并完成讀出的有效數(shù)據(jù)送到上游模塊的任務(wù)。很簡(jiǎn)單,下游模塊輸出給控制模塊一個(gè)信號(hào)rdy,當(dāng)它為高電平時(shí)代表當(dāng)前沒(méi)有指令或者上一指令已響應(yīng)完成。控制模塊中指令計(jì)數(shù)器的原有計(jì)數(shù)條件和rdy==1條件邏輯與就完成了上述功能。這里需要特別注意的是:rdy信號(hào)必須以組合邏輯形式給出,否則由于rdy信號(hào)晚一拍輸出,上游模塊會(huì)出現(xiàn)誤認(rèn)情況。核心代碼如下:

控制模塊中:

1 //讀寫(xiě)操作計(jì)數(shù)器 2 always @(posedge clk or negedge rst_n)begin 3 if(rst_n==1'b0)begin 4 rw_cnt <= 0; 5 end 6 else if(add_rw_cnt) begin 7 if(end_rw_cnt) 8 rw_cnt <= 0; 9 else 10 rw_cnt <= rw_cnt + 1; 11 end 12 end 13 14 assign add_rw_cnt = con_flag && rdy; 15 assign end_rw_cnt = add_rw_cnt && rw_cnt==RW_NUM-1; 16 17 //寫(xiě)使能 wr_flag和rd_flag由配置表給出 18 always @(posedge clk or negedge rst_n)begin 19 if(rst_n==1'b0)begin 20 wr_en <= 1'b0; 21 end 22 else if(add_rw_cnt && rw_cnt==0 && wr_flag)begin 23 wr_en <= 1'b1; 24 end 25 else begin 26 wr_en <= 1'b0; 27 end 28 end 29 30 //讀使能 31 always @(posedge clk or negedge rst_n)begin 32 if(rst_n==1'b0)begin 33 rd_en <= 1'b0; 34 end 35 else if(add_rw_cnt && rw_cnt==1 && rd_flag)begin 36 rd_en <= 1'b1; 37 end 38 else begin 39 rd_en <= 1'b0; 40 end 41 end

?銜接模塊中:

1 //空閑輸出 2 always@(*)begin 3 if(rd_en || wr_en || rd_com || wr_com) 4 rdy <= 0; 5 else 6 rdy <= 1; 7 end 8 9 //命令區(qū)間標(biāo)志位 表示正在響應(yīng)該命令 狀態(tài)機(jī)實(shí)現(xiàn)時(shí)序接口模塊情況 10 always@(posedge clk or negedge rst_n)begin 11 if(!rst_n) 12 wr_com <= 0; 13 else if(wr_en) 14 wr_com <= 1; 15 else if(wr_com && stop2idle) 16 wr_com <= 0; 17 end 18 19 always@(posedge clk or negedge rst_n)begin 20 if(!rst_n) 21 rd_com <= 0; 22 else if(rd_en) 23 rd_com <= 1; 24 else if(rd_com && stop2idle) 25 rd_com <= 0; 26 end 27 28 //地址更新 29 always@(posedge clk or negedge rst_n)begin 30 if(!rst_n) 31 addr_tmp <= 0; 32 else if(wr_en || rd_en) 33 addr_tmp <= addr; 34 end

?  到此,寄存器自動(dòng)化配置中兩個(gè)重點(diǎn)問(wèn)題已然解決。本文是我在設(shè)計(jì)攝像頭圖像采集和以太網(wǎng)兩個(gè)案例過(guò)程中總結(jié)所得。本人認(rèn)為這種設(shè)計(jì)思想非常具有通用性,并不僅僅局限于這兩個(gè)案例,因此單獨(dú)提出,以備今后回顧和重用。

?

轉(zhuǎn)載于:https://www.cnblogs.com/moluoqishi/p/7520494.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的寄存器自动化配置通用案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。