【问题标题】:Why is Verilog not considered a programming language? [closed]为什么 Verilog 不被视为一种编程语言? [关闭]
【发布时间】:2011-02-25 19:23:48
【问题描述】:

教授在课堂上说学生不应该说他们学会了用 Verilog 编程。他说像 Verilog 这样的东西不用于编程,它用于设计。那么 Verilog 与其他编程语言有什么不同呢?

【问题讨论】:

标签: programming-languages verilog


【解决方案1】:

Verilog 与 VHDL 一样,旨在描述硬件。相反,诸如 C 或 C++ 之类的编程语言提供了对软件程序的高级描述,即微处理器执行的一系列指令。

实际上,Verilog 和 VHDL 不提供与编程语言相同的功能,尽管它们看起来非常相似。例如,C/C++ 中的 for 循环描述了给定 sn-p 代码的顺序执行;相反,Verilog/VHDL 中的for ... generate 循环描述了同一硬件构建块的多个并行 实例(例如,AND 逻辑门)。准确地说,Verilog 中也存在一个普通的for 循环,但同样,它必须是“可综合的”,即编译器必须能够生成符合描述的逻辑。

通常,Verilog/VHDL 的初学者会很想将给定的函数/算法从 C/C++ 类型的伪代码直接“翻译”为 Verilog/VHDL:令人惊讶的是,它有时可能会起作用,但它总是会导致显着糟糕的设计。要想成为一名优秀的 Verilog/VHDL 程序员,必须真正意识到这些差异。

【讨论】:

  • 您对常规 Verilog/VHDL for 循环的描述不正确。它与 C/C++ 对应物一样顺序。 “并行”版本是for .. generate
  • 确实不准确:我根据您的评论修改了我的答案。我的观点是,大多数情况下,您用 C/C++ 编写的 for 循环类型不能轻易转换为 Verilog/VHDL。您需要记住将生成的硬件类型(for 循环会产生真正的混乱)
  • for 循环中隐含的序列可能会创建多个逻辑级别。这对于时间来说可能是一个不好的解决方案,但对于面积来说是一个很好的解决方案。此外,根据具体情况,即使从最初的非最佳结构,逻辑综合也可以出色地创建良好的逻辑。换句话说,硬件设计人员必须“了解他的编译器”(综合工具)。但这不正是优秀程序员应该做的吗?
  • @Jan:+1,这是一个很好的观点。尽管如此,我认为硬件设计师需要比软件程序员更清楚他们的编译器会做什么。
【解决方案2】:

Verilog 是一种硬件定义语言。编程语言通常被理解为用于告诉现有硬件做什么的语言,而不是用于重新配置所述硬件的语言。

【讨论】:

    【解决方案3】:

    我对 Verilog 一无所知,但只是快速搜索了一下,维基页面似乎很好地解释了您的老师似乎在逃避的概念差异。正如这里的其他一些海报所写的那样,我不知道我会认为这不是一种编程语言,我认为程序员很容易相信,如果它不是某种应用程序编程或汇编编程,那么它就不是真正的编程,但总之那是BS。机器代码上面的所有内容对我来说基本上都是一样的,如果它是我给计算机的文件,它告诉计算机如何做某事它正在对计算机进行编程(我想问题是在用户和开发人员之间划清界限,我们喜欢感觉很特别)。除非我们计划很快回滚到打孔卡,否则我认为任何具有类似 C 的语法或允许您以语法严格(定义明确)的方式进行描述并修改计算机的行为(它为给定的输出输入),那么你已经完成了某种意义上的编程。

    http://dictionary.reference.com/browse/programming

    来自维基页面:

    http://en.wikipedia.org/wiki/Dataflow_language

    数据流编程侧重于事物的连接方式,而命令式编程则侧重于事物的发生方式。在命令式编程中,程序被建模为一系列操作(“发生”的事情),这些操作之间的数据流对于操作本身的行为是次要的。然而,数据流编程将程序建模为一系列(有时是相互依赖的)连接,这些连接之间的操作是次要的。

    (我认为这里的关键是编程类型的限定符,而不是一种是“编程语言”而另一种是“设计语言”,据我了解,它们都是编程语言,它们只是有不同的目的和实现)。当我想到设计时,我基本上会想到这个: http://dictionary.reference.com/browse/design 这不是一个程序,尽管一个程序可能会利用设计(并且可能应该,通常称为设计模式,但不是你在做什么)

    链接自:http://en.wikipedia.org/wiki/Verilog

    在你的老师看来,这种语言可能会被用来解决你日常使用的 Java/C 程序中的不同问题,并且通过不同的方式,但是说它不是程序似乎是错误的。

    【讨论】:

      【解决方案4】:

      因为是HDL,所以是定义硬件,verilog中做的任何事情(不是真的什么,而是可以综合的东西)都会被综合成实际的硬件。所以你不能只使用类和 OOPS 概念等编程特性,因为它不能创建任何硬件。

      但在 C 语言中,所有内容都将转换为可执行的 hex 文件,该文件将在执行程序时加载到您的 ram 中。

      另一个基本区别是硬件中的一切都是并发的,所以如果你在verilog中写了a=b+1和c=d+1,那么在综合硬件中,两个模块将同时工作。但是在 C 中,一切都是顺序的,所以在同一个 C 程序中,实际上两条指令都会在你的处理器中被一一加载。

      【讨论】:

        【解决方案5】:

        它是一种编程语言,不是用来编程软件,而是用来描述硬件设计——但输出不一定是我们理解的“应用程序”。

        该语言具有正式的语法。

        【讨论】:

          【解决方案6】:

          Verilog 包含描述逻辑网表 (RTL) 的特性和便于对其进行仿真的特性。将 RTL 描述描述为程序可能会传达出这样的描述:描述它的人并不完全理解逻辑设计或综合。将测试平台刺激描述为程序是合适的。

          【讨论】:

          • 另外,它可能表明这样的设计师知道逻辑综合真正可以做什么,这可能与被误解的“思考硬件”范式蒙蔽了双眼的同行形成对比。
          • 我认为您在此处使用了“设计师”一词,而您的意思是“程序员”;)
          【解决方案7】:

          verilog/vhdl 用于在芯片上创建和设计特定的应用系统,嵌入到电子设备中。

          c/c++在电脑上使用的设计软件

          【讨论】:

            【解决方案8】:

            我将以不同的方式解决这个问题。编程语言的目的是什么?程序的输出会影响现实世界以及您的目标和期望吗?如果是,那么verilog当然是一种编程语言。 Console.log 的含义与其在现实世界中的含义一样多,例如。 console.log("you have a Million unit") 没有授权就没有法令。所以verilog在某种意义上是一种编程语言。

            【讨论】:

              猜你喜欢
              • 2010-09-13
              • 2011-02-07
              • 1970-01-01
              • 2013-09-22
              • 1970-01-01
              • 1970-01-01
              • 2010-09-28
              • 2014-08-12
              • 2018-02-22
              相关资源
              最近更新 更多