Verilog:Verilog中參數傳遞與參數定義


1、符號常的定義

  用parameter來定義一個標志符代表一個常量,稱作符號常量,他可以提高程序的可讀性和可維護性。

  parameter是參數型數據的關鍵字,在每一個賦值語句的右邊都必須是一個常數表達式。即該表達式只能包含數字或先前已經定義的參數。

    parameter     msb=7;                 //定義參數msb=7

    parameter     r=5.7;                   //定義r為一個實型參數5.7

    parameter     byte_size=8,byte_msb=byte_size-1;        //利用常數表達式賦值

  參數型常量經常用於定義延遲時間和變量寬度。在模塊和實例引用時,可以通過參數傳遞改變在被引用模塊或實例中已經定義的參數。

  參考實例如下:    

  module exam_prj
      #(parameter WIDTH=8) //端口內的參數只能在這使用
     (
          input [WIDTH-1:0] dataa,//[WIDTH-1:0]
          input [WIDTH-1:0] datab,
          output reg [WIDTH:0] result
    );
     parameter Conuter_Top = 4'd9;//用於代碼部分的參數
    //代碼部分省略
 

2、參數傳遞

  傳遞的方法:
  2.1、module_name #( parameter1, parameter2) inst_name( port_map);

    參考實例:

      module adder_16(sum,a,b);
         parameter time_delay=5,time_count=10;
                ......
      endmodule


      module top;
          wire[2:0] a1,b1;
          wire[3:0] a2,b2,sum1;
          wire[4:0] sum2;
          adder_16  #(4,8)  AD1(sum1,a1,b1);//time_delay=4,time_count=8
      endmodule

 

  2.2、module_name #( .parameter_name(para_value), .parameter_name(para_value)) inst_name (port map);     

      module exam_prj_tb;
          exam_prj//---------
                #(
                   .WIDTH(8), 
                   .Conuter_Top(4'd5)
                )
              exam_prj_inst//------*注意例化時的名字在這個位置*
              (
                  .dataa(dataa),
                  .datab(datab),
                  .result(sum)
              );
 

  2.3、在多層次的模塊中,改變參數需要使用defparam命令。     defparam   Test.T.B1.P=2;         //Test、T、B1分別是高層模塊中的底層模塊實例。

    參數需要寫絕對路徑來指定。


免責聲明!

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



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