【问题标题】:Use of Non-Blocking Assignment in Testbench : Verilog在测试台中使用非阻塞赋值:Verilog
【发布时间】:2015-11-05 03:30:10
【问题描述】:

我有两个关于在测试平台中使用非阻塞分配的问题。

  1. 我们可以在总是@(posedge clk) w.r.t 测试台中使用阻塞赋值吗?我认为我们可以使用,因为我们不必担心硬件。但我需要确认。
  2. 我在我的测试平台中使用了以下代码,但它没有按预期工作。


always @(posedge clk)
begin

while((state==2'd3) && (x!=OUT_MAX_SIZE_32) && (count_done==4'd4)) begin

$display("a[%d] :%h, %d",l,a[l],x); a[l] <= {b[x][31], b[x][30], b[x][29], b[x][28], b[x][27], b[x][26], b[x][25], b[x][24]}; a[l+1] <= {b[x][23], b[x][22], b[x][21], b[x][20], b[x][19], b[x][18], b[x][17], b[x][16]}; a[l+2] <= {b[x][15], b[x][14], b[x][13], b[x][12], b[x][11], b[x][10], b[x][9], b[x][8]}; a[l+3] <= {b[x][7], b[x][6], b[x][5], b[x][4], b[x][3], b[x][2], b[x][1], b[x][0]} ; x <= x+1; l <= l+4; end end

如果我使用非阻塞赋值,xl 不会递增。但是,如果我使用阻塞分配,它会按预期工作。我需要帮助来分析它。

【问题讨论】:

  • 这不是主题:如果您的项目中不涉及异步电路,您可能希望在代码中使用if 语句而不是while 语句。

标签: verilog


【解决方案1】:

您可以并且应该在测试台中使用非阻塞分配。模拟器不知道您的设计和测试台之间的区别。您需要以防止竞争条件的方式编写这两种代码。

从您显示的代码中,我看不出它为什么会有任何区别,除非您未显示其他位置的 xl 的其他分配。

【讨论】:

  • 我使用过 xl 的唯一其他地方是 initial 块,我在其中初始化了这两个他们归零。
【解决方案2】:

非阻塞赋值总是可以在测试台代码中使用。通过使用非阻塞赋值,这变成了一个无限循环。

参考 SystemVerilog LRM 1800-2012 第 10.4.2 节,

非阻塞程序分配允许在不阻塞程序流的情况下进行分配调度。

参考第 4.9.4 节,

非阻塞赋值语句(见 10.4.2)总是计算更新的值,并将更新安排为 NBA 更新事件,如果延迟为零,则在当前时间步,如果延迟非零,则作为未来事件.

这里,在时钟的 posedge 处,假设 x=0 所以它假设 while 循环被执行。非阻塞分配的 RHS 在活动区域​​进行评估,而实际分配在 NBA 区域完成。

因此,x 增加到 1 是 计划相同 时间戳的 NBA 区域中进行的。此外,由于它是非阻塞语句,因此在活动区域​​中再次检查 while 循环的条件,而不会阻塞任何内容(再次获取 x=0)。同样,x 计划在 NBA 地区递增,并且此循环永远继续。因此,您无法增加 x。类似的 cmets 也适用于 l。

虽然使用阻塞赋值,该值立即赋值给表达式的 LHS,因此 x/l 增加。

另外,$display活动区域中执行,因此您无法将 x 的值设为 1。下图将让您清楚地了解这一点。

有关事件区域的更多信息,请参阅CummingsSNUG2006Boston_SystemVerilog_Events 论文。

【讨论】:

  • 真棒的解释...谢谢你:) 那么你认为我必须担心在此使用阻塞分配吗?我的意思是我需要找到另一种使用 NBA 来实现这部分的方法吗?
  • 我认为使用阻塞分配将是一个更好的选择。在这里,我只是一些粗略的想法,在 NBA 语句之前使用 #1 或其他一些延迟,但这不是一个好的编码习惯。如果您删除 while 循环并使用 if 条件作为 if(x!=OUT_MAX_SIZE_32 &amp;&amp; ...) 或者可以进行其他一些逻辑操作,那可能会很棒。
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多