verilog - 在连续的 always 块中分配多个 if 语句
问题描述
假设我有两个总是块:
always @(posedge clk) begin
if (rst) a <= 0;
else begin
if (condition_one) a <= 1;
end
end
always @(posedge clk) begin
if (rst) b <= 0;
else begin
if (condition_two) b <= 1;
end
end
如果我将它们组合成一个 always 块,如下所示,会有什么区别?
always @(posedge clk) begin
if (rst) begin
a <= 0;
b <= 0;
end else begin
if (condition_one) a <= 1;
if (condition_two) b <= 1;
end
end
如果除了a和b之外还有更多的变量,例如c,d,e等,单个always
块是否会延迟太多来处理所有这些并行的独立if
语句?将它们分成并行always
块是否更安全?
解决方案
无论您添加多少变量,这两个代码示例都应该以相同的方式进行模拟。
关于您关于处理延迟的问题,模拟应该花费相同的时间来执行这两种情况。由于 Verilog 代码已编译,因此两个代码示例都应编译为有效的同一映像。
如果您使用单独always
的块,可能更容易理解和维护代码,尤其是随着变量数量的增加。对于像您的示例这样的少量变量,两者都可以。
推荐阅读
- pandas - 在迭代多索引数据帧时获取索引
- javascript - 如何将数组的单个元素打印为数字或整数
- python - 按字典值排序字典
- superset - 我在 Superset 文件夹中找不到 superset-ui 文件夹
- angular - 如何在 Angular 中实现 Fabricjs Align 指南?
- c# - 如何在 EF 查询中使用 JSON 数组 DB 列执行过滤
- r - 存储过程/sql 脚本/sql server 机器学习服务中的网络驱动器问题
- c# - 我想使用带有 Moq 的 MsTest 模拟带有 ServiceBusTrigger 的 Azure 函数
- c++ - 在 C++ 线程中,我应该通过值还是引用传递 shared_ptr?
- animation - Apple 产品页面上的编码序列帧