在Verilog模块中实例化VHDL组件

逻辑主页

本网站提供多种可用的VHDL组件。现代FPGA综合软件支持混合语言设计,因此所有这些组件既可用于VHDL设计,也可用于Verilog设计。

在Verilog模块中实例化VHDL组件非常简单,其语法与实例化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)