标签: ghdl

如何使用ghdl在Mac上编译和运行VHDL程序?

我刚刚写了一个简单的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结合使用.

macos vhdl ghdl

11
推荐指数
1
解决办法
2万
查看次数

Modelsim 和 GHDL 无法将 vhdl 用户定义的信号类型转储到 vcd 中?

我正在尝试从由 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 只是悄悄地忽略了这些信号

有解决方法吗?选择?

signals vhdl modelsim ghdl

5
推荐指数
1
解决办法
1916
查看次数

为 VHDL 设计运行多个测试平台

每当我创建 VHDL 设计时,我都会有很多模块。这些模块中的每一个都连接到一个主文件,因此所有内容都被合成。但我想为这些模块中的每一个编写单独的测试平台,并为全局流程编写一个。如果我能做一些事情将所有这些测试平台连接在一起并让它们连续运行,在一次运行中测试我的整个设计,那就太好了。我怎么能这样做?我喜欢使用 GHDL 和断言。是否可以创建一个超级测试平台?或者迭代它们的shell脚本会更好吗?

verification unit-testing vhdl ghdl test-bench

5
推荐指数
1
解决办法
755
查看次数

如何在VHDL中将整数写入十六进制的stdout?

我可以打印一个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)

vhdl ghdl

5
推荐指数
2
解决办法
9034
查看次数

为什么Windows上的llvm-config没有为clang ++.exe发出正确的参数?

我没有经验丰富的LLVM用户,但我正在尝试在Windows上编译Linux LLVM项目.该项目是GHDL.

因为Windows的现成LLVM安装程序没有llvm-config捆绑,所以我需要编译LLVM并从源代码中获得批处理.该项目需要LLVM 3.5.

首先,我下载llvm-3.5.2clang-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)

我注意到几个问题:

  1. 有些路径/而不是\
    -IC:\Tools\LLVM-3.5/include
  2. 某些开关和参数与-其他开关和参数一起使用/
    ... -IC:\Tools\LLVM-3.5/include /DWIN32 /D_WINDOWS ...
  3. 一些参数由多个空格符号分隔 …

windows llvm llvm-clang clang++ ghdl

4
推荐指数
1
解决办法
1479
查看次数

使用 GHDL 模拟器模拟测试台时,“组件实例“uut”未绑定”

我在使用 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)

fpga vhdl hdl ghdl

4
推荐指数
1
解决办法
1万
查看次数

GHDL挂起正在运行的测试台

在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)

fpga vhdl ghdl

3
推荐指数
2
解决办法
2126
查看次数

ghdl在包中详细说明了一个实体

我有一个VHDL程序,我不能用GHDL来详细说明,因为要详细说明的实体是在一个包中.如何使用GHDL在包中详细说明实体?

编辑:

谢谢你的答案,经过一段时间我发现包中的代码就像一个接口,我们应该自己实现这个组件,我错误地认为它是完整的.抱歉错误的问题,我是VHDL的新手,我正在学习绳索,因为我的假设是错误的,所以无法在谷歌上找到任何解释.

vhdl ghdl

2
推荐指数
2
解决办法
1093
查看次数

VHDL包'IEEE.std_logic_arith'是否附带ghdl?

我试图用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)

simulation vhdl xilinx ghdl

2
推荐指数
1
解决办法
3951
查看次数

枚举中字符文字的别名的正确语法是什么?

出于教育目的,我试图声明一个字符文字的枚举值的别名.在下面的示例中,我正在尝试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)

alias enumeration vhdl enumerated-types ghdl

2
推荐指数
1
解决办法
1040
查看次数