verilog - 使用宏定义总线字段
问题描述
我正在尝试使用宏以下列方式定义不同的总线位域:
// bitfields NC / YC / XC
// 0:2 / 3:(WIDTH+2) / (WIDTH+2+1): WIDTH+(WIDTH+2)
// first
`ifdef VStrLite
`define WIDTH = 10;
`else
`define WIDTH = 11;
`endif
// then
`define YC (`WIDTH +2) : 3
`define XC (`WIDTH + `WIDTH + 2) : (`WIDTH +2 + 1)
// finally in other module
line 1: assign endframe = (bus[`XC]==639 && bus[´YC]==479)? 1: 0;
line n: x <= bus[`XC] - CONST;
结果:
第 1 行:连续赋值左侧的语法错误;
第 n 行:赋值语句左值中的语法
当以通常的形式(`define YC 13:3)定义 YC o XC 时,不会出现错误。
是否可以在另一个宏中调用宏?有什么建议吗?
谢谢
解决方案
这里有两个问题。
- 您不需要
=
或最终;
定义。他们应该是:
`ifdef VStrLite
`define WIDTH 10
`else
`define WIDTH 11
`endif
bus[´YC]==479
错误地使用了不允许的正勾号 (´) 而不是反勾号 (`) - 它们在其他任何地方都是正确的。
修复这些,它应该可以正确编译。
推荐阅读
- ios - 重新加载表格视图后如何处理键盘?
- php - 上传文件大小限制 PHP(Code Igniter)
- regex - 替换文件中的第 N 个字符串匹配项
- mysql - 在 MySQL 数据库上存储密码:哈希与加密?
- pandas - 分析 Dask 数据帧的数据流
- azure-devops - 如何设置 Azure Dev Ops 以构建 Dev Express XAF-XPO 项目?
- javascript - 覆盖 Console.log 以支持 Console.re.log 以调试 iOS Chrome
- c# - 在 MessageBox.Show 上显示红色标记
- ios - 像 gif 中给出的动画一样旋转视图
- javascript - 如何在一组日期数组中找到给定的日期?