若是是帶有的參數不須要本模塊之外的部分修改,則調用模塊時不須要考慮參數;若是咱們但願可以在本模塊之外修改參數,則參數調用一般有兩種方法,以下代碼:設計
一、module_name #( parameter1, parameter2) inst_name( port_map); 二、module_name #( .parameter_name(para_value),.parameter_name(para_value)) inst_name (port map); 用#方法和port map的寫法差很少 module multiplier (a, b, product); parameter a_width = 8, b_width = 8; localparam product_width = a_width+b_width; input [a_width-1:0] a; input [b_width-1:0] b; output[product_width-1:0]product; generate if((a_width < 8) || (b_width < 8)) CLA_multiplier #(a_width, b_width) u1 (a, b, product); else WALLACE_multiplier #(a_width, b_width) u1 (a, b, product); endgenerate endmodule
一、概述code
`define:做用 -> 經常使用於定義常量能夠跨模塊、跨文件;ip
範圍 -> 整個工程;input
parameter: 做用 -> 經常使用於模塊間參數傳遞;it
範圍 -> 本module內有效的定義;編譯
localparam 做用 -> 經常使用於狀態機的參數定義;class
範圍 -> 本module內有效的定義,不可用於參數傳遞;module
localparam cannot be used within the module port parameter list.sed
二、應用舉例map
(1) define 概念:能夠跨模塊的定義,寫在模塊名稱上面,在整個設計工程都有效。 一旦
define指令被編譯,其在整個編譯過程當中都有效。例如,通 過另外一個文件中的define指令,定義的常量能夠被其餘文件調用, 直到遇到
undef; 舉例:定義 define UART_CNT 10'd1024 使用
UART_CNT 須要特別注意的是:在利用`define作算數運算的時候,必定要加上括號,以下例子所示:
`define timeslice 100 module ..... ...... # (2*`timeslice) //這個是要加上括號的,若是寫成# 2*`timeslice編譯時是不會經過的;
(2) parameter 概念:本module內有效的定義,可用於參數傳遞; 若是在模塊內部定義時沒法進行參數傳遞, 若在模塊名後照下面這樣寫則能夠進行傳遞