verilog - 来自多个 if 语句的信号分配
问题描述
出于学术兴趣,以下代码是否可以接受:
logic a, b, c;
int out;
always_ff @(posedge clk) begin
out <= 1;
if (a) out <= 2;
if (b) out <= 3;
if (c) out <= 3;
end
内部总是阻塞的东西应该是顺序的,对吧?因此,在此示例中,默认情况下out将为 1 但a、b和c可以按“优先”顺序覆盖该值。
或者合成中是否存在未知结果的风险?即分配的顺序将是随机的,如下所示:
if (c) out <= 3;
out <= 1;
if (b) out <= 3;
if (a) out <= 2;
在这种情况下,即使c为 1 ,输出也会为 1(或者如果a或b为 1,则为其他内容)。
解决方案
当您在一个块内有代码时begin/end
,这些语句保证以串行顺序执行。并且使用非阻塞赋值,当语句顺序可预测时,结果是可预测的。所以你得到了你期望的优先顺序。
推荐阅读
- python - 在 Python 中生成长时间运行的后台任务
- node.js - Botframework v4 Directline integration:有没有办法获取从直接传输到 Chatbot 生成的对话 id(nodejs 代码)
- apache-kafka - 注册 Avro 模式时出错:写入 Kafka 存储时注册模式操作失败;错误代码:50001
- php - CURLOPT_CAINFO/CAPATH 究竟是什么?
- c++ - 如何在 GTK3 上强制 CORE opengl 配置文件?(#版本 330)
- .net - 生成源代码哈希的最佳方法是什么?
- javascript - 无法在我的 HTML 页面上显示另一个 Highcharts 图表 - Django
- javascript - Math.random() 结果的位数
- regex - 如何使用正则表达式在引用文本中提取多个符号/子字符串
- ios - 如何重新创建 dSYM