问题标签 [vhdl]
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.
string - 如何从字符串生成串行信号?
在给定固定延迟或时钟信号的情况下,如何将二进制字符串表示的数据(例如"01011101000100111"
,长度是可变的)发送到 std_logic 信号?我想要这个用于测试平台,所以我希望能够以尽可能少的麻烦任意更改二进制字符串,所以我正在考虑使用generate
.
process - VHDL - process() 什么时候第一次运行?
考虑:过程(a)根据我的文字:
在模拟时首先进入一个进程,此时它会被执行,直到它由于等待语句或敏感度列表而暂停自身。
我是否正确地推断即使敏感列表上没有任何事件,进程也必须运行一次?另外,如果一个架构中有多个进程,它们是否都执行一次呢?
vhdl - 如何从 VHDL 中的 rom_type 读取数据?
如何从 rom_type 读取数据?
vhdl - VHDL - std_logic_vector 的问题
我正在用累加器编写一个 4 位二进制加法器:
输出 :
-- 编译binadder的架构binadder
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(15):
中缀运算符“xor”没有可行的条目。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(15):
类型错误将中缀表达式“xor”解析为 std.standard.bit 类型。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中缀运算符“and”没有可行的条目。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中缀表达式“或”的右操作数中的表达式错误。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中缀运算符“and”没有可行的条目。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中缀表达式“或”的左操作数中的表达式错误。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
中缀表达式“或”的右操作数中的表达式错误。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(16):
类型错误将中缀表达式“或”解析为 std.standard.bit 类型。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(28):
中缀运算符“&”没有可行的条目。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(28):
类型错误解析中缀表达式“&”为类型 ieee.std_logic_1164.std_logic_vector。
** 错误:C:/Modeltech_pe_edu_6.5a/examples/binadder.vhdl(39):
VHDL 编译器退出
我相信我没有正确处理 std_logic_vector。请告诉我怎么做?:(
types - 在 VHDL 中将数字时钟中的时间模式从 12HR 更改为 24HR
大家好。
我正在用 VHDL 设计一个数字时钟,我应该在 FPGA 上合成它。我级联 S1、S2、M1、M2、H1 和 H2,其中(S1 = 秒 1,M1 = 分钟 1,H1 = 小时 1 等)。要求之一是时钟在 24 小时显示格式和 12 小时显示格式之间切换。鉴于 H1 和 H2 分别由 4 位表示,即总共 8 位来显示当前小时,我该怎么做。我是否需要连接 HR1 和 HR2,然后减去 12,然后再次取消连接?请记住,X mod 12 不是用于在 FPGA 中实现的可综合操作。
非常感谢。
programming-languages - 构建 VHDL 克隆
我计划为我最后一年的项目设计一种硬件模拟语言,如 VHDL。我应该怎么做?
任何帮助将不胜感激。
vhdl - 为什么 IEEE vhdl 标准库不是 STL?
IEEE vhdl语言参考手册只定义了一组有限的标准包。它没有定义标准类型的功能,例如STD_LOGIC。所以没有标准AND2,INV组件/运算符。
Altera 的 MAX+Plus II 似乎不支持 AND2、INV 组件(如果有,请随时纠正我),但 Xilinx Foundation 支持。
为什么 IEEE vhdl 标准库不能成为 C++ 世界中的 STL 之类的东西?
谢谢。
makefile - 从 makefile 生成 VHDL 条件
我有一个需要适应不同变体的 vhdl 设计。能够从 makefile 生成配置会很好。用于生成一个项目的 makefile 已准备好并可以正常工作。
我想避免为不同的项目使用不同的非常相似的文件。项目之间的唯一区别是某处的几行,其中一个包含一堆 vhdl 文件(和组件),另一个不需要。
例如,我想避免拥有两个不同的顶级 vhd 文件。相反,我想在顶层文件中使用条件来包含(或不包含)其他 vhdl 文件和组件,具体取决于项目。
你对如何做到这一点有什么建议吗?
我曾尝试使用外部预编译器(gcc),但无法使其工作。此外,我真的不想强迫其他开发人员安装 gcc,或者在 Xilinx IDE 中无法使用 vhdl 文件。
编辑:添加示例
我有两个产品,A 和 B。我想对这两个产品使用相同的文件,使用条件来排除产品 B 的某些部件,生成不同硬件部件的配置,当然还有其他东西。
我想从命令行生成配置:
make product_A
和make product_B
.
如果我generates
根据目标在我的 vhdl 中包含/排除代码,那么 xst 需要知道正在构建什么目标。问题是关于如何将当前目标从 makefile 传递给 xst。
在使用 gcc 编译的 C 代码中,我会放入源代码:
,然后在makefile中设置define:
vhdl - 在单周期数据路径中加载半字和加载字节
有人问过这个问题,即在无需更改数据存储器的情况下将加载字节实现到单周期数据路径中,解决方案如下。
替代文字 http://img214.imageshack.us/img214/7107/99897101.jpg
这实际上是一个很现实的问题;大多数内存系统完全基于字,单个字节通常只在处理器内部处理。当您在许多计算机上看到“总线错误”时,这通常意味着处理器试图访问未正确字对齐的内存地址,并且内存系统引发了异常。无论如何,因为字节地址可能不是 4 的倍数,我们不能直接将它们传递到内存。但是,我们仍然可以获取任何字节,因为每个字节都可以在某个字中找到,并且所有字地址都是 4 的倍数。所以我们要做的第一件事是确保我们得到正确的字。如果我们取地址的高 30 位(即 ALUresult[31-2])并将它们与低端的两个 0 位组合(这就是“左移 2”单元真正在做的事情),我们得到了包含所需字节的字的字节地址。这只是字节自己的地址,向下舍入为 4 的倍数。此更改意味着 lw 现在也将地址向下舍入为 4 的倍数,但这没关系,因为未对齐的地址无论如何都不适用于此内存的 lw单元。好的,现在我们从内存中取回数据字。我们如何从中得到我们想要的字节?好吧,请注意,字中字节的字节偏移量仅由字节地址的低 2 位给出。因此,我们只需使用这 2 位来使用多路复用器从字中选择适当的字节。注意大端字节编号的使用,这适用于 MIPS。下一个,我们必须将字节零扩展为 32 位(即,只需将其与高端的 24 个零组合),因为问题指定这样做。实际上,这是问题中的一个小错误:实际上, lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。lbu 指令对字节进行零扩展,但 lb 对其进行符号扩展。那好吧。最后,我们必须扩展 MemtoReg 控制的多路复用器以接受一个新的输入:lb 情况下的零扩展字节。MemtoReg 控制信号必须加宽到 2 位。原来的 0 和 1 的 case 分别变成了 00 和 01,我们添加了一个新的 case 10,它只在 lb 的情况下使用。
即使在阅读了解释之后,我也不太了解它是如何工作的,尤其是关于将 ALU 结果左移 2 会给出字节地址......这怎么可能?所以如果我想加载一个半字然后我会做一次左移,我会得到半字的地址??什么是更好的方法来加载字节,通过修改数据存储器加载半字?(上面的问题提出了我们不能修改数据存储器的限制)
hardware - 'if' vs 'when' 用于制作多路复用器
我被告知使用'when'语句来制作多路复用器,但不要使用'if'语句,因为它会导致时序错误......我不明白这个......那么'if'和'when'有什么区别' ? 它们是否映射到硬件中的相同事物?