这些语言提供了本质上并发的模块,可以非常简洁地处理异步消息(通过端口)。撇开它们无法在运行时生成模块实例的事实,它们是否有资格成为基于actor的编程语言?
由于
修改
我真正想要的是语言语义可以用于"模型"演员,而不是模拟器如何处理代码(当然,它们都是由事件驱动的;在下面,我们最终得到晶体管:-))。
所以,如果我创建一堆像这样的Ip4Routers,
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
路由器是否有资格成为(微型)演员?
答案 0 :(得分:1)
我记得当我刚开始的时候,我做了一些基本的设计工作。我一直试图通过修复代码来修复设计中的问题然后我的导师告诉我“你不应该在这里编程,你应该用这段代码来描述将要合成的硬件”。/ p>
Verilog 和 VHDL 是硬件描述语言(HDL),在使用它们时,您的思维方式与在其他程序中编程时的方式不同语言。我会避免将它们称为编程语言(尽管它们也有构造而不是要合成,但那是为了创建测试平台)。
答案 1 :(得分:1)
虽然这些HDL并非固有地设计为面向行动者的语言,但是已经进行了多次努力来使用它们来模拟抽象异步消息传递。在Verilog / SystemVerilog / VHDL / SystemC中有各种建模Communicating Sequential Processes(CSP)的例子。 虽然它们旨在用于设计硬件和测试环境,但只需稍加努力就可以用来模拟&#34;模仿&#34;这种更高级别的建模语言。这样做的显而易见的原因是利用这些语言的现有强大的编译器和模拟工具,而不是创建另一种新语言。
例如,&#34; SystemVerilogCSP&#34;使用SystemVerilog接口模拟类似CSP的通信通道和抽象消息传递。虽然通信通道是使用握手协议实现的,但从用户的角度来看,它们只是原子和阻塞动作。请参阅this paper中的图2,其中两个并发模块通过阻止类似CSP的通信操作进行通信。
此外,Verilog和SystemVerilog可以使用fork-join构造生成并行线程。
答案 2 :(得分:0)
没有。这些语言的执行语义是事件驱动。它们使用分层偶数队列,这使得在多核或其他并行架构上执行非常困难。事件是对信号或某些抽象消息的更改,并且所有事件都会继续发送到队列以便分发(或扇出)到等待事件的所有进程。一次只执行一个进程。
虽然您可以将这些HDL描述合成为另一种可能面向演员的形式,但实际来源却不是。