新闻中心

EEPW首页 > EDA/PCB > 设计应用 > 基于Modelsim FLI接口的FPGA仿真技术

基于Modelsim FLI接口的FPGA仿真技术

作者: 时间:2015-05-06 来源:网络 收藏

  3、C语言对 VHDL设计的协同仿真

本文引用地址:https://www.eepw.com.cn/article/273718.htm

  3.1 构成框图

  仿真文件的构成如图 3 所示,包括 HDL 文件和动态链接库(即 C 程序)。图中 C 程序对应的 VHDL 文件要负责声明对应的动态连接库文件名及初始化函数,另外还可以给出一些调用参数。动态链接库中用到的输入输出信号也要在对应的 VHDL 文件中声明。

  

 

  图3 仿真文件构成示意图

  例如,假定有一个DLL文件名为sim.dll,对应的初始化函数为sim_init,有输入信号in1,in2,输出信号 out1,out2,可以这样编写对应的 VHDL 文件  (sim.vhd):

  library ieee;

  use ieee.std_logic_1164.all;

  entity sim is

  port(

  in1: in std_logic;

  in2: in std_logic;

  out1: out std_logic;

  out2: out std_logic;

  );

  end entity sim;

  architecture dll of sim is

  attribute foreign : string;

  attribute foreign of dll : architecture is "sim_init sim.dll”

  begin

  end;

  仿真时,仿真器对顶层的 HDL 文件进行仿真,并根据各 VHDL 文件的动态链接库声明来调用、执行相应的动态链接库。

  3.2 动态链接库的程序结构

  modelsim 在仿真时,根据 VHDL 文件的声明,调用 DLL 文件(如 sim.dll)。在 VHDL文件中已经给出了调用文件(sim.dll)和初始化函数名(如 sim_init),modelsim根据这些信息,调用 sim.dll中的 sim_init 函数,完成初始化工作。初始化包括:

  1. 初始化全局变量;

  2. 设置 VHDL 输入输出信号与 C 程序变量的对应关系;

  3. 设置输出信号的一些初始状态(mti_ScheduleDriver);

  4. 设置在仿真器重新仿真(restart)和仿真器退出仿真(quit)等情况下执行的一些函

  数(mti_AddRestartCB 和mti_AddQuitCB 等),如释放动态申请的内存等等;

  5. 设置敏感表,给出在某些信号发生某些变化(如时钟上升沿等)时执行的函数。

  6. 等等。

  下面结合 3.1的例子(sim.vhd),给出C 程序的设计步骤。

  1.包含头文件,包括 C程序常用的一些头文件和 给出的外部语言接口头文件m ti.h。给出的外部接口函数说明、类型定义等都在 mti.h 中。

  2.定义自己的结构体,这一点主要是为了编程方便,例如输入输出信号对应的变量在各函数中基本上都会用到,可以把这些变量定义成一个结构,便于参数传递。例如,我们可以把 3.1 的 sim.vhd 输入输出信号对应的变量定义成结构:

  typedef struct {

  driverID out1;

  driverID out2;

  signalID in1;

  signalID in2;

  }PortStruct;

  其中 driverID 表示输出信号对应的变量;signalID表示输入信号对应的变量。这样,这里定义的变量 out1, out2, in1, in2 就分别与 sim.vhd中的信号 out1, out2, in1, in2 对应。

fpga相关文章:fpga是什么




关键词: Modelsim FPGA

评论


相关推荐

技术专区

关闭