verilog条件编译
‘壹’ 在VHDL语言中怎样实现条件编译
vhdl不支持编译指令 但是有if generate语法
格式为
label: if [condition] generate
[block declarative items] --optional
begin
[concurrent statements]
end generate label ;
例如
g_KEEP_DEBUG : if g_DEBUG = 1 generate
p_TEST: process (r_VECTOR) is
begin
w_VECTOR_TEST <= r_VECTOR;
end process p_TEST;
end generate g_KEEP_DEBUG;
g_REMOVE_DEBUG : if g_DEBUG = 0 generate
w_VECTOR_TEST <= (others => '0');
end generate g_REMOVE_DEBUG;
‘贰’ verilog怎样控制 ifdefine的编译
条件编译
一般情况下,源程序中的所有的行都参加编译。但是有时希望对其中一部分内容只在一定条件下进行编译,当条件不满足则编译另一组语句
#ifdef 标识符
程序段1
#else
程序段2
#endif
作用:已经被#define命令定义过,则在程序编译阶段只编译程序段1,否则编译程序段2
例子:
#define N 10
main() {
#ifdef N
printf("N defined!\n");
//程序段一
#else
printf("N isn't defined!\n");
‘叁’ verilog怎样控制 ifdefine的编译
`define
是宏定义,全局作用的,而且不受语意限制。你甚至可以定义半截的字符串出来。但是使用的时候才会做展开。
举例而言,如果你定义一个宽度信息为:
`define
range
2:3
然后在使用的时候`include这个文件,range就可以解析了。
wire
[`range]
bus;
parameter是模块内常量定义,仅限于常量。一般的工具对于parameter的支持力度更好,毕竟是语意可以识别的。而`define的支持仅仅限于parse阶段,不会流入到elaboration阶段。但是如果把``define的使用场景都改为parameter会造成不必要的变量的引入。
目前一般使用`define的地方一般是全局化的configuration阶段。比如说对整个ip的配置信息,一个ip应该满足不同的soc的需求提供不同的配置。
‘肆’ verilog条件生成和条件编译的区别
充分条件:有甲这个条件一定会推出乙这个结果,有乙这个结果不一定是甲这唯一个条件.关联词是只要……就…… 如只要天下雨,地就会湿。 有“下雨”这个条件就一定有“地湿”这个结果,但“地湿”这个结果不一定就是“天下雨”造成的,也许还可能有其他的条件原因,如洒水车洒的、别人喷的等等。 必要条件:有甲这个条件不一定能推出乙这个结果,但乙这个结果一定要有甲这个条件。关联词是只有……才…… 如只有阳光充足,菜才能长得好。有“阳光充足”这个条件“菜”不一定就长得好,还需要施肥、浇水等其他条件。但“菜”要长得好一定要有“阳光充足”这个条件。 充要条件:即充分必要条件。或者说是无条件的。 关联词是不论(不管)……都……如不论天气如何,他都按时到校。就是说“天气如何”无所谓什么条件,都会有“按时到校”的结果的。反过来“按时到校”也不需要什么“天气”。不知道这样解释能否明白这三者间的关系。