Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.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自动任务_Verilog - Fatal编程技术网

Verilog自动任务

Verilog自动任务,verilog,Verilog,如果任务在Verilog中用automatic关键字声明,这意味着什么 task automatic do_things; input [31:0] number_of_things; reg [31:0] tmp_thing; begin // ... end endtask; 注意:这个问题主要是因为我很好奇网站上是否有硬件程序员 这意味着任务是可重入的-任务中声明的项是动态分配的,而不是在任务的不同调用之间共享的 你看,我们有些人做Verilog。。。(ugh)自

如果任务在Verilog中用automatic关键字声明,这意味着什么

task automatic do_things;
  input [31:0] number_of_things;
  reg [31:0] tmp_thing;
  begin
    // ...
  end
endtask;

注意:这个问题主要是因为我很好奇网站上是否有硬件程序员

这意味着任务是可重入的-任务中声明的项是动态分配的,而不是在任务的不同调用之间共享的

你看,我们有些人做Verilog。。。(ugh)

自动关键字还允许您编写递归函数(从verilog 2001开始)。我相信,如果它们是最底层的,它们应该是可合成的,但我不确定它们是否有工具支持


我也是,做verilog

正如Will和Marty所说,automatic是为递归函数设计的

如果使用不同的值调用正常(即非自动)函数,并由模拟器在同一时间片中处理,则返回值是不确定的。这可能是一个相当棘手的错误发现!这只是一个模拟问题,综合后的逻辑将是正确的

使函数自动修复此问题。

“自动”实际上意味着“重新进入”。这个术语本身是从软件语言中盗用的——例如,C有一个“auto”关键字,用于在执行它所处的作用域时将变量声明为在堆栈上分配的,然后再释放,以便对同一作用域的多次调用不会看到该变量的持久值。您可能没有听说过C中的这个关键字,因为它是所有类型的默认存储类:-)可选项是“static”,意思是“静态地分配这个变量(到内存中的单个全局位置),并在整个程序执行过程中引用相同的内存位置,而不管函数被调用多少次”,以及“volatile”,这意味着“这是我的SoC或其他设备上的某个寄存器,我无法控制;编译器,请不要优化对我的读取,即使您认为您从以前的读取中知道我的值,而代码中没有中间写入”

“automatic”用于递归函数,但也用于在不同的执行线程中同时运行相同的函数。例如,如果您“fork”了N个不同的块(使用Verilog的fork->join语句),并让它们同时调用同一个函数,函数递归调用自身时会出现相同的问题


在许多情况下,您的代码在不将任务或函数声明为“自动”的情况下可以正常运行,但最好将其放入其中,除非您特别需要它。在计算中,如果多个调用可以同时安全运行,则计算机程序或子例程称为重入程序(Wikipedia)。 简单地说,当一个任务的多个实例同时运行时,关键字automatic使其安全。 :D