在Verilog中使用非阻塞赋值

时间:2018-06-08 09:41:09

标签: verilog

以下示例(<div class="wrapper"> <input type="button" value="ADD" onclick="append(1);"> </div> <div class="templates" id="temp1"> <ul class="level1"> <li> <input placeholder="parent"> <button onclick="append(2, this)">ADD</button> <button onclick="remove_div(this)">DEL</button> </li> </ul> </div> <div class="templates" id="temp2"> <ul class="level2"> <li> <input placeholder="child"> <button onclick="append(3, this)">ADD</button> <button onclick="remove_div(this)">DEL</button> </li> </ul> </div> <div class="templates" id="temp3"> <ul class="level3"> <li> <input placeholder="sub-child"> <button onclick="remove_div(this)">DEL</button> </li> </ul> </div>)中非阻塞分配的使用是否有效?它模拟很好但是如何合成?

state == 2'b01

2 个答案:

答案 0 :(得分:2)

  1. 非阻塞分配(<=)是建模顺序逻辑的合适方法。

  2. 您显示的代码表示:如果状态当前为01,那么如果从addr开始的64个内存位置中的任何一个等于a,那么下一个状态为00,否则为10

    如果这是你想要的,代码是正确的。

答案 1 :(得分:1)

您的非阻止使用情况没问题,但您正在同时读取64个内存值

请参阅我的回答Here关于HDL和循环以及合成时循环会发生什么。

除非你有64个端口的内存,否则你不能这样做。您的工具可能会构建它,但它可能会使用32768个寄存器,而不是内存。如果该工具非常非常聪明,它可能会将您的设计分成64个记忆库,每个64个条目深度。

如果这是你需要的功能,我会自己将内存分成64个块并同时读取所有64个内存。

顺便说一句:如果你构建一个缓存,那就不是这样做的了。你通常会有一个TAG记忆。