SystemC与HDL


9

我目前正在参与一个大学项目,以实现现有指令集的处理器。这个想法是,到项目结束时,我应该能够综合该设计并在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具有更高的抽象级别。他还声称,更容易确定正确的设计时间。这在多大程度上是正确的?

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


嗨,我能问问这是哪门学术课程吗?
2015年

嗨,我学习了计算机科学。严格来讲,这不是标准课程的一部分,我选择从头开始为我的硕士论文基于Transputer构建处理器。
安德烈斯AG

Answers:


3

您的朋友误解了您在做什么,或者正在考虑将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启动了该项目,但是从您的答案中我仍然学到了很多东西!
安德烈斯AG

3

您正在大学学习,并且正在学习(大概)是一名工程师。作为工程师,您应该了解事物是如何从低层次进行的。为了实现这一点,您需要剥离抽象层,而不是添加它们。

因此,我的建议是您不要在该项目中使用SystemC。您可能最终会在职业生涯中使用它,但这是未来的发展。

如果您仍然选择使用它,则应先与您的讲师交谈。当我在大学里完成类似的任务时,由于我上面概述的原因,我们被明确告知不要使用SystemC。


0

老实说,这就是编程。您可以在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/


0

SystemC用于复杂的设计。例如,在体系结构级别指定一些东西。优势在于,与Verilog设计相比,代码行更少,仿真时间更快,周期精确的模型。不要相信有人说SystemC是“不可”合成的。当然是。为了给您一个想法,在Verilog中,我们具有抽象级别,您可以使用开关级别/行为级别进行建模。根据设计的复杂性进行选择。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.