SystemC 与其他 HDL

电器工程 验证日志 视频文件 设计 高密度脂蛋白 系统c
2022-01-20 11:11:15

我目前正在参与一个大学项目,以实现现有指令集的处理器。这个想法是,在项目结束时,我应该能够综合这个设计并在 FPGA 中运行它。到目前为止一切都很顺利,几天前我开始用 Verilog HDL 实现设计,并得到了一个非常简单的版本。现在的问题是:我联系了一些从事硬件设计多年的人,他们建议在我继续之前,我应该转向使用 SystemC 来实现。现在,让我非常非常困惑,因为这是我的想法:

Verilog -> 作为一种专门针对硬件设计的 HDL 语言。具有一些抽象级别,例如结构和行为 Verilog,但它是指定设计 RTL 的一种非常简洁的形式。您绝对可以根据您选择的 FPGA 使用一堆工具来合成它(在我的例子中,我使用的是 Xilinx Vivado 2014 和 Zynq 板)。不利的一面是,普通的 Verilog 没有为验证提供足够的抽象,这就是为什么你有像 System Verilog 这样的东西。

SystemC -> 这是一个 C++ 类库,有效地引入了 C++ 中的时间概念,并允许您进行事件驱动的模拟。显然,它比任何 HDL 都要高级得多,而且这里的东西可以更快地实现。这使它成为一个非常好的工具,例如验证甚至模拟器的实现,这样人们就可以在实际制造之前开始为芯片设计驱动程序和东西。显然,还有一个 SystemC 子集是可综合的(我认为即使是 Xilinx Vivado 也可以做到这一点),并且在某些情况下,它使 SystemC 能够用于设计非常大的系统,其中更高级别的抽象很方便。

所以,我的问题是:

  1. SystemC 和 Verilog(或其他 HDL 语言)的这些概念是否正确?
  2. 什么时候应该使用 SystemC,什么时候应该使用 Verilog?
  3. 有人告诉我,即使在 Verilog 中,在实现的关键部分使用大量行为代码可能会有点问题,因为您基本上对如何合成它的合成工具的限制要少得多。有了更高层次的抽象,这不是一个问题吗?即,如果我使用 SystemC,我可能会得到一个非常缓慢、耗电、大型的设计......
  4. 建议 SystemC 的人提到我似乎在做“架构探索”,这就是他更喜欢 Verilog 的原因。这到底是什么意思呢?我的印象是架构通常指的是指令集,而微架构指的是指令集的实现(因此微架构是执行指令的实际 rtl)。那么架构探索是否意味着他认为我正在实现一个处理器以查看指令集的可行性?
  5. 他说使用 SystemC 的一个论点是它更容易,因为它比 HDL 具有更高的抽象级别。他还声称更容易获得正确的设计时机。这在多大程度上是真的?

非常感谢您的帮助,我有点困惑,发现很难在线获得有关此的明确信息。谢谢!

4个回答

你的朋友要么误解了你在做什么,要么认为 SystemC 是一个初步步骤。HDL 是唯一的选择 在任何情况下,我建议您使用可综合的 SystemVerilog,它足够强大,可以进行大量探索,整体与 Verilog 基本相同。

  1. 部分。您区分了 Verilog 作为 HDL,SystemVerilog 作为验证语言,并说 SystemC 具有更高的抽象性,但也是可综合的子集。这里有两个错误。首先,SystemVerilog也是一个具有完全可综合子集的 HDL,可以通过明显的修复(例如,一种单一logic类型的电线)和许多可综合的抽象机制(例如接口)恢复为 Verilog。它受到包括 Vivado 在内的许多工具的支持。另一方面,SystemC不是可直接合成(甚至不是任何子集),它用于更高级别的建模和架构探索,尽管它的某些子集可以输入到高级合成工具(例如 Vivado HLS)中,然后将其转换为可合成的(尽管人类不可读)Verilog .

  2. Verilog 和 SystemVerilog 的可综合子集是用于硬件设计的语言,通常用于在寄存器传输级别描述硬件,即作为一组块,如寄存器、组合函数、有限状态机等。Verilog-2001 也可以适当地描述hw 作为门级网表,而 SV 也可用于更高级别的抽象,因此具有验证能力。另一方面,SystemC 适用于系统的高级建模,其中整个块仅以高级行为方式描述。它对于架构探索也非常强大,即改变架构的参数和特征并评估整体性能的变化。

  3. 只有当您在开发 RTL 模型时尝试以非 RTL 方式描述事物时,这才是正确的。例如,描述执行重复乘法累加的块的正确方法是驱动组合乘法器、组合加法器和寄存器的有限状态机 - 如果通过行为您是指将其描述为软件(for 循环),那么是的,行为代码不起作用。如果您的意思是通过以下方式描述我描述的每个块(mult、add、reg 和 FSM)always块,这非常好,并且将在网表中准确地实现您指定的内容并获得出色的结果(通常比限制综合工具优化逻辑能力的结构性方法更好)。事实上,只有坚持非常相似的模式,SystemC 高级综合通常会产生良好的结果,从而有效地消除使用高级语言的任何优势。在任何情况下,SystemC 都不是实现处理器的糟糕选择。

  4. 架构是一个非常宽泛的术语,不仅限于 ISA,实际上在现代处理器中 ISA 设计只是拼图中的一小部分。在系统设计的上下文中,架构通常意味着一组系统级选择(例如,DMA 可以由任何内核控制还是仅由一个特殊内核控制?L1 缓存是完全关联的还是集关联的?您有缓存吗?根本,还是在 SW 中管理内存?),包括 ISA 和处理器微架构。我认为您朋友的意思是您正在探索处理器的各种配置,这实际上是架构探索(如果您愿意,也可以是微架构探索)。但是,他可能错过了您将在 FPGA 上实现这一点的事实,这使得 SystemC 选项变得毫无意义。

  5. 这是错误的。如果您正在设计一个非常简单的加速器,例如流过滤器,那可能是正确的,因为 HLS 工具允许轻松插入流水线阶段,而您必须在 RTL 中手动执行此操作(或使用数据路径重定时,但我认为这不是可能在 Vivado 中)。在所有其他情况下,尤其是在高度复杂和结构化的对象(例如处理器)中,HLS 将导致必须进行合成的 Verilog 臃肿、无法调试且通常是完全错误的 Verilog - 这些工具根本不是为这项工作而设计的。

你在大学和学习(大概)成为一名工程师。作为一名工程师,您应该了解事情在低层次上是如何工作的。为了实现这一点,您需要剥离抽象层,而不是添加它们。

出于这个原因,我的建议是你不要在这个项目中使用 SystemC。你可能最终会在你的职业生涯中使用它,但那是为了未来。

如果您仍然选择使用它,那么您应该先与您的讲师交谈。当我在大学做类似的任务时,我们被明确告知不要使用 SystemC,原因我上面已经概述了。

SystemC 用于复杂设计。例如,在架构级别指定某些内容。优点是,比 Verilog 设计更少的代码行,更快的仿真时间,周期精确的模型。不要相信有人说 SystemC “不可”合成。当然如此。给您一个想法,在 Verilog 中我们有抽象级别,您可以使用切换级别/行为级别进行建模。选择是基于设计的复杂性。

更熟悉的描述硬件的方式是使用 Verilog,许多 EDA 工具都支持 Verilog 的综合。

通常对于较大的设计 SystemC 模型和测试平台由架构设计师设计。然后将这些模型提供给电子设计师使用 Verilog/VHDL 将它们转换为 RTL。

老实说,这都是编程。您可以在 SystemC 中做什么,您也可以使用 VHDL 或 Verilog 进行编程。这只是工具支持的问题。它不需要 SystemC 或 SystemVerilog。

如果供应商有什么明显的解决方案可以将 RTL 设计人员转换为系统编程,他们只需要为 FPGA 设计提供适当的语言支持。根据 Mentor 2012 Wilson 的调查,FPGA 的语言是 VHDL。http://blogs.mentor.com/verificationhorizo​​ns/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/