我试图用GHDL模拟Xilinx GTXE2收发器。在GTXE2_CHANNEL.vhd中,我收到一个错误,即'ieee'库中找不到'std_logic_arith'。
首先,这是我的机器设置:
问题1:这个包是否包含在GHDL中?
我尝试将VHDL标准更改为VHDL-2008 --std=08
,但ghdl无法识别此选项,因此我目前正在使用VHDL-2002进行编译。但没有改变。
我还试图从Xilinx的vhdl源文件夹C:\Xilinx\14.7\ISE_DS \ISE\vhdl\src\ieee
手动包含IEEE源代码。但是当我编译 std_logic_arith 时,它会抱怨缺少 std_logic_1164 ,这通常是找不到的。除此之外, std_logic_1164 中的FOREIGN属性存在问题。
所以这是我要编译的文件列表/编译顺序(Xilinx'* .prj文件的修改版本):
# board and device configuration
#vhdl poc "tb/common/my_config_KC705.vhdl"
# IEEE packages
#xilinx ieee "ieee/std_logic_1164.vhd"
#xilinx ieee "ieee/std_logic_arith.vhd"
# Xilinx Packages and Primitives
xilinx unisim "unisims/unisim_VCOMP.vhd"
xilinx unisim "unisims/unisim_VPKG.vhd"
xilinx work "unisims/primitive/FD.vhd"
xilinx work "unisims/primitive/BUFG.vhd"
xilinx work "unisims/primitive/BUFR.vhd"
xilinx work "unisims/secureip/GTXE2_CHANNEL.vhd"
此列表被翻译成GHDL命令,这些命令在临时目录中执行:
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=poc "D:\VHDL\git\SATAController\lib\PoC\tb\common\my_config_KC705.vhdl"
GHDL Messages:
D:\VHDL\git\SATAController\lib\PoC\tb\common\my_config_KC705.vhdl:52:14:warning: package "my_config" does not require a body
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=unisim "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\unisim_VCOMP.vhd"
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=unisim "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\unisim_VPKG.vhd"
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=work "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\primitive\FD.vhd"
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=work "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\primitive\BUFG.vhd"
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=work "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\primitive\BUFR.vhd"
C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe -a --std=02 -P. --work=work "C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\secureip\GTXE2_CHANNEL.vhd"
GHDL Messages:
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\unisims\secureip\GTXE2_CHANNEL.vhd:34:10: primary unit "std_logic_arith" not found in library "ieee"
最后 ieee.std_logic_1164 中的FOREIGN属性错误:
PS D:\VHDL\git\SATAController\lib\PoC\temp\ghdl> & 'C:\Program Files (x86)\GHDL\0.31\bin\ghdl.exe' -a --std=02 '-P.' --work=ieee 'C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd'
GHDL Messages:
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:211:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:212:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:213:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:214:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:215:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:216:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:218:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:219:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:220:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:221:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:223:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:224:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:225:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:227:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:228:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:229:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:231:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:232:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:233:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:235:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:236:15: value of 'FOREIGN attribute does not begin with VHPIDIRECT
C:\Xilinx\14.7\ISE_DS\ISE\vhdl\src\ieee\std_logic_arith.vhd:238:15: 'FOREIGN allowed only for architectures and subprograms
问题2:如何编译ieee.std_logic_1164?
每个安装了GHDL环境的人都可以测试这个例子。 Xilinx库不需要my_config_KC705.vhdl。
这是为了什么目的?
答案 0 :(得分:6)
是的,此程序包包含在ghdl
中在ghdl手册或手册页中,您发现可以选择--ieee=synopsys
或--ieee=mentor
作为分析和详细命令的命令行选项。
查看您的图书馆目录:
david_koontz@Macbook: ls /opt/ghdl/ghdl_mcode/libraries/synopsys
std_logic_arith.vhdl std_logic_misc.vhdl std_logic_textio.vhdl
std_logic_misc-body.vhdl std_logic_signed.vhdl std_logic_unsigned.vhdl
david_koontz@Macbook: ls /opt/ghdl/ghdl_mcode/libraries/mentor
std_logic_arith.vhdl std_logic_arith_body.vhdl
您找到了包std_logic_arith
。
因为存在冲突的声明,您可以发现在分析和详细说明期间还必须使用-fexplicit
命令行选项。
分析期间给出的选项(-a
)或详细说明(-e
)遵循命令。
如何编译ieee.std_logic_1164?
您不需要分析包ieee.std_logic_1164
,它们是经过预先分析的。首先尝试以上(更常见的是synopsys)。请注意,指导者和synopsys包都不包含任何FOREIGN属性。 FOREIGN属性修饰了一个用外部编程语言实现的子程序声明(函数)。
info ghdl
或ghdl.html
(GHDL guide)第5节 GHDL的VHDL实施(使用供应商库小节,其中给出一些关于处理unisim的建议。还有与其他语言的接口部分,其中介绍了如何使用FOREIGN属性。
另见 3.10 IEEE库陷阱,解释非IEEE标准的问题'图书馆,特里斯坦的非母语英语拼写错误。
如果您真的想分析IEEE库,请先阅读整个 GHDL指南。它涉及应首先理解的几个命令行选项。 Windows ghdl发行版基于一个即时代码生成系统(mcode),它将代码分析为库文件(以.cf后缀结尾),并重新分析在您的发行版库中找到的相同源代码。阐述。
我已成功分析并在OS X下的mhd版本的ghdl上使用了unisim库,而没有修改IEEE库。
你会发现ghdl在内存利用率方面不是最快的,也不是最快的。
您还可以加入Ghdl-discuss邮件列表。 ghdl正在Sourceforge上积极开发。见ghdl-updates。 ghdl-0.32应该会在今年发布(希望如此),并且会增加-2008的支持以及无数的修复。
Windows版本可能是取代mcode版本(32位二进制)的新解释版本。所有的开发工作目前都由Tristan Gingold完成。他还实施了一个全面的LLVM后端版本,这可能有望在Windows上获得更好的性能。
关于FOREIGN属性
我发现我有几个包含FOREIGN属性的Xilinx std_logic_arith
包源文件,尽管行号减去了4个。
属性和编译器编译指示的组合,例如:
-- pragma map_to_operator MULT_TC_OP
-- pragma type_function MULT_SIGNED_ARG
-- pragma return_port_name Z
用于加速功能执行。 ghdl无法使用外语库,mcode(Windows)版本无论如何都无法使用它们。此外, GHDL指南的 5.8.1外部声明中的要求是FOREIGN属性的字符串值包含前缀为" VHPIDIRECT&#34 ;是一个限制,允许链接在gcc版本中,如果找到这些库的ABI,无论如何都不能保证兼容。
您可以简单地注释掉错误消息找到的属性。加速执行是不可能的,无论如何都需要gcc版本的ghdl。
使用ghdl的Synopsys软件包没有性能优势。