verilog - 我不明白这个带复制的定义宏
问题描述
我有 SystemVerilog 代码,其中使用了我不理解的复制。请彻底回答您的问题。
parameter WIDTH = 6;
logic [WIDTH-1:0] flag, flag2;
`define ZERO_X(n, m) {{m-$bits(n){1'b0}}, (n)}
assign flag = flag2 - `ZERO_X(1'b1, WIDTH);
解决方案
此代码试图将其操作数 0 扩展为 WIDTH 并且完全没有必要。根据 Verilog 规则,1'b1
操作数已经扩展到其写入的表达式上下文中最大操作数的宽度。
assign flag = flag2 - 1'b1;
但是,如果您想清楚地显示该扩展名,则可以编写显式转换:
assign flag = flag2 - WIDTH'(1'b1);
推荐阅读
- shell - 使用 awk 和 gensub 删除以“字符+数字+S”结尾的字符串中的部分
- node.js - Heroku 上带有 Node.JS 和 Create-React-App BuildPack 的 413(请求实体太大)
- node.js - 调用 Node 8.10 Lambda 时 JSON 无效
- java - spring 如何在编译时加载任何属性文件?
- amazon-web-services - 如何在 AWS CLI S3 中设置权限?
- angular - 如何在Angular 6中使用api响应将mat-checkbox设置为选中和未选中
- git - 与 Perforce 相比,分支之间的 Git 合并编辑
- python - 将散点图分配给特定箱时出错
- python - LSTM模型的随机性
- html - CSS无法设置单选按钮之间的边框