首页 > 解决方案 > 使用宏定义总线字段

问题描述

我正在尝试使用宏以下列方式定义不同的总线位域:


// 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 时,不会出现错误。

是否可以在另一个宏中调用宏?有什么建议吗?

谢谢

标签: verilogyosys

解决方案


这里有两个问题。

  1. 您不需要=或最终;定义。他们应该是:
`ifdef VStrLite
    `define WIDTH 10
`else
    `define WIDTH 11
`endif
  1. bus[´YC]==479错误地使用了不允许的正勾号 (´) 而不是反勾号 (`) - 它们在其他任何地方都是正确的。

修复这些,它应该可以正确编译。


推荐阅读