我刚刚写了一个简单的VHDL程序.我将文件保存为.vhd文件.然后我编译了它
ghdl -a test.vhd
Run Code Online (Sandbox Code Playgroud)
然后用.构建和执行文件
ghdl -e test
Run Code Online (Sandbox Code Playgroud)
最后试着用它来运行它
ghdl -r test
Run Code Online (Sandbox Code Playgroud)
发生了什么事是我现在有一个work-obj93.cf
文件,它是可见的,其他两个文件,即..
和.
那些不知何故不可见的.
有人能说出我在Mac上测试vhdl程序到底有多准确吗?也许与GTKWave结合使用.
我正在尝试从由 modelsim 或 ghdl 执行的模拟中转储内部信号。一切正常使用:
对于modelsim,添加vhdl源,然后编译:
vsim -novopt work.uut_testbench
vcd file ../uut.vcd;
vcd limit 50000000;
vcd add -r /uut_testbench/uut_core/*;
run 6000
quit -sim
Run Code Online (Sandbox Code Playgroud)
对于 GHDL
ghdl -i --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work ./uut*.vhd
ghdl -m --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work uut_testbench
./uut_testbench --stop-time=6000ns --vcd=../uut.vcd
Run Code Online (Sandbox Code Playgroud)
我可以看到模拟信号,但不是全部。信号定义为
Type InternalState is (Idle,Valid,Stalled);
Signal sState,sPrevState :InternalState;
Run Code Online (Sandbox Code Playgroud)
从 vcd 中省略。这种行为对于modelsim 和ghdl 很常见。
我可以在 ghdl 生成的 vcd 中看到以下行
$comment sstate is not handled $end
Run Code Online (Sandbox Code Playgroud)
Modelsim 只是悄悄地忽略了这些信号
有解决方法吗?选择?
每当我创建 VHDL 设计时,我都会有很多模块。这些模块中的每一个都连接到一个主文件,因此所有内容都被合成。但我想为这些模块中的每一个编写单独的测试平台,并为全局流程编写一个。如果我能做一些事情将所有这些测试平台连接在一起并让它们连续运行,在一次运行中测试我的整个设计,那就太好了。我怎么能这样做?我喜欢使用 GHDL 和断言。是否可以创建一个超级测试平台?或者迭代它们的shell脚本会更好吗?
我可以打印一个integer
小数到标准输出:
library std;
use std.textio.all;
entity min is
end min;
architecture behav of min is
begin
process is
variable my_line : line;
begin
write(my_line, 16);
writeline(output, my_line);
wait;
end process;
end behav;
Run Code Online (Sandbox Code Playgroud)
哪个输出:
16
Run Code Online (Sandbox Code Playgroud)
但是如何输出代替:
10
0x10
Run Code Online (Sandbox Code Playgroud) 我没有经验丰富的LLVM用户,但我正在尝试在Windows上编译Linux LLVM项目.该项目是GHDL.
因为Windows的现成LLVM安装程序没有llvm-config
捆绑,所以我需要编译LLVM并从源代码中获得批处理.该项目需要LLVM 3.5.
首先,我下载llvm-3.5.2
并clang-3.5.2
使用CMake将其转换为Visual Studio 2013项目.然后我用VS2013编译它.
原始的makefile调用llvm-config
.生成的字符串将传递给clang++
:
clang++ -c -I`/usr/lib/llvm-3.5/bin/llvm-config --includedir --cflags --cxxflags` -o llvm-cbindings.o src/ortho/llvm/llvm-cbindings.cpp
Run Code Online (Sandbox Code Playgroud)
我正在使用PowerShell调用llvm-config
并将结果存储在变量中:
$LLVM_CONFIG_RESULT = & $LLVM_CONFIG --cxxflags
Run Code Online (Sandbox Code Playgroud)
结果是:
-IC:\Tools\LLVM-3.5/include /DWIN32 /D_WINDOWS /W3 /MP -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4180 -wd4244 -wd4267 -wd4291 -wd4345 -wd4351 -wd4355 -wd4503 -wd4624 -wd4722 -wd4800 -w14062 -we4238 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
Run Code Online (Sandbox Code Playgroud)
我注意到几个问题:
/
而不是\
-IC:\Tools\LLVM-3.5/include
-
其他开关和参数一起使用/
... -IC:\Tools\LLVM-3.5/include /DWIN32 /D_WINDOWS ...
我在使用 GHDL ( http://ghdl.readthedocs.io/en/latest/ ) 来模拟我的 VHDL 设计时遇到问题。因此,当我使用该命令ghdl -e Averager_tb
用 GHDL 编译测试台时,我收到警告:
Averager_tb.VHD:33:3:warning: component instance "uut" is not bound
Averager_tb.VHD:11:14:warning: (in default configuration of averager_tb(behaviour))
Run Code Online (Sandbox Code Playgroud)
要编译用于模拟的测试平台,我使用以下命令:
ghdl -a Averager_tb.VHD # the test bench file is Averager_tb.VHD
ghdl -e Averager_tb # the entity for the test bench is Averager_tb
Run Code Online (Sandbox Code Playgroud)
并且我的设计的输出在整个测试平台中保持不变,我还发现设计中的打印语句没有被执行。
要执行已编译的测试台模拟,我使用以下命令:
ghdl -r Averager_tb
Run Code Online (Sandbox Code Playgroud)
然而,当我使用 Aldec Riviera Pro 2015.06 模拟器在http://www.edaplayground.com上模拟相同的测试平台时,我发现设计中的打印语句被执行并且输出按照我的预期发生变化。
为什么会这样,我该如何解决?
这是我设计中的实体声明
-- Entity Declaration in Design
entity Averager is
port (
clk : in std_logic;
ClockEnable …
Run Code Online (Sandbox Code Playgroud) 在VHDL中测试简单的生活游戏实现时,在打印出“测试结束”消息后,空测试台的GHDL模拟会挂起,CPU使用率达到100%。
这是代码:
----- Package ------------------------------
library ieee;
use ieee.std_logic_1164.all;
package data_types is
type array2D is array (0 to 10, 0 to 10) of std_logic;
end data_types;
----- Main Code ----------------------------
library ieee;
use ieee.std_logic_1164.all;
use work.data_types.all;
entity de0 is
port (matrix : inout array2D);
end de0;
architecture life of de0 is
-- Return the integer value of a cell, treating all out of bounds as 0
function cellValue (matrix : array2D; x, y : integer) return integer is
begin
if …
Run Code Online (Sandbox Code Playgroud) 我有一个VHDL程序,我不能用GHDL来详细说明,因为要详细说明的实体是在一个包中.如何使用GHDL在包中详细说明实体?
编辑:
谢谢你的答案,经过一段时间我发现包中的代码就像一个接口,我们应该自己实现这个组件,我错误地认为它是完整的.抱歉错误的问题,我是VHDL的新手,我正在学习绳索,因为我的假设是错误的,所以无法在谷歌上找到任何解释.
我试图用GHDL模拟Xilinx GTXE2收发器.在GTXE2_CHANNEL.vhd中,我收到一个错误,即在'ieee'库中找不到'std_logic_arith'.
首先,这是我的机器设置:
问题1:这个包是否包含在GHDL中?
我试图将VHDL标准更改为VHDL-2008 --std=08
,但ghdl无法识别此选项,因此我目前正在使用VHDL-2002进行编译.但没有改变.
我还试图从Xilinx的vhdl源文件夹中手动包含IEEE源代码C:\Xilinx\14.7\ISE_DS \ISE\vhdl\src\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"
Run Code Online (Sandbox Code Playgroud)
此列表将转换为GHDL命令,这些命令在临时目录中执行:
C:\Program Files …
Run Code Online (Sandbox Code Playgroud) 出于教育目的,我试图声明一个字符文字的枚举值的别名.在下面的示例中,我正在尝试bit_one
在枚举类型bit
(在std.standard中声明)中为值"1" 创建别名.
我很疑惑为什么下面的第一个表格被两个编译器(GHDL 0.29.1和Quartus II 13.01)拒绝,而第二个表单被同样的两个,以及ModelSim和ActiveHDL接受.因此,问题是:在下面的注释掉的行中声明这个别名是非法的吗?
entity character_literal_alias is
end;
architecture rtl of character_literal_alias is
--alias bit_one is '1'[return bit]; -- Doesn't work in GHDL or Quartus
alias bit_one is std.standard.'1'[return bit]; -- Works with ModelSim, ActiveHDL, GHDL, and Quartus
alias append is append_mode[return file_open_kind]; -- Works with the whole bunch
begin
end;
Run Code Online (Sandbox Code Playgroud)
我在其他工具中使用GHDL和VHDL-2008中的VHDL-2002开关.
如果我稍微推测一下,在VHDL-2008 LRM中,所有示例都是以下列形式编写的:
-- implicit aliases ...
-- alias '0' is STD.STANDARD.'0' [return STD.STANDARD.BIT];
-- alias '1' is STD.STANDARD.'1' [return STD.STANDARD.BIT]; …
Run Code Online (Sandbox Code Playgroud) ghdl ×10
vhdl ×9
fpga ×2
alias ×1
clang++ ×1
enumeration ×1
hdl ×1
llvm ×1
llvm-clang ×1
macos ×1
modelsim ×1
signals ×1
simulation ×1
test-bench ×1
unit-testing ×1
verification ×1
windows ×1
xilinx ×1