Verilog基礎知識0(`define、parameter、localparam三者的區別及舉例)


1、概述

    `define:作用 -> 常用於定義常量可以跨模塊、跨文件;


                            范圍 -> 整個工程;

    parameter:     作用 -> 常用於模塊間參數傳遞;

                           范圍 -> 本module內有效的定義;

    localparam       作用 -> 常用於狀態機的參數定義;

                           范圍 -> 本module內有效的定義,不可用於參數傳遞;

                                      localparam cannot be used within the module port parameter list.

2、應用舉例

(1) `define
    概念:可以跨模塊的定義,寫在模塊名稱上面,在整個設計工程都有效。
               一旦`define指令被編譯,其在整個編譯過程中都有效。例如,通
               過另一個文件中的`define指令,定義的常量可以被其他文件調用,
               直到遇到 `undef;
    舉例:定義 `define UART_CNT 10'd1024
               使用 `UART_CNT
    
(2) parameter
    概念:本module內有效的定義,可用於參數傳遞;
               如果在模塊內部定義時無法進行參數傳遞,
               若在模塊名后照下面這樣寫則可以進行傳遞
    舉例:定義->

module video_in
           #(
          parameter MEM_DATA_BITS = 64,
          parameter INTERLACE     = 1      // 0
          )
          (
           input     clk,
           input     rst_n,
          
           output    burst_finsh
          );

 

使用 -> 調用此模塊的時候可以像端口信號傳遞一樣進行參數傳遞

video_in
       #( .MEM_DATA_BITS ( 64 ),
          .INTERLACE     ( 1  )
        )
       u_video_in (
        .clk             (clk_50m),
        .rst_n          (rst_n),
        
        .burst_finsh (burst_finsh)
        );

(3) localparam:
    概念:本module內有效的定義,不可用於參數傳遞;
               localparamcannot be used within the module port parameter list.
               一般情況下,狀態機的參數都是用localparam的。

          localparam BURST_LEN               = 10'd64;     /*一次寫操作數據長度 */
          
          localparam BURST_IDLE              = 3'd0;       /*狀態機狀態:空閑 */
          localparam BURST_ONE_LINE_START    = 3'd1;       /*狀態機狀態:視頻數據一行寫開始 */
          localparam BURSTING                = 3'd2;       /*狀態機狀態:正在處理一次ddr2寫操作 */
          localparam BURST_END               = 3'd3;       /*狀態機狀態:一次ddr2寫操作完成*/
          localparam BURST_ONE_LINE_END      = 3'd4;       /*狀態機狀態:視頻數據一行寫完成*/
          
          reg[2:0]  burst_state              = 3'd0;       /*狀態機狀態:當前狀態 */
          reg[2:0]  burst_state_next         = 3'd0;       /*狀態機狀態:下一個狀態*/

 

————————————————
版權聲明:本文為CSDN博主「Times_poem」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/times_poem/article/details/51371940


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM