首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中断或返回always_ff / always_comb

中断或返回always_ff / always_comb
EN

Stack Overflow用户
提问于 2018-10-20 17:23:13
回答 2查看 1K关注 0票数 0

在Verilog有可能打破封锁吗?我有一个很大的块,与多个嵌套的if/ with语句相比,它具有更好的可读性。

所以我想要这样的东西:

代码语言:javascript
复制
always_ff @(posedge clk) begin
   ...

   if (x) begin
      ... 
      break;
   end

   ...
end

我找到了一个解决方案,但看起来像是黑客:

代码语言:javascript
复制
always_ff @(posedge clk) begin
repeat(1) begin

   ...

   if (x) begin
      ... 
      break;
   end

   ...
end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-21 01:13:25

您可以将代码放入函数中,使用return而不是break

代码语言:javascript
复制
always_ff @(posedge clk) func1;
function void func1;
   if (x) begin
      ... 
      return;
   end

   ...
endfunction

这是可合成的,并采取几乎相同数量的击键。

票数 1
EN

Stack Overflow用户

发布于 2018-10-20 23:02:10

在一段可合成的代码中,没有办法做你想做的事情。而且,在任何情况下,拥有一个大的ff块通常意味着不好的verilog编程风格。您应该尝试将大的始终块分割成多个单独的较小的alway_.块。

可综合verilog代码的目的是描述要实现的硬件的行为。在硬件中没有“中断”。每个always_ff块都描述一个失败,可能带有一些额外的逻辑。但总的来说,应该是这样的:

代码语言:javascript
复制
 always_ff @(posedge clk)
      out <= in;

如果你增加了更多的东西,你必须有一个非常好的理由这样做。大的滑块会让人皱眉。

因此,您应该再次将always_ff拆分为一组失败和组合逻辑: always_ff和always_comb。这样,您将使它更具可读性,并避免可能由大型ff块引起的多个问题。

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

https://stackoverflow.com/questions/52908221

复制
相关文章

相似问题

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