vlib work vcom novas.vhd vcom counter.vhd vcom counter_tb.vhd vsim counter_tb run 200ns q 复制代码
因為是VHDL,所以全部改用vcom編譯。
其中novas.vhd是從Debussy目錄複製過來的,為什麼需要編譯這個檔案呢?
VHDL FLI (Foreign Language Interface)與Verilog PLI (Programming Language Interface)不同的地方在於,當你自己提供由C寫的function給simulator使用時,Verilog PLI會自己到所提供的dll去找是否有此function,但VHDL FLI需要自己去提供mapping的動作,告訴simulator哪一個function對應dll內那ㄧ個function,novas.vhd就是提供這個mapping的腳色。
若直接使用Debussy所提供的novas.vhd,在執行ModelSim會有以下錯誤訊息。
# ** Warning: (vsim-FLI-3159) Failed to find foreign function 'fliparseVariableInFile' in FLI object file \复制代码
意思是novas.vhd定義的fliparseVariableInFile在novas_fli.dll找不到,致於為什麼會有此錯誤,我並不清楚。
將novas.vhd修改成如下所示: novas.vhd / VHDL
1 package pkg is
2 attribute foreign : string; 3
4 procedure fsdbDumpfile (file_name : in string);
5 attribute foreign of fsdbDumpfile : procedure is \as_fli.dll\; 6
7 procedure fsdbDumpvars (depth : in integer; 8 region_name : in string);
9 attribute foreign of fsdbDumpvars : procedure is \_fli.dll\; 10 end; 11
12 package body pkg is
13 procedure fsdbDumpfile(file_name : in string) is 14 begin
15 assert false report \ severity note; 16 end; 17
18 procedure fsdbDumpvars(depth : in integer; 19 region_name : in string) is 20 begin
21 assert false report \ severity note; 22 end; 23 end; 24
25 entity novas is end; 26
27 architecture novas_arch of novas is 28 attribute foreign : string;
29 attribute foreign of novas_arch : architecture is \fli.dll\; 30 begin 31 end; 32 复制代码
也就是僅留下fsdbDumpfile()與fsdbDumpvars()兩個function,其他的都刪除。 根據我使用Debussy的經驗,只要留這兩個function就夠用了,其他Debussy的function我還真的沒用過。
在novas.vhd也看到了這些是定義在pkg這個package下,所以在counter_tb.vhd必須use work.pkg.all。 Step 5:
執行ModelSim的批次檔 mod.bat
vsim -c -do sim.do
執行結果
D:\\0Clare\\VerilogLab\\ModelSim\\counter_vhdl>vsim -c -do sim.do Reading C:/Modeltech_6.3e/tcl/vsim/pref.tcl
# 6.3e
# do sim.do
# ** Warning: (vlib-34) Library already exists at \
# Model Technology ModelSim SE vcom 6.3e Compiler 2008.02 Feb 2 2008 # -- Loading package standard # -- Compiling package pkg # -- Compiling package body pkg # -- Loading package pkg # -- Compiling entity novas
# -- Compiling architecture novas_arch of novas
# Model Technology ModelSim SE vcom 6.3e Compiler 2008.02 Feb 2 2008 # -- Loading package standard # -- Loading package std_logic_1164 # -- Loading package std_logic_arith # -- Loading package std_logic_unsigned # -- Compiling entity counter
# -- Compiling architecture arc of counter
# Model Technology ModelSim SE vcom 6.3e Compiler 2008.02 Feb 2 2008 # -- Loading package standard # -- Loading package std_logic_1164 # -- Loading package std_logic_arith # -- Loading package std_logic_unsigned # -- Loading package pkg
# -- Compiling entity counter_tb
# -- Compiling architecture arc of counter_tb # vsim counter_tb
# Loading C:\\Modeltech_6.3e\\win32/novas.dll # // ModelSim SE 6.3e Feb 2 2008 # //
# // Copyright 1991-2008 Mentor Graphics Corporation # // All Rights Reserved. # //
# // THIS WORK CONTAINS TRADE SECRET AND
# // PROPRIETARY INFORMATION WHICH IS THE PROPERTY # // OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS # // AND IS SUBJECT TO LICENSE TERMS. # //
# Loading std.standard
# Loading ieee.std_logic_1164(body) # Loading ieee.std_logic_arith(body) # Loading ieee.std_logic_unsigned(body) # Loading work.pkg(body)
# Loading C:\\Modeltech_6.3e\\win32/./novas_fli.dll # Loading work.counter_tb(arc) # Loading work.counter(arc)
# Novas FSDB Dumper for ModelSim 5.4 (FLI), Release 5.4v9 (Win95/NT) 05/04/2005
# Copyright (C) 1996 - 2004 by Novas Software, Inc. # *Novas* Create FSDB file 'counter.fsdb' 复制代码
Step 6:
執行Debussy批次檔部份 deb.bat
debussy –vhdl –93 novas.vhd counter_tb.vhd counter.vhd –top counter_tb -ssf counter.fsdb -sswr counter.rc 复制代码
-vhdl 表示支援VHDL語法,因為Debussy預設支援Verilog -93 表示支援VHDL 93的語法
-top 指定top module,在Verilog可以不指定top,Debussy可以自動判斷而抓到top module,但是VHDL沒辦法,需要自己指定,若不指定,待會會有GUI要你手動挑選top module 執行結果
3.RTL使用VHDL,testbench使用Verilog Step 1:
設定ModeSim使用Verilog PLI (因為testbench使用Verilog) 將C:\\Novas\\Debussy\\share\\PLI\\modelsim_pli\\WINNT\\novas.dll複製到C:\\Modeltech_6.3e\\win32\\下
修改C:\\Modeltech_6.3e\\modelsim.ini,將Veriuser部分修改成如下所示:
; List of dynamically loaded objects for Verilog PLI applications ; Veriuser = veriuser.sl ; use by verilog Veriuser = novas.dll ; use by vhdl
; Veriuser = novas_fli.dll 复制代码
modelsim.ini是個read only檔,要修改前記得修改其屬性才能存檔。 Step 2: