首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Verilog支持$clog2任务吗?

Verilog支持$clog2任务吗?
EN

Stack Overflow用户
提问于 2016-09-12 06:18:35
回答 3查看 11.5K关注 0票数 1

当我在程序中使用它时,会生成一个错误(不支持$clog2)。但是我看到我们的StackOverflowers在他们的程序中使用$clog2任务。请告诉我怎么用。

EN

回答 3

Stack Overflow用户

发布于 2016-09-12 08:37:55

Verilog不支持$clog2。这是一个SystemVerilog系统任务。此外,系统任务是不可综合的。

但是,您可以创建一个function/macro,它输出给定数字的log 2值。下面是一些用户定义实现的示例:

使用宏:

代码语言:javascript
运行
复制
`define CLOG2(x) \
   (x <= 2) ? 1 : \
   (x <= 4) ? 2 : \
   (x <= 8) ? 3 : \
   (x <= 16) ? 4 : \
   (x <= 32) ? 5 : \
   (x <= 64) ? 6 : \
   ..etc, ..
   (x <= 4294967296) ? 32 : \
   -1

parameter MAX_VALUE = 42;
parameter MAX_WIDTH = `CLOG2(MAX_VALUE);

使用function

代码语言:javascript
运行
复制
function [31:0] log2;
   input [31:0] value;
   integer i;
   reg [31:0] j;
   begin
      j = value - 1;
      log2 = 0;
      for (i = 0; i < 31; i = i + 1)
        if (j[i]) log2 = i+1;
   end
endfunction

initial
 begin
  $display("10 = %d", log2(10));
 end

以上两个例子都导致了可综合的代码。用户可以根据最大位宽要求扩展此代码。

因此,您可以更改编译器来编译SystemVerilog代码,或者实现上面的函数来生成用户定义的日志代码。

票数 6
EN

Stack Overflow用户

发布于 2016-09-12 12:23:57

$clog2is由Verilog支持,但只支持Verilog-2005 (IEEESTD1364-2005).由于Verilog-2005是在IEEE的SystemVerilog发布的同时发布的,它通常被认为是一种SystemVerilog增强。下面是将$clog2文档作为Verilog-2005特性的两个源代码:

Verilog-2005主要是Verilog和SystemVerilog最终合并的中间版本(发生在IEEESTD18000-2009年)。一些模拟器可能还没有植入Verilog-2005,因为它中的所有内容都包含在SystemVerilog中。如果模拟器在默认情况下不运行Verilog-2005,请参考您的手册,其中可能包含一个选项来启用它。启用SystemVerilog是另一种选择,也就是sharvil111 111的解决方案中描述的用户方法。

票数 6
EN

Stack Overflow用户

发布于 2022-03-23 20:50:49

我只想指出,$clog2是一个可综合的结构,可以被大多数工具处理。它并不仅仅因为它是一个系统任务而变得不可综合。

例如,下面是一个可综合的语句:

logic [$clog2(WIDTH) - 1 : 0] addr;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39444335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档