问题标签 [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.
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 中不允许进行循环边界计算?
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。那么也许一些供应商误解了标准?
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-binding
and -P.
,但没有任何改变。
我要怎么做才能绑定 MUXCY 组件?
PS有人可以创建一个'ghdl'标签吗?我没有足够的声誉:)
vhdl - GHDL:运算符“和”没有函数声明
这是我的剥离示例:
这一行在哪里:
生产
跑步时
在GHDL 0.32rc1 (20141104) [Dunoon edition]
Arch Linux 上。
根据VHDL 运算符,两个比较都返回布尔值,并且有and
两个布尔值的定义。那么我做错了什么?
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 实现兼容的接口。
解决方案:
- 将时钟生成代码移动到
tbGenerateClock
程序中 - 向受保护类型添加一个函数以获取内部停止状态
- 将此功能标记为
impure
这是修改后的模拟包:
vhdl - VHDL 时钟测试台
我正在尝试运行我在网上获取的代码,但不知何故,测试台无法在 GHDL 上运行预期的输出。
体系结构代码库 IEEE;使用 IEEE.STD_LOGIC_1164.ALL;
试验台:
我预计会有一个波会形成一个上下跳动的时钟,但情况似乎并非如此。我想知道设计有什么问题。
我运行了以下命令:
这是我的输出
,但对于时钟输出,我期望一个向上和向下信号,而不是 0 信号。
谢谢
powershell - 为什么 PowerShell 会在 stderr 上截断消息?
我正在使用 PowerShell 脚本来控制编译器 (ghdl.exe) 的不同编译步骤。
编译器有 3 种不同的输出格式:
- 没有输出也没有错误 => $LastExitCode = 0
- 在 stderr 上输出(警告),但没有错误 => $LastExitCode = 0
- stderr 上的输出(错误),可能还有警告 => $LastExitCode != 0
因为处理 stderr 和 stdout 接缝非常有问题,所以我使用了这篇 StackOverflow 帖子中介绍的方法:PowerShell: Manage errors with Invoke-Expression
这是我添加消息着色的实现:
用法:
通常,编译器每行发出一条消息(错误或警告)。如下图所示,一些消息被截断为 8 行。这就是为什么我的输出着色不能按预期工作的原因。更多的行被检测为错误(误报),所以我在日志中找不到真正的错误。
例子:
预期结果:
据我所见,编译器(ghdl.exe)确实将消息作为整行发出。
问题:
- 为什么会这样?
- 我能解决这个问题吗?
macos - mac上的VHDL,基础知识
我在这部分编程中真的很新,我试图安装 ghdl 但我没有成功。我使用 Emacs 编写 c 和 c++ 程序,并且我也在尝试使用它来编写 vhdl。有人可以帮我安装ghdl吗?我知道这是一个不好的问题,但我真的需要安装它,我很沮丧,我试过http://ghdl.free.fr/但“读我”文件太复杂了,我几乎不知道如何使用shell(终端),那里有很多指令要写。好吧,我试过了,但仍然无法用 ghdl 编译,终端无法识别该命令。
如果有人可以在不复杂的情况下提供一个好的教程或发布源链接,我将非常感激。如果您回答有关此问题的另一个问题的链接,请相信我,我已经阅读并且它对我没有帮助(可能是因为我现在真的很无知)。
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 中工作至关重要。
感谢帮助!
vhdl - 为什么 GHDL 中的无约束常数向量不被认为是静态的?
我有以下代码:
我的生成语句收到以下错误消息:
...范围必须是静态离散范围
当我将常量更改为受约束的变体时,它可以工作...
为什么 2. 示例更静态?
编辑:
链接到 GitHub 上的GHDL 问题讨论。