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