当前位置:  开发笔记 > 程序员 > 正文

Verilog自动任务

如何解决《Verilog自动任务》经验,为你挑选了2个好方法。

如果在Verilog中使用automatic关键字声明任务是什么意思?

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

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



1> Matt J..:

"自动"实际上意味着"重入".该术语本身是从软件语言中窃取的 - 例如,C具有"auto"关键字,用于将变量声明为在执行作用域时在堆栈上分配,并在之后解除分配,以便同一作用域的多次调用执行没有看到该变量的持久值.您可能没有在C中听说过这个关键字的原因是它是所有类型的默认存储类:-)替代方案是"静态",这意味着"静态地分配这个变量(到内存中的单个全局位置),并且在整个程序执行期间引用相同的内存位置,无论调用该函数的次数是多少次,"volatile",这意味着" 这是我SoC上其他地方的寄存器或其他我无法控制的设备上的东西; 编译器,请不要优化对我的读取,即使你认为你知道我之前读取的值,代码中没有中间写入".

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

在许多情况下,如果没有将任务或功能声明为"自动",您的代码就可以了,但除非您特别需要,否则将它放在那里是一种很好的做法.



2> Will Dean..:

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

你看 - 我们有些人做Verilog ......(呃)

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有