Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog/Systemverilog/VHDL可以被认为是面向角色的编程语言吗?_Verilog_Actor_System Verilog - Fatal编程技术网

Verilog/Systemverilog/VHDL可以被认为是面向角色的编程语言吗?

Verilog/Systemverilog/VHDL可以被认为是面向角色的编程语言吗?,verilog,actor,system-verilog,Verilog,Actor,System Verilog,这些语言提供的模块本质上是并发的,可以非常整洁地(通过端口)处理异步消息。撇开它们不能在运行时生成模块实例这一事实不谈,它们是否符合基于角色的编程语言的条件 谢谢 编辑: 我真正想要的是语言语义在“建模”参与者方面的效果如何,而不是模拟器如何处理代码(当然,它们都是由事件驱动的;再往下看,我们最终得到的是晶体管:-)) 因此,如果我创建了一组像这样的IP4路由器 module Ip4Router ( inout interface_t intrf1, // Port that ca

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

谢谢

编辑:

我真正想要的是语言语义在“建模”参与者方面的效果如何,而不是模拟器如何处理代码(当然,它们都是由事件驱动的;再往下看,我们最终得到的是晶体管:-))

因此,如果我创建了一组像这样的IP4路由器

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
模块IP4路由器(
inout interface\u t intrf1,//可以自动发送/rcv数据包的端口
输入输出接口\u t输入RF2。。。
);
始终@(intrf1)在intrf1上开始//活动
如果(intrf1.valid&intrf1.ipaddr!=myaddr&&…)开始

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


Verilog和VHDL是硬件描述语言(hdl),使用它们时,您的思维方式与使用其他语言编程时不同。我会避免将它们称为编程语言(虽然它们也有不打算合成的结构,但这是为了创建测试台)。

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


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

虽然这些HDL并非天生设计为面向参与者的语言,但人们已经多次尝试使用它们来建模抽象异步消息传递。Verilog/SystemVerilog/VHDL/SystemC中有各种建模(CSP)示例。 尽管它们是用来设计硬件和测试环境的,但只要稍加努力,它们就可以用来“模仿”这种更高级的建模语言。这样做的明显原因是利用这些语言现有的强大编译器和模拟工具,而不是创建另一种新语言

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


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

请记住,尽管描述了并发行为,但用于在CPU上执行这些语言的大多数现有工具都是有限的(或零)并行性。@nav:与您最近编辑的示例相关:我的回答中的SystemVerilogCSP包提供原子发送/接收操作以及探测操作,该操作在提交通信操作之前检查输入通道上的消息内容。所以答案是肯定的,你可以很好地建模这样一个例子,甚至可以在标准的SystemVerilog模拟器上进行模拟。谢谢@Ari。。那一次很有帮助