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

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

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

3天內不再提示

Verilog設計中如何匹配變量的位寬

C29F_xilinx_inc ? 來源:賽靈思 ? 作者:賽靈思 ? 2022-02-16 16:21 ? 次閱讀

1、位寬太小

FPGA設計中,我們經常需要用寄存器來寄存某些“數量類”的變量,比如FIFO的深度啦、或者計數器的最大值啦;又或者輸入輸出信號也需要將位寬用parameter參數化以便更好的調用等。

舉個簡單的小例子:系統頻率100M(周期10ns),假設需要要求設計一個計時器計時100ns,那么需要計數次數為:100ns/10ns - 1 = 9,9這個數需要用多大位寬的寄存器表示呢?很簡單,以2為底取對數就行,答案是最少4位寬。為了方便地復用這個模塊,我們把計時時間參數化并放到模塊外,如下:

module counter #(
parameter TIME = 'd10 //計時時間,單位10ns
)(
input clk_100M ,
input rst
);
reg [3:0] cnt; //計數器

//計時器
always@(posedge clk_100M)begin
if(rst)
cnt else if(cnt == TIME - 1)
cnt else
cnt end

endmodule

假設我們下次設計需要一個計時器的話,直接調用上面的counter模塊并把TIME這個參數改成自己需要的參數就可以,這樣做理論上是可以的,只是會有一個致命的隱患。不妨再假設:我現在調用了counter模塊,并將TIME設置為20,以實現計時200ns的功能。當TIME = 20這個參數傳遞到被例化模塊后,可以發現由于cnt寄存器的位寬僅為4位,其能表示的最大值為4'b1111(即十進制下的數字15),每次其到達15后就溢出為0重新開始了,也就是說這個200ns的計時器實際上根本就計數不到200ns。

這個隱患發生的原因就是在設計寄存器cnt時的位寬只有4位,無法滿足“大量時間的計時任務”。

2、自己寫一個Function

現在來想一下如何解決上述的位寬不匹配的問題。將寄存器的位寬設計為一個較大的數值(如固定為32bit)不失為一個不錯的方法,但是如果將這條規則適用到每一個寄存器,則勢必造成大量的資源浪費(你資源多你隨便玩)。而且該方法指標不治本,我們需要做的是,這個寄存器應該有多大就設計多大的位寬(有多大的腳就穿多大的鞋,鞋子太大一定能穿,但你腳不一定舒服)。

前面說過寄存器的位寬的計算方法:以2為底取對數。所以我們只需要設計一個Function(可綜合),來實現此項功能即可。剛好在Xilinx的許多源碼都出現了這個簡單的Function,我們直接拿過來用就是的:

// function 實現
function integer clogb2 (input integer bit_depth);
begin
for(clogb2=0; bit_depth>0; clogb2=clogb2+1)
bit_depth = bit_depth >> 1;
end
endfunction

// 使用案例
localparam integer C_TRANSACTIONS_NUM = clogb2(C_M_AXI_BURST_LEN-1);
reg [C_TRANSACTIONS_NUM : 0] write_index;
reg [C_TRANSACTIONS_NUM : 0] read_index;

上面的代碼就是定義了一個求位寬的function,用其求得某類寄存器的位寬,然后再對寄存器賦值時就直接使用求得的位寬來賦值,這樣復用起來就比較方便了。

我們將這個代碼放到上面的計數器模塊中后,不管需要計數多大時間,都能計算出相匹配的寄存器位寬了。

3、無法在輸入輸出端口使用

自己寫Function實現對2取對數的功能也有一定的局限性:無法對輸入輸出端口信號使用該Function。Function是定義在模塊內部,所以若輸入輸出端口也需要根據輸入的parameter參數來以2為底取對數的話此種方法就無能為力了。比如:設計一個同步FIFO,輸出信號fifo_cnt(計數器)是對寫入FIFO的數據進行計數的寄存器,其最大值即為FIFO的深度DATA_DEPTH ,所以fifo_cnt的位寬就需要在定義模塊輸入輸出端口時確定,顯然這無法使用自己構造的 cblogb2 Function。那該當如何?
//計數器法實現同步FIFO

module sync_fifo_cnt
#(
parameter DATA_WIDTH = 'd8 , //FIFO位寬
parameter DATA_DEPTH = 'd16 //FIFO深度
)
(
input clk , //系統時鐘
input rst_n , //低電平有效的復位信號
input [DATA_WIDTH-1:0] data_in , //寫入的數據
input rd_en , //讀使能信號,高電平有效
input wr_en , //寫使能信號,高電平有效

output reg [DATA_WIDTH-1:0] data_out, //輸出的數據
output empty , //空標志,高電平表示當前FIFO已被寫滿
output full , //滿標志,高電平表示當前FIFO已被讀空
output reg [$clog2(DATA_DEPTH) : 0] fifo_cnt //$clog2是以2為底取對數
);

//省略部分代碼

endmodule

4、$clog2系統函數

其實辦法也有,在上面的代碼中也展示出來了,就是使用 $clog2 這個Verilog的系統函數。$clog2是Verilog--2005標準新增的一個系統函數,功能就是對輸入整數實現以2為底取對數,其結果向上取整(如5.5取6)。有一點需要說明的是,目前Vivado2017以上的版本都是支持這個系統函數的(Quartus II不清楚 )。但是百度搜索這條結果的時候有兩條結論是錯誤的:

1、Vivado不支持$clog2系統函數

2、$clog2系統函數在Vivado實現的是以e為底取對數,而不是2

接下來寫個簡單的模塊驗證下Vivado對$clog2系統函數的支持如何

`timescale 1ns / 1ps

module clog2_test#(
parameter integer num = 325
)
(
input clk,
input rst,
output reg [$clog2(num) - 1:0] result
);

always @(posedge clk)begin
if(rst)
result else
result end

endmodule

我們直接看reg result的位寬綜合出來到底是多少。如果以e為底向上取整,則位寬應是6;如果以2為底向上取整,則位寬應是9。Vivado綜合的原理圖局部如下:

Verilog設計中如何匹配變量的位寬

可以看到最后編譯出的結果是9位的,也就說明Vivado是支持這個系統函數的(版本:2019.2)。

其他變量的位寬設計同理。

審核編輯:湯梓紅

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

    關注

    31

    文章

    5355

    瀏覽量

    120517
  • 計數器
    +關注

    關注

    32

    文章

    2256

    瀏覽量

    94641
  • 參數
    +關注

    關注

    11

    文章

    1838

    瀏覽量

    32261
收藏 人收藏

    評論

    相關推薦

    Verilog 與 ASIC 設計的關系 Verilog 代碼優化技巧

    Verilog與ASIC設計的關系 Verilog作為一種硬件描述語言(HDL),在ASIC設計扮演著至關重要的角色。ASIC(Application Specific Integrated
    的頭像 發表于 12-17 09:52 ?139次閱讀

    Verilog 測試平臺設計方法 Verilog FPGA開發指南

    Verilog測試平臺設計方法是Verilog FPGA開發的重要環節,它用于驗證Verilog設計的正確性和性能。以下是一個詳細的Verilog
    的頭像 發表于 12-17 09:50 ?233次閱讀

    圖紙模板的文本變量

    “ ?文本變量和系統自帶的內置變量,可以幫助工程師靈活、高效地配置標題欄的信息,而不用擔心模板的文字對象被意外修改。 ? ” 文本變量
    的頭像 發表于 11-13 18:21 ?182次閱讀
    圖紙模板<b class='flag-5'>中</b>的文本<b class='flag-5'>變量</b>

    Verilog語法運算符的用法

    verilog語法中使用以下兩個運算符可以簡化我們的選擇代碼。
    的頭像 發表于 10-25 15:17 ?850次閱讀
    <b class='flag-5'>Verilog</b>語法<b class='flag-5'>中</b>運算符的用法

    Verilog表達式的確定規則

    很多時候,Verilog中表達式的都是被隱式確定的,即使你自己設計了,它也是根據規則先確定位
    的頭像 發表于 10-22 15:41 ?518次閱讀
    <b class='flag-5'>Verilog</b>表達式的<b class='flag-5'>位</b><b class='flag-5'>寬</b>確定規則

    FPGA Verilog HDL有什么奇技巧?

    今天給大俠帶來在FPAG技術交流群里平時討論的問題答疑合集(九),以后還會多推出本系列,話不多說,上貨。 交流問題(一) Q:Verilog 有什么奇技淫巧? A:在 Verilog ,以下這些
    發表于 09-12 19:10

    西門子博途:通過片斷訪問對變量區域進行尋址的步驟

    可以選擇包含所聲明變量的特定地址區域。可以訪問為 1 、8 、16 或 32 的區域。
    的頭像 發表于 04-28 09:24 ?2170次閱讀

    自定義輸入輸出截模塊的靈活配置方案

    可配置任意輸入輸出位模塊
    的頭像 發表于 04-25 11:36 ?403次閱讀

    verilog語音實現浮點運算

    , mantissa} = a; // 將a的符號、指數部分和尾數部分提取到對應變量 end always @(posedge clk) begin if (reset ==
    發表于 03-25 21:49

    網表時序仿真案例:淺說$width語法

    verilog,$width是時序檢查函數,用于檢查脈沖的是否符合要求。
    的頭像 發表于 03-01 09:46 ?2981次閱讀
    網表時序仿真案例:淺說$width語法

    veriloginput和output作用

    Verilog,input和output用于定義模塊的輸入和輸出端口。它們是用于通信的關鍵元素,定義了模塊與其它模塊之間的數據傳輸接口。通過input和output端口,模塊之間可以互相傳遞數據
    的頭像 發表于 02-23 10:29 ?3229次閱讀

    veriloginitial和always的區別

    Verilog是一種硬件描述語言(HDL),用于設計和模擬數字電路。在Verilog,關鍵字initial和always都是用于描述電路行為的特殊語句。它們被用來生成仿真模型,并控制模擬器的啟動
    的頭像 發表于 02-22 16:09 ?2967次閱讀

    verilogfor循環是串行執行還是并行執行

    Verilog,for循環是并行執行的。Verilog是一種硬件描述語言,用于描述和設計數字電路和系統。在硬件系統,各個電路模塊是同時運行的,并且可以并行執行多個操作。因此,在
    的頭像 發表于 02-22 16:06 ?2954次閱讀

    自動控制系統的操縱變量指什么

    自動控制系統的操縱變量指的是在系統由控制器控制的可調節參數,用于調節或改變被控對象的輸出或狀態。操縱變量是自動控制中非常重要的概念,它是控制系統實現自動調節和優化的核心要素之一。本
    的頭像 發表于 01-15 11:29 ?5327次閱讀

    C語言:指針內存是如何存放變量

    在程序定義一個變量,那么在程序編譯的過程,系統會根據你定義變量的類型來分配「相應尺寸」的內存空間。那么如果要使用這個變量,只需要用
    發表于 01-08 10:14 ?486次閱讀
    主站蜘蛛池模板: 日韩a在线看免费观看视频| 亚洲熟女丰满多毛XXXXX| 草草色| 青柠在线观看免费播放电影| yellow在线观看免费直播 | 99国产在线观看| 欧美一区二区三区播放| 国产成人高清精品免费5388密 | 超碰视频97av| 亚洲大片免费观看| 男生在床上脱美女 胸| 国产69精品久久久熟女| 亚洲中文字幕永久在线| 欧美亚洲韩日午夜| 国产伊人自拍| av天堂电影网| 亚洲国产在线观看免费视频| 美女张开大腿| 国产美女影院| babesvideos性欧美| 亚洲 日韩经典 中文字幕| GOGOGO高清免费播放| 午夜AV内射一区二区三区红桃视 | 国产精品99久久久久久AV| 一品探花论坛| 天天摸夜添狠狠添高| 蜜桃精品成人影片| 国产亚洲精品在线视频| vr亚洲成年网址在线观看| 亚洲日韩天堂在线中文字幕| 欧美影院在线观看完整版 mp4| 激情欧美日韩一区二区| 超碰免费视频caoporn| 在线视频久久只有精品第一日韩| 三级黄毛片| 奶头好翘是不是想要了 | 久久这里只精品国产99re66| 国产99精品视频一区二区三区| 真人女人无遮挡内谢免费视频%| 无码日韩人妻精品久久蜜桃免费| 棉袜足j吐奶视频|