10

原来的问题是:

VHDL 中有哪些真正有用但深奥的语言特性,您实际上已经能够使用它们来完成有用的工作?

原来的问题被删除了,我只是在回答。我认为这是一个有趣的问题,尤其是当您将 VHDL 与其他(普通)编程语言进行比较时。

免责声明:我只在 VHDL 中做了一些琐碎的例子。

但是与其他编程语言相比,我特别喜欢的是(这可能不是您要问的,但我认为每个程序员都应该对 VHDL 有所了解):

  1. 具有单个接口的多个不同实现(架构)并轻松交换它们的能力。

  2. 语言模型固有的低开销并行性。它让我想起了数据流语言。

4

8 回答 8

7

VHDL中有哪些真正有用但深奥的语言功能......

用户定义的物理类型,例如“角度”、“电压”、“温度系数”,然后您可以在其中编写类似temp <= 45 deg;volt <= 3.3 V;.

于 2009-11-24T10:30:52.663 回答
6

有时,做某事的方法不止一种。好的,大多数时候,您可以在 VHDL 中以多种方式做事。查看您想要根据另一个信号的值为信号分配不同值的情况。

选定的信号分配

最具体的方法是使用 as selected 信号分配。根据 的几个可能值b,您为 分配一个值a。这里的代码没有冗余。

with a select b <=
        "1000" when "00",
        "0100" when "01",
        "0010" when "10",
        "0001" when "11";

条件信号分配

条件信号分配的构造更通用一些。对于每个选项,您必须给出一个条件。这意味着您可以将任何布尔表达式编写为条件,这比相等检查给您更多的自由。虽然这个结构会给你更多的自由,但也有更多的冗余。a =我们必须在每一行上写相等检查 ( )。如果你使用一个名字很长的信号,这会使你的代码变得更庞大。此外,所选信号分配中使用的分隔符是逗号。在条件信号分配中,您需要else关键字。相同功能的更多代码。

b <= "1000" when a = "00" else 
         "1000" when a = "01" else 
         "1000" when a = "10" else 
         "1000" when a = "11";

结合案例陈述的过程

最常用的构造是过程。在此过程中,您可以编写 case 语句或 if 语句的级联。这里有更多的冗余。您的流程(开始、结束)和敏感度列表的框架代码。这不是一个很大的努力,但是当我起草这个时,我把b敏感列表而不是a. 容易犯一个小错误。您还需要指定案例中发生的other情况。

process(a)
begin
        case a is
                when "00" => b <= "1000";
                when "01" => b <= "0100";
                when "10" => b <= "0010";
                when "11" => b <= "0001";
                when others => assert "unreachable" severity failure;
        end case;
end process;

虽然最后一个代码片段是最大的并且可能最容易出错,但它也可能是最常见的。它使用两个熟悉且经常使用的结构:过程和案例陈述。

选择和条件信号分配的问题在于它们的语法中没有系统。含义几乎相同,但语法不同,足以让您失望。我认识许多工程师,他们的办公桌上永远有一本 Doulos Golden Reference Guide to VHDL。这对 Doulos 有好处,因为他们的名字一直被提及。

于 2011-06-01T19:44:06.823 回答
5

VHDL 的最佳特性——它用于设计和实现硬件。:)

具有单个接口的多个不同实现(架构)并轻松交换它们的能力。

与 C++ 中的 OOP 相同:您可以定义一个接口和多个实现。在 VHDL 中为同一设备创建仿真和综合模型非常有用。

语言模型固有的低开销并行性。它让我想起了数据流语言。

实际上,有实现并行执行语义的 C++ 的 SystemC 库。您可以轻松下载并尝试:http ://www.systemc.org 。我正在研究 C++ 到 RTL 的综合。所以我希望在 4-5 年内所有的硬件开发都将使用 SystemC 和 C++ 来完成。

于 2009-06-22T19:11:15.777 回答
2

Quite a few of VHDL's "esoteric" features have their origin in Ada. I mention this because I'm not an Ada expert, but learning Ada has greatly improved my vision of what can be accomplished in VHDL.

于 2011-05-31T22:43:36.853 回答
2

VHDL中有哪些真正有用但深奥的语言特性

首先,我不认同 VHDL 具有“深奥”特征的理论。然而,普遍存在的 VHDL“风格”通常受硬件合成器支持的 VHDL 子集的影响。

VHDL 世界中的等式非常简单:如果工具支持语言子集,就会使用它。如果没有,该功能可能未被充分利用。

特别是当您将 VHDL 与其他(普通)编程语言进行比较时。

请注意,VHDL 不是一种编程语言。相反,它是一种用于描述离散事件系统的语言(具有“偶然”的结果,即它可用于描述数字硬件)。我想与编程语言的比较源于 VHDL 看起来像一些实际的编程语言。

现在对OP的问题的一些实际答案。

VHDL中有哪些真正有用但深奥的语言功能......

这是我的选择,没有特别的顺序。

  1. 架构: 到目前为止,为接口选择不同架构的能力是 VHDL 最有用的功能,并且一直在使用。
  2. 生成器:使用生成器,您可以很容易地描述复杂的常规硬件结构。想想乘法器、加法器、复杂的管道等。不幸的是,许多工具将生成的输出弄得一团糟。
  3. 块:将您的设计细分为子块的廉价方法;但并非所有工具都支持它。
  4. 信号分辨率: 在模拟电路等时非常有用,但对于硬件合成则不然。
  5. 属性: 将指令附加到模拟器/合成器以帮助它找到实现电路的最佳方法的好方法。虽然在大多数情况下,这可以通过合成器/映射器/p&r 工具的命令行选项来完成,但属性感觉更自然,因为生产硬件所需的所有信息都被限制在一个地方。
于 2009-07-17T07:56:21.030 回答
1

条件信号分配与 case 语句相同 - 即等权分支。选定的信号分配是一种优先编码器结构——即相当于嵌套的 if/then/else 语句。请注意,vhdl 中的所有并发赋值语句都等同于具有敏感度列表的进程,该敏感度列表由赋值运算符右侧的信号组成。

我最喜欢的深奥功能是配置(当您拥有同一实体的多个架构时特别有用)和访问类型。这些允许创建动态数据结构。对硬件设计没有用,但对创建测试台非常有用。重载我的参数类型签名的方法也使得代码非常易读 - 这是 SystemVerilog 中遗憾地缺乏的功能。

保罗。

于 2011-06-01T19:51:28.653 回答
0

我所知道的最深奥的是三个原则的结合:

  1. 字符文字:'\'
  2. 扩展标识符:\'bar\
  3. 属性:标识符'属性

现在这个表达式是什么?: foo'\'bar\ 它是 foo 的 \'bar\ 属性。

我想没有 vhdl 词法分析器能幸免于难。

于 2013-04-07T13:11:02.203 回答
0
  1. 您可以在包中包含信号。

  2. 您可以在配置中创建新端口。

  3. 您可以根据返回类型重载函数。

  4. 您可以在实体中定义信号,这些信号可以从架构中使用。这对我所知道的任何事情都没有用,但它就在那里。

于 2013-04-18T17:31:02.510 回答