在 Verilog 模組中實例化 VHDL 元件

邏輯主頁

以上連結提供了許多 VHDL 元件可供使用。現代 FPGA 綜合軟體允許混合語言設計,因此所有這些元件都可以在 Verilog 設計和 VHDL 中運作。

在 Verilog 模組中實例化 VDHL 元件非常簡單,因為它遵循與實例化 Verilog 模組本身完全相同的語法:

<vhdl_component_name> # ( <generic_values_list> )
<instance_name> ( <port_map_list> );

下面是一個在頂級 Verilog 模組中實例化 VHDL 元件的範例設計。設計透過實例化該解彈跳 VHDL 元件兩次來對兩個按鈕進行去解彈跳。 VHDL 元件的實體程式碼如下所示:

ENTITY debounce IS
  GENERIC(
    clk_freq    : INTEGER := 50_000_000;  --system clock frequency in Hz
    stable_time : INTEGER := 10);         --time button must remain stable in ms
  PORT(
    clk     : IN  STD_LOGIC;  --input clock
    reset_n : IN  STD_LOGIC;  --asynchronous active low reset
    button  : IN  STD_LOGIC;  --input signal to be debounced
    result  : OUT STD_LOGIC); --debounced signal
END debounce;

要在 Verilog 中實例化此 VHDL 元件,只需使用標準 Verilog 語法聲明該元件並將通用參數和連接埠對應到 Verilog 模組中對應的參數和連接埠。下面的範例 Verilog 程式碼根據參數和連接埠的列出順序推斷映射。50_000_000 對應到 clk_freq 通用,10 對應到 stable_time 通用,列出的 Verilog 連接埠依照在元件實體中宣告 VHDL 連接埠的順序對應到 VHDL 連接埠。

module verilog_debounce(
    input clk,             //system clock
    input reset_n,         //asynchronous active low reset
    input [1:0] button,    //two input signals to be debounced
    output [1:0] result    //two debounced signals
    );

    debounce #(50_000_000,10)                     //VHDL component name and generic parameter mapping
    debounce_0(clk,reset_n,button[0],result[0]);  //instance name and port mapping for first signal

    debounce #(50_000_000,10)                     //VHDL component name and generic parameter mapping
    debounce_1(clk,reset_n,button[1],result[1]);  //instance name and port mapping for second signal
	 
endmodule

所有其他 Verilog 語法和功能也適用。因此,可以明確地完成映射(列出 Verilog 和 VHDL 連接埠)。生成語句可以建立同一元件的多個實例,等等。

混合語言設計對於數位設計師來說是一筆巨大的資產。它顯著增加了可用的 IP 核庫。

程式碼下載

verilog_debounce.v (1.7 KB)
debounce.vhd (3.1 KB)