我目前正在参与一个大学项目,以实现现有指令集的处理器。这个想法是,在项目结束时,我应该能够综合这个设计并在 FPGA 中运行它。到目前为止一切都很顺利,几天前我开始用 Verilog HDL 实现设计,并得到了一个非常简单的版本。现在的问题是:我联系了一些从事硬件设计多年的人,他们建议在我继续之前,我应该转向使用 SystemC 来实现。现在,让我非常非常困惑,因为这是我的想法:
Verilog -> 作为一种专门针对硬件设计的 HDL 语言。具有一些抽象级别,例如结构和行为 Verilog,但它是指定设计 RTL 的一种非常简洁的形式。您绝对可以根据您选择的 FPGA 使用一堆工具来合成它(在我的例子中,我使用的是 Xilinx Vivado 2014 和 Zynq 板)。不利的一面是,普通的 Verilog 没有为验证提供足够的抽象,这就是为什么你有像 System Verilog 这样的东西。
SystemC -> 这是一个 C++ 类库,有效地引入了 C++ 中的时间概念,并允许您进行事件驱动的模拟。显然,它比任何 HDL 都要高级得多,而且这里的东西可以更快地实现。这使它成为一个非常好的工具,例如验证甚至模拟器的实现,这样人们就可以在实际制造之前开始为芯片设计驱动程序和东西。显然,还有一个 SystemC 子集是可综合的(我认为即使是 Xilinx Vivado 也可以做到这一点),并且在某些情况下,它使 SystemC 能够用于设计非常大的系统,其中更高级别的抽象很方便。
所以,我的问题是:
- SystemC 和 Verilog(或其他 HDL 语言)的这些概念是否正确?
- 什么时候应该使用 SystemC,什么时候应该使用 Verilog?
- 有人告诉我,即使在 Verilog 中,在实现的关键部分使用大量行为代码可能会有点问题,因为您基本上对如何合成它的合成工具的限制要少得多。有了更高层次的抽象,这不是一个问题吗?即,如果我使用 SystemC,我可能会得到一个非常缓慢、耗电、大型的设计......
- 建议 SystemC 的人提到我似乎在做“架构探索”,这就是他更喜欢 Verilog 的原因。这到底是什么意思呢?我的印象是架构通常指的是指令集,而微架构指的是指令集的实现(因此微架构是执行指令的实际 rtl)。那么架构探索是否意味着他认为我正在实现一个处理器以查看指令集的可行性?
- 他说使用 SystemC 的一个论点是它更容易,因为它比 HDL 具有更高的抽象级别。他还声称更容易获得正确的设计时机。这在多大程度上是真的?
非常感谢您的帮助,我有点困惑,发现很难在线获得有关此的明确信息。谢谢!