VHDL中是否存在类似Verilog `include的引入外部信号定义功能?
VHDL实现类似Verilog `include导入预定义信号的方法
VHDL完全可以实现你需要的类似Verilog `include的功能,有两种常用的可综合实现方式,适配不同场景:
- 最接近Verilog
include的用法:用工具支持的VHDL预编译指令 目前主流的FPGA/ASIC综合工具(Vivado、Quartus、Synopsys DC等)都原生支持VHDL版的include预编译指令,用法和Verilog几乎完全一致:
你可以直接复用现有的Python生成逻辑,只需要把输出的信号、寄存器声明语法改成VHDL格式,存为后缀为.vhdh(或自定义后缀)的头文件,之后在需要使用这些定义的VHDL文件对应位置加入include "your_generated_file.vhdh"` 即可,无需修改现有工作流。 - VHDL标准原生的更规范实现:用
package(程序包)
这是VHDL标准定义的原生功能,不存在任何工具兼容性问题,更适合正式项目使用:
你可以用Python生成一个独立的VHDL程序包文件,示例格式如下:
之后在任意需要调用这些定义的VHDL模块的开头,加上如下语句即可直接使用所有包内定义的内容:library ieee; use ieee.std_logic_1164.all; package ram_regs_pkg is -- 定义寄存器地址常量 constant REG_CTRL_ADDR : integer := 16#0000#; constant REG_DATA_ADDR : integer := 16#0004#; -- 定义寄存器信号 signal reg_ctrl : std_logic_vector(31 downto 0); signal reg_data_ro : std_logic_vector(15 downto 0); -- 只读寄存器 signal reg_data_signed : std_logic_vector(31 downto 0); -- 带符号扩展寄存器 -- 其他所有你需要的全局信号、常量、自定义类型都可以在此定义 end package ram_regs_pkg;
这种方式完全符合IEEE VHDL标准,不需要依赖预编译规则,代码可移植性更强,也更方便工具做语法检查和代码调试。use work.ram_regs_pkg.all;
针对你自动生成RAM寄存器的场景,更推荐用package的实现方式,你还可以把寄存器的属性(地址、位宽、读写权限、是否需要符号扩展)都统一在包内定义,后续修改参数时只要更新生成的package文件即可,所有引用的模块会自动同步参数,不需要逐一修改各模块内部代码。
内容的提问来源于stack exchange,提问作者CakeMaster
相关产品推荐
相关产品推荐

