使用Verilog或VHDL而不是C的动机是什么?

时间:2014-10-09 22:44:13

标签: embedded verilog hdl firmware

我来自编程背景,并没有过多地使用硬件或固件(最多有点电子产品和Arduino)。

使用硬件描述语言(HDL)(例如Verilog和VHDL)而不是像C或某些程序集这样的编程语言有什么动机?

这个问题根本就是一个问题吗?

我读到硬件,其固件是用HDL编写的,在并行运行指令方面具有明显的优势。但是,我很惊讶地看到讨论表达了怀疑whether to write firmware in C or Assembly(如果你不一定有CPU,那么大会是如何适当的?)但我得出结论它也是一个选择。

因此,我有几个问题(不要犹豫解释):

  1. 固件真的可以用HDL或软件编程语言编写,或者它只是执行相同任务的另一种方式?我喜欢现实世界的例子。每个选项产生什么限制?

  2. 我知道固件相对于软件的常见用途是硬件加速器(例如GPU,网络适配器,SSL加速器等)。据我了解,这种加速并不总是必要的,但只是推荐(例如,在SSL和复杂算法加速的情况下)。在所有情况下都可以选择固件和软件吗?如果没有,我会很高兴看到固件明确且非常合适的情况。

  3. 我读过固件主要是刻录在ROM或闪存上。它是如何在那里代表的?有点像软件吗?如果是这样,有什么深刻的区别?在固件的情况下是否可以使用适配电路?

  4. 我想我在某些假设中犯了一个错误,请原谅我。谢谢!

2 个答案:

答案 0 :(得分:2)

术语“固件”最多定义不明确,我相信这可能是导致您混淆的原因。

历史 - 在可编程逻辑器件可用之前 - 术语“固件”用于表示存储在只读存储器(ROM)中的代码。当时唯一可用的ROM技术是 mask-ROM ,其中代码在制造硅片时被烧入设备,因此在不更换芯片的情况下无法更改 - 这非常“坚固”。即使后来的可编程只读存储器(PROM)(可以在制造后进行编程),因为它是一次性可编程(OTP),该术语仍然适用。

随着紫外可擦除EEPROM的推出,固件变得不那么“坚固”,但缺乏在线可编程性以及需要将设备暴露在紫外线中以擦除它仍然使嵌入式软件的更换成为一件苦差事 - 通常需要取出芯片,将其放入橡皮擦中一个小时左右,然后在专用编程器中进行编程。

NOR闪存的出现,其中代码可以直接从设备存储和执行,但也可以在此上下文中轻松更改 in-circuit ,术语 firmware 变得不那么常见了。但是,它仍然被用于(可能主要由较老的从业者)引用从随机访问,只读存储器设备存储和执行的嵌入式软件,而不是从文件系统加载到RAM中。 / p>

术语 firmware 用于指代可编程逻辑配置是更新的,可能只是因为它是硬件,但配置写得很像< em>软件使用高级语言。

这样做的结果是你没有选择

  

“Verilog和VHDL over C ++等编程语言”或

因为在每个上下文中,术语 firmware 只是指不同的概念。

最好完全避免使用术语 firmware ,因为这对不同的人或不同的环境来说意味着不同的事情。

某些硬件描述语言基于软件开发语言 - 例如 Handle C ,这是 C,这可能会有一些混乱。 -like 硬件描述语言。

答案 1 :(得分:0)

这个问题不久前会出现很多问题,但是现在的平台你现在可以在C语言和HDL语言之间进行翻译(而不是使用C语言的Handel-C扩展,从90年代开始),主要是在C语言和行为VHDL之间。企业提供的许多新工具,如Xilinx电子系统级设计生态系统或Impulse-C(http://www.impulseaccelerated.com/products_universal.htm

重要的是要知道,因为C是中级语言,而VHDL是,如所述的Hrdware描述语言。 C只能处理顺序指令,而VHDL允许顺序执行和并发执行。

即使可以使用纯逻辑或算法思维成功编写C程序, 成功的VHDL程序员需要具备硬件电路的全面工作知识。能够预测给定代码如何在硬件中实现。

在这两种语言中,您都关心资源使用情况,但是以不同的方式(除非您正在为资源受限的设备进行编程)。但是当谈到VHDL时,除了存储器之外,其他逻辑元件在FPGA中是有限的(通常将VHDL代码放入其中)。