我正在寻找一种连接多个define statements into a single
define语句的方法,以便我可以在case语句中使用它。
例如,具有在头文件中定义的内存地址。我有一个case语句,决定是否应该将值写入LUTRAM或阻止ram,具体取决于地址。
我有以下定义:
`define PWM_REPEAT_REG (6'h10) // Number of times to repeat a PWM Pulse
`define PWM_WIDTH_REG (6'h14) // Pulse width in timebase counts
`define PWM_PULSE_PERIOD (6'h1c) // PWM pulse period in timebase counts.
在我的代码中,我有一个案例陈述,如下所示:
case(sys_mgr_address)
`PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD : begin // Values for block RAM
ram_a_din <= sys_mgr_write_data;
ram_a_addr <= sys_mgr_address;
ram_a_wr_enable <= 1'b1;
sys_mgr_write_ok <= 1'b1;
update_available <= 1'b1;
end
endcase
实际设计有几个地址,这种类型的case语句重复多次。我想创建另一个看起来像这样的定义,而不是为每个定义反复列出所有定义。
`define PWM_MODULE_BLOCK_RAM_ADDRESSES ({`PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD})
case(sys_mgr_address)
PWM_MODULE_BLOCK_RAM_ADDRESSES : begin // Values for block RAM
ram_a_din <= sys_mgr_write_data;
ram_a_addr <= sys_mgr_address;
ram_a_wr_enable <= 1'b1;
sys_mgr_write_ok <= 1'b1;
update_available <= 1'b1;
end
endcase
^^上面的代码不起作用,因为它将数字连接成一个非常大的向量。我尝试了一些变体,比如没有连接括号{},将它定义为文本,几个不同的变体``(但我不确定究竟是什么)。
有没有办法在编译之前看到扩展的宏?现在它只是给我一个错误,我尝试过的大部分都不会让故障排除变得简单。
谢谢!
答案 0 :(得分:1)
你在想太难了。你需要做的就是把逗号作为宏
`define PWM_MODULE_BLOCK_RAM_ADDRESSES `PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD
定义宏只是简单的文本扩展。