问题标签 [ghdl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
401 浏览

vhdl - 为什么 GHDL 和/或 VHDL-2002 对循环范围的限制如此之大?

我这里有一些有效的 VHDL 代码,可以用

  • GHDL 0.31(--std 未设置)
  • ISE 14.7(XST 和 iSim;标准 = 200x)
  • Vivado(合成器和 xSim)
  • Altera Quatus II 13.1 和最后但并非最不重要的
  • QuestaSim 10.0d

如果未设置选项“--std”,GHDL 可以理解此代码。当我将“--std”设置为 VHDL-2002 时,我收到错误,抱怨 for 循环中的范围。嗯,在 2002 年之前的模式下,这行已经发出警告:(

所以这是我的功能:

GHDL 错误信息:

故障线 249 是FOR I IN 0 TO (slv'length / 4) - 1 LOOP. 用户定义类型 T_SLVV_4 定义为:

我的代码有 8 个这样的错误。我可以将其中的两个从改写'length'range这样,剩下 6 个。但有些是无法改写的……

'length那么为什么在 GHDL 和/或 VHDL >=2002 中不允许进行循环边界计算?

0 投票
1 回答
1275 浏览

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

出于教育目的,我试图为作为字符文字的枚举值声明一个别名。在下面的示例中,我尝试为bit_one枚举类型中的值“1”创建别名bit(在 std.standard 中声明)。

我很困惑为什么下面的第一种形式被两个编译器(GHDL 0.29.1 和 Quartus II 13.01)拒绝,而第二种形式被相同的两个编译器接受,加上 ModelSim 和 ActiveHDL。因此问题是:在下面注释掉的行中声明这个别名是非法的吗?

我在其他工具中使用 GHDL 和 VHDL-2008 中的 VHDL-2002 开关。

如果我稍微推测一下,在 VHDL-2008 LRM 中,所有示例都以以下形式编写:

但这些是隐式声明,即使示例使用选定的名称,也不意味着每个别名都应该以这种方式声明,IMO。那么也许一些供应商误解了标准?

0 投票
1 回答
1800 浏览

vhdl - GHDL:如何绑定组件?

我正在使用 ghdl (0.32rc1) 运行自动化测试平台。我的一些测试平台需要来自 Xilinx ISE 的 unisim 原语。

我准备了两个外部文件,如果一个想测试我的例子。要运行我的示例,您需要安装 Xilinx ISE 或 Vivado,以便找到 MUXCY 原语。它位于文件夹中<InstallDir>\ISE_DS\ISE\vhdl\src\unisims\primitive

我使用以下 ghdl 命令分析了这三个文件:

到目前为止没有错误。
现在我开始了模拟,这只是 Windows 上的 ghdl.exe -r(Linux:-e 和 -r):

现在 ghdl 报告mux无法绑定。
我也尝试了参数--syn-bindingand -P.,但没有任何改变。

我要怎么做才能绑定 MUXCY 组件?

PS有人可以创建一个'ghdl'标签吗?我没有足够的声誉:)

0 投票
1 回答
2355 浏览

vhdl - GHDL:运算符“和”没有函数声明

这是我的剥离示例:

这一行在哪里:

生产

跑步时

GHDL 0.32rc1 (20141104) [Dunoon edition]Arch Linux 上。

根据VHDL 运算符,两个比较都返回布尔值,并且有and两个布尔值的定义。那么我做错了什么?

0 投票
1 回答
200 浏览

vhdl - 如何解决 GHDL 中的“protected_enter(2)”错误

我正在尝试实现我们的PoC.Simulation帮助程序包的 VHDL-08 版本。

原始包使用共享变量来跟踪模拟状态:

  • pass : 所有断言都通过
  • stop : 停止所有进程

有几个函数和过程使用该内部状态。例如,一个tbGenerateClock()过程用于创建一个时钟信号。

在我的 VHDL-08 版本中,我使用受保护类型作为共享变量。我实现了几个“方法”(正确的终点是什么?),它们正在使用或修改内部状态变量。

GHDL 编译我所有的源代码并在运行时抛出错误: C:\Tools\GHDL\0.33dev\bin\ghdl.exe:internal error: protected_enter(2) C:\Tools\GHDL\0.33dev\bin\ghdl.exe:error: simulation failed

这是 GHDL 内部错误还是我以错误的方式使用受保护类型?

我创建了一个(希望如此)最小的示例(从 Gist 下载),它只有 2 个过程:generateClock, stopSimulation.

还有一些tb*包装程序来确保与我的 VHDL-93 实现兼容的接口。

解决方案:

  1. 将时钟生成代码移动到tbGenerateClock程序中
  2. 向受保护类型添加一个函数以获取内部停止状态
  3. 将此功能标记为impure

这是修改后的模拟包:

0 投票
2 回答
2700 浏览

vhdl - VHDL 时钟测试台


我正在尝试运行我在网上获取的代码,但不知何故,测试台无法在 GHDL 上运行预期的输出。

体系结构代码库 IEEE;使用 IEEE.STD_LOGIC_1164.ALL;

试验台:

我预计会有一个波会形成一个上下跳动的时钟,但情况似乎并非如此。我想知道设计有什么问题。


我运行了以下命令:

这是我的输出在此处输入图像描述
,但对于时钟输出,我期望一个向上和向下信号,而不是 0 信号。

谢谢

0 投票
4 回答
1118 浏览

powershell - 为什么 PowerShell 会在 stderr 上截断消息?

我正在使用 PowerShell 脚本来控制编译器 (ghdl.exe) 的不同编译步骤。

编译器有 3 种不同的输出格式:

  1. 没有输出也没有错误 => $LastExitCode = 0
  2. 在 stderr 上输出(警告),但没有错误 => $LastExitCode = 0
  3. stderr 上的输出(错误),可能还有警告 => $LastExitCode != 0

因为处理 stderr 和 stdout 接缝非常有问题,所以我使用了这篇 StackOverflow 帖子中介绍的方法:PowerShell: Manage errors with Invoke-Expression

这是我添加消息着色的实现:

用法:

通常,编译器每行发出一条消息(错误或警告)。如下图所示,一些消息被截断为 8 行。这就是为什么我的输出着色不能按预期工作的原因。更多的行被检测为错误(误报),所以我在日志中找不到真正的错误。

切碎的消息(可点击)

例子:

预期结果:

据我所见,编译器(ghdl.exe)确实将消息作为整行发出。

问题:

  • 为什么会这样?
  • 我能解决这个问题吗?
0 投票
2 回答
2086 浏览

macos - mac上的VHDL,基础知识

我在这部分编程中真的很新,我试图安装 ghdl 但我没有成功。我使用 Emacs 编写 c 和 c++ 程序,并且我也在尝试使用它来编写 vhdl。有人可以帮我安装ghdl吗?我知道这是一个不好的问题,但我真的需要安装它,我很沮丧,我试过http://ghdl.free.fr/但“读我”文件太复杂了,我几乎不知道如何使用shell(终端),那里有很多指令要写。好吧,我试过了,但仍然无法用 ghdl 编译,终端无法识别该命令。

如果有人可以在不复杂的情况下提供一个好的教程或发布源链接,我将非常感激。如果您回答有关此问题的另一个问题的链接,请相信我,我已经阅读并且它对我没有帮助(可能是因为我现在真的很无知)。

0 投票
1 回答
867 浏览

vhdl - 静态常量违反 bit_vector 边界

在 SO 而不是 EE 上发布这个问题是因为我正在努力解决编码/软件缺陷。


我是 VHDL 新手,正在阅读“Free range VHDL”一书。玩弄bit_vector我发现在总线语法中访问单线如下bus_name(0)(0 只是示例)。

牢记这一点,我编写了 4 输入多路复用器的简单表示。

我正在使用ghdl以下命令在 linux 下处理 VHDL。

结果,我收到了 4 条错误消息,显然是因为data(0)以及data(1)下面列出的其他消息。

问题是:

  • 如何解决这个问题?
  • 如果bus_name(index)是正确的语法吗?

更新:

为了不犯同样的错误,了解数组/范围如何在 VHDL 中工作至关重要。

感谢帮助!

0 投票
1 回答
170 浏览

vhdl - 为什么 GHDL 中的无约束常数向量不被认为是静态的?

我有以下代码:

我的生成语句收到以下错误消息:

...范围必须是静态离散范围

当我将常量更改为受约束的变体时,它可以工作...

为什么 2. 示例更静态?

编辑:
链接到 GitHub 上的GHDL 问题讨论