此代码无法编译并给出“if(overflow)”行标题中的错误。
always @(posedge clk or negedge overflow) begin
if(overflow)
count_posedge = count_posedge + 1;
else
count_posedge = 0;
end
Run Code Online (Sandbox Code Playgroud)
我在互联网上的某个地方必须像这样更改它:
always @(posedge clk or negedge overflow) begin
if(~overflow)
count_posedge = 0;
else
count_posedge = count_posedge + 1;
end
Run Code Online (Sandbox Code Playgroud)
...而且效果很好。
根据我的理解,这两个代码应该表现相同。第一个有什么问题吗?
这更有可能是您的合成器的问题,而不是模拟器的问题。可能的问题是第一个代码与具有异步复位的同步触发器的任何模板都不匹配。
常见的编码实践是在任何其他逻辑之前分配重置逻辑。这种编码实践已经存在了几十年。我认为这种特定编码实践背后的合理性源于:
就您而言,您的合成器正在进行 lint 检查,并确定您的代码不遵循传统的编码实践。合成器的创建者已决定仅支持通用编码结构,并且几乎没有动力进行更改。
仅供参考:您应该使用非阻塞分配来分配同步逻辑(<=)。阻塞赋值 ( =) 应用于组合逻辑。如果您不遵循正确的编码实践,则会增加引入竞争条件、RTL 与门不匹配以及其他错误的风险。
| 归档时间: |
|
| 查看次数: |
11944 次 |
| 最近记录: |