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條件生成和條件編譯的區別
充分條件:有甲這個條件一定會推出乙這個結果,有乙這個結果不一定是甲這唯一個條件.關聯詞是只要……就…… 如只要天下雨,地就會濕。 有「下雨」這個條件就一定有「地濕」這個結果,但「地濕」這個結果不一定就是「天下雨」造成的,也許還可能有其他的條件原因,如灑水車灑的、別人噴的等等。 必要條件:有甲這個條件不一定能推出乙這個結果,但乙這個結果一定要有甲這個條件。關聯詞是只有……才…… 如只有陽光充足,菜才能長得好。有「陽光充足」這個條件「菜」不一定就長得好,還需要施肥、澆水等其他條件。但「菜」要長得好一定要有「陽光充足」這個條件。 充要條件:即充分必要條件。或者說是無條件的。 關聯詞是不論(不管)……都……如不論天氣如何,他都按時到校。就是說「天氣如何」無所謂什麼條件,都會有「按時到校」的結果的。反過來「按時到校」也不需要什麼「天氣」。不知道這樣解釋能否明白這三者間的關系。