作者 Topic: Chisel/Scala 硬件描述语言: why?  (Read 11313 times)

0位成员和1位访客正在查看此主题。

在线的 布鲁斯胡特

  • 超级贡献者
  • ***
  • 职位:1973
  • 国家: nz
  • 前身为SiFive,Samsung R&D
Re: Chisel/Scala 硬件描述语言: why?
« 在以下问题上回复#50: 一月12,2019,12:19:31上午»
也许您可以*做更多的事情。问那些快乐的人'是Chisel最重要的品质,它使它领先于其他语言,并在此处发布他们的答案。

我问了他们,​​他们给了我我昨天在这里发布的链接。

Chisel只是硬件创建管道的一部分,其工作原理与软件中的LLVM十分相似。

使用LLVM,您可以使用各种编程语言编译器,包括clang(c / c ++),go,rust,fortran,它们全部生成LLVM IR(中间表示)。然后,您可以在IR上运行各种与机器无关和与机器有关的优化。然后,将IR馈送给x86或ARM或RISC-V或其他代码的代码生成器。如果有人编写了新的优化程序,它将适用于每种语言和每种处理器。如果有人在后端编写新的处理器,它将适用于每种编程语言。等等。

就凿子而言'是一种高级语言,人类不仅可以指定某些特定的硬件项目,还可以指定用于硬件设计系列的生成器。 凿子输出firrtl。有适用于firrtl的常规优化程序可以清理设计。有适用于firrtl的优化器,可以使设计适应于更好的FPGA(或更好地适合LUT4或LUT6 FPGA)或更好地适合SoC。有"optimizers"对于混淆的firrtl,以便您可以给某人提供可合成的HDL,它可以工作,但希望他们能赢'无法弄清楚它是如何工作或更改的。然后是firrtl的后端,这些后端会生成Verilog或其他传统的HDL,以将其输入到物理设计工作流程中。

除了可以使用Chisel参数化模块外,还有一个名为Diplomacy的工具,该工具可以计算出不同模块实例化之间的参数约束,可以进行诸如查找两个模块之间的最佳总线宽度之类的工作,或者确定是否存在某些控制信号。必要或没有给出选择的选项。

并非每个人都需要所有这些东西。如果你'如果只做一种固定的设计,而该设计只能以一种方式实施,那么使用传统工具可能会同样困难。它'就像试图向一个非常乐于编写ARM汇编语言的人解释为什么他们可能想改用C(因此他们的代码也可以在x86和PowerPC和RISC-V上工作)或为什么他们可能想使用C ++模板,或者为什么他们可能想用Perl或Lisp或Haskell编写一个为他们生成一些C ++代码的程序。
« 上次编辑:2019年1月12日,上午12:23:20 by brucehoult »
 
以下用户对此帖子表示感谢: jklasdf, ve7xen, 弗斯米尔诺夫

离线 遗产

  • 超级贡献者
  • ***
  • !
  • 帖子:4415
  • 国家: ch
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#51: 一月12,2019,12:26:48上午»
如果不这样做,就离开线程'没有任何有用的贡献。

你 are irritating people in this topic (yer, I got two PMs telling me how irritating you are), so I wanted to do some 幽默,它基于像我这样的人对新工具的真正想法:我们已经将免费和有偿的时间花在了日常工具上,现在我们想听听为什么我们应该花时间在另一种工具上。
 

在线的 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7274
  • 国家: 我们
    • 个人网站
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#52: 一月12,2019,12:36:27上午»
引用来源:旧版
你在这种行为中有多无聊和愚蠢  :palm:
即使有人在开玩笑  :palm: :palm:
停止做这个愚蠢的帖子,删除东西。你不是在开玩笑,而是在拖钓。
亚历克斯
 

离线 遗产

  • 超级贡献者
  • ***
  • !
  • 帖子:4415
  • 国家: ch
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#53: 一月12,2019,12:40:54上午»
停止做这个愚蠢的帖子,删除东西。你不是在开玩笑,而是在拖钓。

好,享受我的忽略列表。
 

离线 遗产

  • 超级贡献者
  • ***
  • !
  • 帖子:4415
  • 国家: ch
Re: Chisel/Scala 硬件描述语言: why?
« 在以下问题上回复#54: 一月12,2019,12:41:34上午»
@brucehoult
好的,假设我使用凿子/秤,并且得到了...自动生成的VHDL文件。这对于我通常需要使用的ModelSim和其他HDL模拟器将是很好的。但是,现在假设我在ModelSim的波形图中遇到问题:在Chisel / Scala源上反向传播问题有多困难?

这让我有些困惑(可能我需要尝试一下)

p.s.
LLVM在x86上运行良好。在MIPS上...'s full of problems.
 

在线的 布鲁斯胡特

  • 超级贡献者
  • ***
  • 职位:1973
  • 国家: nz
  • 前身为SiFive,Samsung R&D
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#55: 一月12,2019,12:41:41上午»
也许这很有用:
或这个:
 

离线 奥比万雅各比

  • 经常贡献者
  • **
  • 帖子:985
  • 国家: nl
  • 什么'您谈论的这个yippee-yayoh针!?
    • Marctronix博客
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#56: 一月15,2019,07:01:26上午»
观看了第一个,非常有道理。
谢谢布鲁斯。
Arduino模板库 | Zalt Z80电脑
错误的代码不应该编译!
 

离线 北方人

  • 超级贡献者
  • ***
  • 帖子:2252
  • 国家: 钙
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#57: 一月15,2019,02:16:33下午»
观看了第一个,非常有道理。

我也看了看着很有趣。演讲完全集中在SoC上-基本上,他介绍了一个用于快速构建SoC的工具包。一世'从未使用过ASIC,因此'我很难理解为什么很难在设计中添加UART。我经常使用UART进行测试,并在FPGA设计中添加测试UART模块仅需一分钟(不包括合成/实现时间)。 HDL模块很容易在FPGA上组合在一起。 Xilinx甚至具有图形化方法,您只需实例化IP模块并使用鼠标绘制连接即可。您可以建立一个"SoC"这种方式只需几个小时,而无需编写任何代码。并非每个人都使用这种方法,但是很多人都使用这种方法。最后,FPGA工具分析逻辑,分析什么'置于FPGA内部(LUT,DSP,RAM,FIFO等)并相应地映射设计。如果您使用可编译为Verilog的Chisel,然后FPGA工具综合了Verilog,则FPGA工具将为您完成此任务。除非您专门针对某些元素,否则我不会'看不到任何从外部进行此操作的理由。这些工具还将自动删除总线上的多余电线,这些工具将删除它们。 ASIC当然有很大的不同,我不知道'我对ASIC工具了解不多,但我希望综合工具至少具有与FPGA工具相同的智能水平,至少从价格来看。

第二个很难看-我不能'真的看不到幻灯片上的内容,所以我只能听。它没有'说话者似乎希望FIRRTL优化可以改善设计。相反,他提出了一种发现不良FIRRTL的方法,如果您做一些愚蠢的操作,可能会导致不良FIRRTL。他的解决方案是返回并重新编写。这类似于使用FPGA时序工具的典型设计流程-如果编写愚蠢的代码,您的设计将无法时序,这些工具将向您显示失败的关键路径,然后您将返回并重新编写。
 

离线 贝斯曼59

  • 超级贡献者
  • ***
  • 职位:1644
  • 国家: 我们
  • 是的,我这样做是为了谋生
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#58: 一月15,2019,04:01:14下午»
我也看了看着很有趣。演讲完全集中在SoC上-基本上,他介绍了一个用于快速构建SoC的工具包。

对于那些不基于SoC的设计(我猜是大多数),这种方法没有真正的好处。

引用
I'从未使用过ASIC,因此'我很难理解为什么很难在设计中添加UART。

没有添加硬件。

引用
我经常使用UART进行测试,并在FPGA设计中添加测试UART模块仅需一分钟(不包括合成/实现时间)。 HDL模块很容易在FPGA上组合在一起。 Xilinx甚至具有图形化方法,您只需实例化IP模块并使用鼠标绘制连接即可。您可以建立一个"SoC"这种方式只需几个小时,而无需编写任何代码。并非每个人都使用这种方法,但是很多人都使用这种方法。

是什么让Vivado'的SoC工具(以及之前的EDK和Altera'的版本和MicroSemi'对SoC设计有效的版本是,当您在硬件中实例化IP内核时,您还将获得固件设备驱动程序。您获得核心地址所在的基地址's寄存器存在于处理器中'的内存映射,您可以获得一些方便的功能来使用它。而且,如果您更改连接或添加功能,则这些工具将在后台使所有内容保持同步。

我不'尽管有些聪明的人可能已经解决了这个问题,但凿子的东西并没有出现这种情况。
 

在线的 布鲁斯胡特

  • 超级贡献者
  • ***
  • 职位:1973
  • 国家: nz
  • 前身为SiFive,Samsung R&D
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#59: 一月15,2019,08:09:19下午»
第二个很难看-我不能'真的看不到幻灯片上的内容,所以我只能听。它没有'说话者似乎希望FIRRTL优化可以改善设计。相反,他提出了一种发现不良FIRRTL的方法,如果您做一些愚蠢的操作,可能会导致不良FIRRTL。他的解决方案是返回并重新编写。这类似于使用FPGA时序工具的典型设计流程-如果编写愚蠢的代码,您的设计将无法时序,这些工具将向您显示失败的关键路径,然后您将返回并重新编写。

不同之处在于,使用FIRRTL分析工具,他可以在几秒钟内发现设计不良,而不必等待数小时才能进行FPGA综合。
 

离线 北方人

  • 超级贡献者
  • ***
  • 帖子:2252
  • 国家: 钙
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#60: 一月15,2019,09:08:05下午»
不同之处在于,使用FIRRTL分析工具,他可以在几秒钟内发现设计不良,而不必等待数小时才能进行FPGA综合。

真的。 FPGA综合/实现软件效率很低。
 

离线 贝斯曼59

  • 超级贡献者
  • ***
  • 职位:1644
  • 国家: 我们
  • 是的,我这样做是为了谋生
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#61: 一月16,2019,06:01:01上午»
第二个很难看-我不能'真的看不到幻灯片上的内容,所以我只能听。它没有'说话者似乎希望FIRRTL优化可以改善设计。相反,他提出了一种发现不良FIRRTL的方法,如果您做一些愚蠢的操作,可能会导致不良FIRRTL。他的解决方案是返回并重新编写。这类似于使用FPGA时序工具的典型设计流程-如果编写愚蠢的代码,您的设计将无法时序,这些工具将向您显示失败的关键路径,然后您将返回并重新编写。

不同之处在于,使用FIRRTL分析工具,他可以在几秒钟内发现设计不良,而不必等待数小时才能进行FPGA综合。
[/引用

By "design is bad,"您是说逻辑不正确吗?这就是为什么我们有测试台和验证,或者没有't meet timing?
 

离线 弗斯米尔诺夫

  • 贡献者
  • 帖子:14
  • 国家: 我们
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#62: 2020年12月14日,上午06:28:47»
作为我探讨硬件加速器设计空间的软件工程师,关于Chisel / SpinalHDL与Verilog / VHDL的讨论的2c。免责声明:因为我'由于不是硬件工程师,因此我对此主题的看法是基于软件的。

凿子的问题(我'm当前正在使用)是输出是Verilog,并且所有重要工具都可用于此输出,而不适用于原始输入。从* .v回到* .scala源(没有*)存在明确的方法。对于Chisel而言,这种源映射(适用于所有高级编程语言)并不比人们想象的那么简单。因为Chisel HDL不是像C或Java这样的经典编程语言。它'一种源于元程序设计的语言,其中源是元程序(一个程序会生成另一个程序),因此普通源映射不会'在这里工作。 AFAIK,凿子本机仿真正在进行中,并且还有 Circt 克里斯·拉特纳(Chris Lattner)的项目,旨在重塑FIRRTL(Chisel'的中间表示形式)。但是目前,据我所知,自动化流程主要是单向的:从Scala到Verilog。如果在Verilog方面出了问题,逆映射可能会很棘手。

在元编程是必需的或不可避免的情况下,凿子可能会发光。因为Scala是专为"中/大型元编程"。例如,如果您需要非常特定的CPU内核,那么SV可能就是您要走的路。但是,如果您需要能够快速实现某些子空间, 设计空间 对于一类CPU内核,必须进行元编程。通常,这种元编程远远超出了"模板实例化"。 C ++具有图灵完备的模板元编程(TMP),我可以使用高级规范来生成相当复杂的算法和数据结构,但是编写和维护模板元程序确实很痛苦。这东西是不可扩展的。 TMP没有't scale at all. It's that simple.

而且,如果人们认为使用Perl / Pythog生成Verilog是解决方案,那么我有个坏消息。这不'以C ++ TMP相同的方式扩展规模(就大型编程的意义而言)'吨规模。当然,对于事先知道所有需求(封闭世界假设)的情况,它可能会非常好用,但事实并非如此。'在开放世界上工作。您会发现自己为此设计了一些元编程语言。在最好的情况下,您将求助于Scala,Haskell甚至是现代C ++。

这就是为什么凿子在SiFive(I'因为它们出售自定义配置的CPU内核,因此可以通过用户提供的软件加速器(在Chisel或Verilog中进行扩充)来增强它们的兼容性。我不'我们不知道这种用例在硬件设计中有多普遍,但是在软件工程中,元编程目前是基石。它'随处可见。但并非到处都-明确地。您可能很容易就没有意识到它在编写一些JavaScript,Java甚至是C语言。

因此,Chisel是Scala中用于编写HDL的DSL 发电机 通过搭载Scala提供的功能强大的元编程基础架构。 RISC-V +加速器是这种以软件为中心的技术的经过商业证明的展示。

如果斯卡拉'不需要强大的元编程(如果SV / VHDL提供的参数化就足够了),那么Chisel将是Verilog上不可接受的开销。

小加成。上面的人们认为,在Verilog中向FPGA设计中添加一些模块就像输入这句话一样容易。那'是的。但是Chisel中的元编程远远超出了简单的组合。正如其他人也提到的那样,凿子具有外交能力。我们可以将其视为特定于应用程序的类型 约束求解器 允许不同的模块在整个设计中就各种自由参数的值达成一致。如果没有约束解决,这对于大型设计来说是一件痛苦的手工工作。
« 上次编辑:2020年12月14日,上午06:43:36 by vsmirnov »
 
以下用户对此帖子表示感谢: 爱德华, emece67, 滴滴

在线的 布鲁斯胡特

  • 超级贡献者
  • ***
  • 职位:1973
  • 国家: nz
  • 前身为SiFive,Samsung R&D
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#63: 2020年12月14日,上午08:25:30»
似乎是一个合理的总结。

使元编程更具可调试性的是,是否有能力在将元编程转换为与原始来源截然不同且无法识别的内容之前保存并查看元编程的结果。

喜欢"gcc -E".

C ++最大的麻烦之一就是它没有'没有这种用于模板的工具。
 
以下用户对此帖子表示感谢: 滴滴

在线的 滴滴

  • 经常贡献者
  • **
  • 帖子:309
  • 国家: b
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#64: 2020年12月14日,下午12:28:26»
喜欢"gcc -E".

"-E"告诉GCC在预处理阶段之后停止,您得到的输出就是cc1编译器在扩展所有宏之后实际获得的输出。我已经使用了几次,以更好地了解*哪个* #if #else块实际上在使用中。

不错的把戏!很好的例子 :D
« 上次编辑:2020年12月15日,上午9:04:37 by DiTBho »
 

离线 硅向导

  • 超级贡献者
  • ***
  • 帖子:6034
  • 国家: fr
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#65: 2020年12月14日,下午06:29:42»
这是一个不平凡的问题,但是那些"code generators"通常在学术界很受欢迎。大学研究人员一般都对代码生成器很着迷。一世 '看过很多。 OTOH行业通常对它们保持警惕。有时它们被设计为允许某种形式的形式验证,有时允许进行更多的抽象,或两者结合。

尽管其中一些工具总体而言特别有趣,尤其是Chisel,但保持警惕的原因之一是长期支持,甚至根本没有支持。例如,当您为Chisel定居时'重新成为一家工业公司,是一个艰难的选择。你赢了'不知道它是否或何时将基本成为一个废弃的项目。你'寻找能够正确使用它的工程师也很困难-否则学习/培训阶段可能会很长。另一点是健壮性。代码生成器如何被准确验证过?它'通常很难将代码生成器与经过行业验证的工具进行比较。然后,是的,生成的代码通常很难理解,因此对于低级仿真或其他任务而言,这可能变得很困难。

关于可配置性,坦率地说,编写良好的VHDL或SystemVerilog都允许编写可配置的设计而没有太多问题。一些额外的功能可以使其变得更加容易,但这绝对是可行的。

SiFive由与Chisel合作的Berkely研究人员创立-这是一种分拆,所以其原因'的用法很明显,不仅与凿子的固有优点有关,或者至少与凿子的固有优点有关'有一个循环的理由。

正如vsmirnov所指出的,Chisel肯定有特定的好处,但是基于以上所述,我至少在工业环境中不会使用它。只是MHO。
 

在线的 布鲁斯胡特

  • 超级贡献者
  • ***
  • 职位:1973
  • 国家: nz
  • 前身为SiFive,Samsung R&D
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#66: 2020年12月14日,晚上09:39:30»
尽管其中一些工具总体而言特别有趣,尤其是Chisel,但保持警惕的原因之一是长期支持,甚至根本没有支持。例如,当您为Chisel定居时'重新成为一家工业公司,是一个艰难的选择。你赢了'不知道它是否或何时将基本成为一个废弃的项目。

废弃的开源项目的后果与废弃的商业产品的后果截然不同。如果它完成了您想要做的工作,它将继续做下去,而且没人能告诉您'不允许继续使用它。您还拥有一切必要的功能,以使其适应于更高的OS版本,生成不同的Verilog或修复错误。好吧-也许除了技巧外,所有必要的东西,但是您可能会找到某人将其外包出去。

引用
你'寻找能够正确使用它的工程师也很困难-否则学习/培训阶段可能会很长。另一点是健壮性。代码生成器如何被准确验证过?

我发现这样的担忧通常被夸大了。每个大型和/或旧的公司都有内部开发的类似的关键和复杂的事物,但是通常没有足够的文档记录,*绝对**不可能雇用已经知道它们的人,并且一旦将它们写出来的人搬到您的手上'处于更糟糕的位置。
 
以下用户对此帖子表示感谢: 滴滴, 弗斯米尔诺夫

在线的 tggzzz

  • 超级贡献者
  • ***
  • 帖子:13180
  • 国家: b
    • 乐在其中,事半功倍
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#67: 2020年12月14日,下午09:52:01»
软件工程师始终希望发明一种语言和/或实现编译器。
硬件工程师总是想发明一个微处理器。

由于生产周围的工具需要付出努力,因此两者都被误导了, 以及雇用/培训好人使用利基工具的困难。

出于同样的原因,另一种软件迷惑正在发明一种领域特定的语言,而一种标准语言的领域特定的库将完全合适且没有缺点。

但是40年前,在上大学时,我记得我曾对编写Pascal编译器的兴趣不大,给一位面试官留下了深刻的印象;而另一位面试官则指出,虽然我拥有首选的微处理器,但最重要的决定因素是使您能够使用的工具给我留下了深刻的印象使用它。
有谎言,该死的谎言,统计数据-和ADC / DAC规格。
滑翔机飞行员's aphorism: "没有替代的跨度". Retort: "有一个替代品:技能+想象力。但是你可以 span".
正玩得开心 事半功倍
 
以下用户对此帖子表示感谢: 滴滴

离线 弗斯米尔诺夫

  • 贡献者
  • 帖子:14
  • 国家: 我们
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#68: 2020年12月15日,上午01:00:38»
我看到这种元编程论点有些令人困惑,所以让我与Chisel分享我的故事。

我有一个长期运行的个人 项目 在高级数据结构方面。它'主要是个人研究和娱乐的来源,但是我对此有一些不平凡的生产经验。这个想法有点类似于Chisel / RocketChip,但是我没有生成硬件,而是'm生成特定于应用程序 数据存储和处理引擎 基于高级要求。实现非常不同,Memoria使用的是C ++ TMP,因为它的元编程核心甚至不像Chisel那样复杂。's one.

由于高昂的CPU成本,高级数据结构被认为是不切实际的。数据通常以某种压缩格式存储在内存中,因此在O估计其时间复杂度时,每个访问操作都可能具有相当大的隐藏常数。 OoO有很多帮助,但没有帮助'没有真正的不同。然而,潜力是巨大的并且非常诱人。例如,我们可以使用压缩的多维空间树(每个节点的空间复杂度为2位)来编码函数逼近,并使用它代替多层感知器(以维数为模)。感知器具有隐藏层中参数数量的线性复杂度,但是空间树具有对数复杂度。功率受限的用例的巨大差异。

计算密集型应用程序需要特殊的硬件,另一方面,这些硬件必须具有软件驱动的设计。或者 软硬件协同设计如果我不'请勿滥用此词。我尝试跳入HDL领域来为Memoria开发应用程序加速器,但实际上HDL是另一项全职+工作。和我'm已经有两个(常规工作和个人项目)。无论如何,没有带有HBM存储器的FPGA,所有这些我'我与之交谈的人受到记忆力的限制。但是最近我可以买到带有8GM HBM的Alveo U50,这对于像我这样的业余爱好者来说是一个改变游戏规则的人。另外,附庸风雅A7-100"starter kit".

长话短说,我能够在短短几个周末就在Arty A7-100上运行带有DDR3的RV64多核设置的自定义版本。零到英雄。原始的Freedom SDK不为E310软risc-v内核提供DDR3(因为它'一个MCU),我必须自己解决问题。重要的是我在设计空间内有很多自由。我可以实现单身"fat"OoO内核,甚至多核SoC,或配备专用加速器的小型多核系统(U50上的数十个以上)。

后者是最重要的。给定特定的问题类别,我可以推断出所需的硬件加速类型(矩阵乘法,FP密集型,整数密集型,内存密集型,以前的组合,某些特定的内存层次结构等),以及 产生 RVxx内核的特定加速器,以及 软件部分.

这就是软硬件协同设计(从清单上看,这就是我的看法)。 Chisel + RocketChip负责硬件部分。但是为了更好地理解该技术,应该将其置于更大的过程中,在该过程中,有多个生成器负责系统的不同方面。

作为独立技术的凿子对我自己来说也不是那么令人印象深刻。正如我上面所说的,Scala对元编程很有用,但不幸的是它's not 够好了,鉴于现代要求。斯卡拉's的构建工具仍然基于良好的旧版本"make"从80年代开始的范式,但现在"on steroids"。我们需要的是功能完备的基于数据流的数据平台,该平台具有用于外部自动化和集成的精心设计的RESTful API,将整个构建过程以及可通过该API获得的所有中间构件暴露给IDE等外部工具,我们需要在中间工具之上进行可扩展的分析数据。与今天's Scala,您将很难使RocketChip在IDE中正常工作。新兴的LanguageServer模式是正确的方法,但是它是'仍处于婴儿期。 C ++比Scala差得远,但是我'm working to 解决这种情况.

当然,Chisel的全部不是HDL本身,也不是Scala。它 's的高级软件工程实践,例如将中间表示预处理用于各种自动化任务,正在进入传统上保守的硬件设计和工程。凿子只是早起的鸟儿之一。更好的事情来了。多亏了RocketChip,我得以在短短几个周末就为我的项目快速启动了一个全新的领域。是的,它'是活着的好时机 :)

 

 

离线 北方人

  • 超级贡献者
  • ***
  • 帖子:2252
  • 国家: 钙
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#69: 2020年12月15日,上午04:31:25»
但是目前,据我所知,自动化流程主要是单向的:从Scala到Verilog。如果在Verilog方面出了问题,逆映射可能会很棘手。

It'非常简单。如果您有HDL语言,则必须将其编译为某种语言。那里'没有汇编程序。 Verilog就是这样。

可能存在某些与汇编程序等效的HDL语言,例如ISE中的XDL。但是我可以'设想具有足够胆量来编写将其语言编译为XDL的编译器的语言创建者。
 
以下用户对此帖子表示感谢: 弗斯米尔诺夫

离线 弗斯米尔诺夫

  • 贡献者
  • 帖子:14
  • 国家: 我们
Re: Chisel/Scala 硬件描述语言: why?
« 回复#70: 2020年12月15日,上午04:46:33»
引用
但是我可以'设想具有足够胆量来编写将其语言编译为XDL的编译器的语言创建者。

手表 Circt项目。一世'm sure they have.

但是,据我了解,Chisel的问题不在于它可以编译为Verilog,也不可以编译为一些底层表示。但是,FIRRTL编译器确实不会(保留)保留源映射元数据。因此,没有简单的方法将Verilog代码的哪一部分与Scala代码的哪一部分相对应。仿真是在Verilog中完成的,而不是在Scala中完成的。更糟的是,编译器渴望重新命名每个新编译中的所有内容。这些抱怨今天留着长胡子,所以我希望自那以后至少可以纠正许多问题。

与此相反,Circt项目基于MLIR(多层中间表示),该声明将源元数据保留声明为以下内容之一:  primary goals. It'以SV为目标,但是使用标准编译器技术,可以将MLIR降低到几乎所有基本形式语言。 
« 上次编辑:2020年12月15日,上午05:17:50 vsmirnov »
 

在线的 tggzzz

  • 超级贡献者
  • ***
  • 帖子:13180
  • 国家: b
    • 乐在其中,事半功倍
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#71: 2020年12月15日,上午08:42:22»
当从"higher level"代表"lower level"表示,信息丢失。范例:C->asm, LISP->C, Chisel->Verilog.

唯一的解决方法是以元数据的形式编码含义/重要性。

如果您沿着这条路走,则需要了解Mill架构正在做什么以及为什么。 //en.wikipedia.org/wiki/Mill_CPU_Architecture
有谎言,该死的谎言,统计数据-和ADC / DAC规格。
滑翔机飞行员's aphorism: "没有替代的跨度". Retort: "有一个替代品:技能+想象力。但是你可以 span".
正玩得开心 事半功倍
 
以下用户对此帖子表示感谢: 滴滴

离线 ali_asadzadeh

  • 超级贡献者
  • ***
  • 帖子:1360
  • 国家: 钙
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#72: 2020年12月15日,上午08:51:57»
需要有关凿子/ Scala等的出色教程,关于操作方法的更多初学者友好步骤,等等....因为我们大多数人都做了很多Verilog或VHDL,所以问题是我们可以多么容易地切换到这种新方法,当然我想让我的生活更轻松 ^-^
I'从8位到64位的数字专家
 
以下用户对此帖子表示感谢: 滴滴, 弗斯米尔诺夫

在线的 滴滴

  • 经常贡献者
  • **
  • 帖子:309
  • 国家: b
Re: Chisel/Scala 硬件描述语言: why?
« 在以下回复#73: 2020年12月15日,上午09:26:48»
It'非常简单。如果您有HDL语言,则必须将其编译为某种语言。那里'没有汇编程序。 Verilog就是这样。

HDL代表"硬件描述语言", it'在RTL顶部的一个级别,它没有'实际进行编译时,它会向RTL级别提供信息。

RTL代表Register-Transfer-Level,它需要RTL模型,并直接编译成GateLevel,这需要物理实现细节。

然后,合成器使用GateLevel来构建比特流(需要更多的物理实现细节),然后将比特流加载到CPLD / FPGA中'的配置芯片,通常是静态RAM或闪存。

It'不受合成器支持,但从技术上讲,HDL也可以描述模拟事物,从而使您的"hardware description"与PSPICE兼容。
 
凿子/斯卡拉"one level above" HDL.

希望这个方案是正确的,如果这样的话'整个新工具链的层次结构:

凿子/斯卡拉-> HDL -> RTL -> GL ->比特流或其他
« 上次编辑:2020年12月15日,上午9:51:11 by DiTBho »
 

离线 北方人

  • 超级贡献者
  • ***
  • 帖子:2252
  • 国家: 钙
Re: Chisel/Scala 硬件描述语言: why?
« 在以下方面回复#74: 2020年12月15日,下午04:22:35»
因此,没有简单的方法将Verilog代码的哪一部分与Scala代码的哪一部分相对应。仿真是在Verilog中完成的,而不是在Scala中完成的。

当然,应该可以创建一个直接模拟Scala的工具。

Verilog并不是一个低级的表示形式(对于C来说是汇编程序)。只是另一个HDL。您可以在FPGA上合成并实现它,也可以将其用于ASIC。您无法使用Scala做到这一点。如果供应商支持Scala,您将不会'根本不需要Verilog。在此之前,您必须忍受不便之处。
 
以下用户对此帖子表示感谢: 弗斯米尔诺夫


分享我

掘客  Facebook  SlashDot  可口的  Technorati  推特  谷歌  雅虎
中频