verilog中參數傳遞與參數定義中#的做用

1、module內部有效的定義ide

用parameter來定義一個標誌符表明一個常量,稱做符號常量,他能夠提升程序的可讀性和可維護性。parameter是參數型數據的關鍵字,在每個賦值語句的右邊都必須是一個常數表達式。即該表達式只能包含數字或先前已經定義的參數。
parameter     msb=7;                 //定義參數msb=7
parameter     r=5.7;                   //定義r爲一個實型參數5.7
parameter     byte_size=8,byte_msb=byte_size-1;        //利用常數表達式賦值
參數型常量常常用於定義延遲時間和變量寬度。在模塊和實例引用時,能夠經過參數傳遞改變在被引用模塊或實例中已經定義的參數。input

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

   這裏出現的兩個參數parameter,第一個表示只在端口設置時使用,後面的是對於模塊內部的使用。it

2、參數傳遞class

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

  1.  
    module adder_16(sum,a,b);
  2.  
    parameter time_delay=5,time_count=10;
  3.  
    ......
  4.  
    endmodule
  5.  
    module top;
  6.  
    wire[2:0] a1,b1;
  7.  
    wire[3:0] a2,b2,sum1;
  8.  
    wire[4:0] sum2;
  9.  
    adder_16 #(4,8) AD1(sum1,a1,b1);//time_delay=4,time_count=8
  10.  
    endmodule

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

  1.  
    //module exam_prj_tb;
  2.  
     
  3.  
    exam_prj//---------
  4.  
    #(
  5.  
    .WIDTH(8),
  6.  
    .Conuter_Top(4'd5)
  7.  
    )
  8.  
    exam_prj_inst//------*注意例化時的名字在這個位置*
  9.  
    (
  10.  
    .dataa(dataa),
  11.  
    .datab(datab),
  12.  
     
  13.  
    .result(sum)
  14.  
    );

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

參數須要寫絕對路徑來指定。引用

3、子模塊調用子模塊程序

  1.  
    module Sub_Sub_Modu;
  2.  
    parameter W1=4;
  3.  
    ...
  4.  
     
  5.  
    endmodule
  6.  
     
  7.  
    module Sub_modu;
  8.  
    parameter W=8;
  9.  
    ...
  10.  
    Sub_Sub_Modu #(W) ( );
  11.  
    ...
  12.  
    endmodue
  13.  
     
  14.  
    module Main_Modu ;
  15.  
    ...
  16.  
    Sub_Modu #(16) ; //這樣W和W1都是16位
  17.  
    ..
  18.  
    endmodue
相關文章
相關標籤/搜索