吴忠躺衫网络科技有限公司

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

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

3天內不再提示

如何使用verilog參數和generate語句來編寫可重用的verilog代碼?

Hack電子 ? 來源:Hack電子 ? 2023-05-08 16:59 ? 次閱讀

與大多數編程語言一樣,我們應該嘗試使盡可能多的代碼可重用。這使我們能夠減少未來項目的開發時間,因為我們可以更輕松地將代碼從一個設計移植到另一個設計。 我們在verilog中有兩個可用的結構,可以幫助我們編寫可重用的代碼 - 參數化和generate語句。這兩種結構都允許我們創建更通用的代碼,當我們實例化組件時,我們可以輕松修改這些代碼以滿足我們的需求。

Verilog參數化

在verilog中,參數是常量的局部形式,可以在我們實例化模塊時為其賦值。由于參數的范圍有限,我們可以多次調用同一個verilog模塊,并為參數分配不同的值。這使我們能夠動態配置模塊的行為。

下面的verilog代碼片段顯示了在模塊中聲明參數的方法。當我們在這樣的verilog模塊中聲明一個參數時,我們稱之為參數化模塊。

1 module #(
2 parameter =
3 )
4 (
5 // Port declarations
6 );

上面verilog代碼中的 <parameter_name> 字段用于為我們的參數提供標識符。我們使用此標識符在代碼中調用參數值,就像使用普通變量一樣。我們還可以使用上面示例中的 字段為參數分配默認值。這很有用,因為它允許我們實例化組件,而無需專門為參數賦值。

當我們 verilog設計單元中實例化模塊時,我們可以使用命名關聯或位置關聯為參數分配一個值。這與將信號分配給模塊上的輸入或輸出完全相同。但是,當我們編寫使用 verilog 1995 標準的代碼時,我們只能使用位置關聯為參數賦值。

下面的 verilog 代碼片段顯示了我們在實例化模塊時用于為參數賦值的方法。

1 // Example of named association
2 # (
3 // If the module uses parameters they are connected here
4 . ()
5 )
6 (
7 // port connections
8 );
9
10 // Example of positional association
11 # ()
12 (
13 // port connections
14 );

Verilog 參數化模塊示例

為了更好地理解我們如何在verilog中使用參數,讓我們考慮一個基本的例子。對于此示例,讓我們考慮一個需要兩個同步計數器的設計。其中一個計數器寬 8 位,另一個寬 12 位。 為了實現這個電路,我們可以編寫兩個具有不同寬度的不同計數器模塊。

然而,這是一種對電路進行編碼的低效方法。相反,我們將編寫單個計數器電路并使用參數來更改輸出中的位數。 由于理解我們如何使用參數化模塊并不重要,因此我們將排除此示例中的功能代碼。相反,我們將只研究如何在 verilog中聲明和實例參數化模塊。

下面的 verilog 代碼片段顯示了我們如何為參數化計數器模塊編寫接口

1 modulecounter #(
2 parameterBITS =8;
3 )
4 (
5 inputwireclock,
6 inputwirereset,
7 outputreg[BITS-1:0] count
8 );

在這個例子中,我們看到了如何使用參數來調整verilog中信號的大小。我們不是使用固定數字來聲明端口寬度,而是將參數值替換為端口聲明。這是 verilog 中參數最常見的用例之一。 在上面的 verilog 代碼中,我們將 BITS 參數的默認值定義為 8。因此,當我們想要一個不是 8 位的輸出時,我們只需要為參數分配一個值。 下面的代碼片段顯示了當我們想要 12 位輸出時如何實例化這個模塊。在這種情況下,我們必須在實例化 verilog 模塊時覆蓋參數的默認值。

1 counter # (
2 .BITS (12)
3 ) count_12 (
4 .clock (clock),
5 .reset (reset),
6 .count (count_out)
7 );

雖然我們在上面的示例中使用命名關聯,但我們也可以使用位置關聯為 verilog 中的參數賦值。

下面的代碼片段顯示了我們將如何使用位置關聯將值 12 分配給 BITS 參數。

1 counter # (12) count_12 (clock, reset, count_out);





審核編輯:劉清

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

    關注

    28

    文章

    1351

    瀏覽量

    110396
  • 計數器
    +關注

    關注

    32

    文章

    2261

    瀏覽量

    94984
  • 編程語言
    +關注

    關注

    10

    文章

    1950

    瀏覽量

    34987
  • BITS
    +關注

    關注

    0

    文章

    4

    瀏覽量

    8106

原文標題:使用參數化編寫可重用的Verilog代碼

文章出處:【微信號:Hack電子,微信公眾號:Hack電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Veriloggenerate if 語句如何用systemc實現?

    Veriloggenerate if語句如何用systemc實現?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發表于 08-28 12:06

    Veriloggenerate if語句如何用systemc實現?

    1.Veriloggenerate if語句如何用systemc實現?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發表于 08-29 16:11

    新手求解verilog 中的生成塊語句 的意思

    verilog 中的 generate for 語句好理解,但是 generate if 和 generate case
    發表于 12-21 12:44

    veriloggenerate語句的用法分享

    generateverilog中的生成語句,當對矢量中的多個位進行重復操作時,或者當進行多個模塊的實例引用的重復操作時,或者根據參數的定義
    發表于 12-23 16:59

    Verilog代碼書寫規范

    Verilog代碼書寫規范 本規范的目的是提高書寫代碼的可讀性、可修改性、重用性,優化代碼
    發表于 04-15 09:47 ?106次下載

    Verilog generate語句的類型

    Generate 結構在創建可配置的RTL的時候很有用。Generate loop能夠讓語句實例化多次,通過index控制。而conditional
    的頭像 發表于 03-16 14:34 ?2.2w次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>generate</b><b class='flag-5'>語句</b>的類型

    Verilog綜合的循環語句

    Verilog中提供了四種循環語句,可用于控制語句的執行次數,分別為:for,while,repeat,forever。其中,for,while,repeat是綜合的,但循環的次數需
    發表于 10-13 12:23 ?2w次閱讀

    Verilog教程之Verilog HDL程序設計語句和描述方式

    本文檔的主要內容詳細介紹的是Verilog教程之Verilog HDL程序設計語句和描述方式。
    發表于 12-09 11:24 ?47次下載
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL程序設計<b class='flag-5'>語句</b>和描述方式

    verilog中的initial語句說明

    解釋verilog HDL中的initial語句的用法。
    發表于 05-31 09:11 ?0次下載

    Verilog語法之generate for、generate if、generate case

    Verilog-2005中有3個generate 語句可以用來很方便地實現重復賦值和例化(generate for)或根據條件選擇性地進行編譯(ge
    的頭像 發表于 12-28 15:21 ?2895次閱讀

    如何在verilog中使用If語句和case語句?

    我們在上一篇文章中已經看到了如何使用程序塊(例如 always 塊編寫按順序執行的 verilog 代碼。
    的頭像 發表于 04-18 09:45 ?5704次閱讀

    Verilog中的If語句和case語句介紹

    我們在上一篇文章中已經看到了如何使用程序塊(例如 always 塊編寫按順序執行的 verilog 代碼。 我們還可以在程序塊中使用許多語句
    的頭像 發表于 05-11 15:37 ?4749次閱讀
    <b class='flag-5'>Verilog</b>中的If<b class='flag-5'>語句</b>和case<b class='flag-5'>語句</b>介紹

    如何使用參數編寫重用verilog代碼

    我們將介紹如何使用verilog參數generate語句編寫
    的頭像 發表于 05-11 15:59 ?1176次閱讀

    Verilog常用的循環語句及用途

    本文主要介紹verilog常用的循環語句,循環語句的用途,主要是可以多次執行相同的代碼或邏輯。
    的頭像 發表于 05-12 18:26 ?2679次閱讀

    FPGA的Verilog代碼編寫規范

      注:以R起頭的是對編寫Verilog代碼的IP設計者所做的強制性規定,以G起頭的條款是建議采用的規范。每個設計者遵守本規范鍛煉命名規范性。
    的頭像 發表于 08-15 16:23 ?2330次閱讀
    百家乐赌现金| 钱柜娱乐城怎么样| 百家乐官网怎样玩才能赢| 优博百家乐现金网平台| 澳门彩票| 百家乐官网偷吗| 嘉年华百家乐的玩法技巧和规则| 百家乐官网洗码方法| 百家乐桌子轮盘| 东山县| 网络百家乐赌博视频| 皇家赌场007| 百家乐下载游戏| 在线棋牌游戏| 366百家乐娱乐城| 囊谦县| 揭秘百家乐百分之50| 威尼斯人娱乐场注册| 百家乐官网菲律宾| 大发888快速提现| 网上百家乐官网赌博经历| 永利博国际| 博久百家乐论坛| 宝应县| 百家乐制胜法| 百家乐官网信息| 德州扑克底牌| 真人百家乐是啥游戏| 百家乐官网最好的玩法| 时时博百家乐的玩法技巧和规则 | 缅甸百家乐官网赌场娱乐网规则| 澳门顶级赌场网址| 十六浦娱乐城| 百家乐剁手| 优博家百家乐官网娱乐城| 大发888娱乐官网| 做生意摆放龙龟方向| 百家乐官网单双打法| 金百家乐的玩法技巧和规则| 百家乐官网官网站| 注册送现金|