Verilog/Systemverilog/VVHDL可以被认为是面向参与者的编程语言吗



这些语言提供的模块本质上是并发的,可以非常整洁地(通过端口)处理异步消息。抛开它们不能在运行时生成模块实例这一事实不谈,它们是否符合基于参与者的编程语言的资格?

感谢

编辑:

我真正想要的是语言语义在多大程度上可以用来"建模"参与者,而不是模拟器如何处理代码(当然,它们在下面都是事件驱动的;再往下看,我们最终得到的是晶体管:-)。

因此,如果我创建一堆像这样的Ip4Router,

module Ip4Router (
    inout interface_t intrf1,    // Port that can atomically send/rcv packets
    inout interface_t intrf2, ...
);
    always @(intrf1) begin // Activity on intrf1
        if (intrf1.valid & intrf1.ipaddr != myaddr && ...) begin
            intrf2.valid <= .. // atomically bang data on intrf2 + other stuff
        end
    end
    //...
endmodule
module test;
    interface_t intrf1[1001];
    Ip4Router r1(intrf1[0], intrf1[1])
    Ip4Router r2...;          // Create and wire up 1000 routers in some topology...
endmodule

路由器有资格成为(微型)行动者吗?

虽然这些HDL本身并不是作为面向参与者的语言设计的,但使用它们对抽象异步消息传递进行建模已经付出了多种努力。在Verilog/SystemVerilog/VVHDL/SystemC中有各种建模通信顺序过程(CSP)的例子。尽管它们是用来设计硬件和测试环境的,但只要付出一点努力,它们就可以用来"模仿"这种更高级别的建模语言。这样做的明显原因是为了利用这些语言现有的强大编译器和模拟工具,而不是创建另一种新语言。

例如,"SystemVerilogCSP"使用SystemVerilog的接口对类似CSP的通信通道和抽象消息传递进行建模。虽然通信通道是使用握手协议实现的,但从这个包的用户角度来看,它们只是原子和阻塞操作。参见本文中的图2,其中两个并发模块通过类似CSP的阻塞通信动作进行通信。

此外,Verilog和SystemVerilog可以使用fork-join构造生成并行线程。

我记得刚开始的时候,我做了一些基本的设计工作。我一直试图通过修复代码来解决我设计中的问题,然后我的导师告诉我"你不应该在这里编程,你应该描述将从这些代码中合成什么硬件"。

VerilogVHDL硬件描述语言(HDL),当使用它们时,您的想法与用其他语言编程时不同。我会避免称它们为编程语言(尽管它们也有不应该合成的结构,但这是为了创建测试台)。

否。这些语言的执行语义是事件驱动的。它们使用分层的偶数队列,这使得在多核或其他并行架构上执行极其困难。事件是对信号或某个抽象消息的更改,所有事件都进入队列,然后分发(或扇出)到等待该事件的所有进程。一次只执行一个进程。

尽管您可以将这些HDL描述合成为另一种可能面向参与者的形式,但实际的来源却不能。

最新更新