首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将在always_comb中创建锁存器中的temp变量

将在always_comb中创建锁存器中的temp变量
EN

Stack Overflow用户
提问于 2018-07-02 10:49:57
回答 3查看 1.2K关注 0票数 2

我有以下代码片段,其中使用temp变量来计算数组中1的数量:

代码语言:javascript
复制
   // count the number 1s in array 
   logic [5:0] count_v; //temp
   always_comb begin
      count_v = arr[0];
      if (valid) begin
         for (int i=1; i<=31; i++) begin
            count_v = arr[i] + count_v;
         end
      end
      final_count = count_v;
   end

这个逻辑会为count_v创建一个闩锁吗?综合工具是否足够智能,能够正确地综合这个逻辑?我正在努力寻找针对这类场景的编码建议。

另一个例子:

代码语言:javascript
复制
logic temp; // temp variable
always_comb begin
   temp = 0;
   for (int i=0; i<32; i++) begin
      if (i>=start) begin
         out_data[temp*8 +: 8] = in_data[i*8 +: 8];
         temp = temp + 1'b1;
      end
   end
end
EN

回答 3

Stack Overflow用户

发布于 2018-07-02 14:46:51

一般规则:如果在写入之前读取变量,那么您的代码暗示了某种类型的内存。在这种情况下,模拟器和合成器都必须存储先前的值,因此合成器将为您提供一个寄存器或锁存器。您的两个示例在读取临时值之前都会写入它,因此不会隐含任何存储空间。

它是合成的吗?试试看。我在产品代码中见过很多这样的东西,并且它可以工作(使用我使用过的synths ),但我自己不这样做。我会尝试一下,看看创建了什么逻辑,并用它来决定您是否需要更多地考虑它。没有循环,计算设置位很容易,但是count循环几乎肯定会与synth一起工作。第二个例子可能更有问题。

票数 0
EN

Stack Overflow用户

发布于 2018-07-02 16:04:18

对于任何具有确定性初始赋值的always块,它不会生成除逻辑环路以外的锁存器。

票数 0
EN

Stack Overflow用户

发布于 2018-07-02 18:13:14

对不起,埃迪·尤,关于你的帖子,我们似乎正在进行一些讨论。

下面是一些示例代码:

代码语言:javascript
复制
module latch_or_not (
   input            cond,
   input      [3:0] v_in,
   output reg       latch,
   output reg [2:0] comb1,
   output reg [2:0] comb2

   );

reg [2:0] temp;
reg [2:0] comb_loop;

  // Make a latch
  always @( * )
     if (cond)
        latch = v_in[0];

  always @( * )
  begin : aw1
     integer i;
     for (i=0; i<4; i=i+1)
       comb_loop = comb_loop + v_in[i];
     comb2 = comb_loop;
  end

  always @( * )
  begin : aw2
     integer i;
     temp = 7;
     for (i=0; i<4; i=i+1)
       temp = temp - v_in[i];
     comb1 = temp;
  end

endmodule

这是根据Xilinx Vivado工具详细阐述后得出的结果:

“latch”输出很明显。您还会注意到,temp不存在于最终结果中。

“comb_loop”不是一个锁存器,更糟糕的是:它是一个组合循环。逻辑的输出返回到输入。绝对不能!

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

https://stackoverflow.com/questions/51128577

复制
相关文章

相似问题

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