`defineの注意

仕事で結構FPGAをいじっているのに、FPGAVerilog HDLのエントリーが少ないなーと思ったのでたまには書きます。


恥ずかしいエラーの話

外付けのマルチプレクサ制御用のモジュールのコードを書いている時の話

問題のコードは以下のとおり

`define HOGE 8'b00000001;

module MUX_CONTROLLER();
	
	reg [7:0] hogehoge	;
	
	always @ (posedge CLK or posedge RST) begin
	...
		hoge	<= `HOGE	;
	...
	end
endmodule

...は省略の意味

これでISimだと問題なくシミュレーションできる。しかしISEでCheck Syntaxをかけると以下のErrorがかえってくる。

line 92 expecting 'end', found ';'

最初は途中で全角スペースが入ってしまったかなぁ〜と思ったり、色々試してみてもダメ。途中から@marsee101さんと@unimaru_さんにも手伝って頂きました。


色々やってもだめで時間ばかりが過ぎて行きましたが、原因は簡単なものでした。`defineの最後に';'があるのがエラーの根源でした。
つまり

hoge	<= 8'b00000001	;;

となり、';'が2つ入っていたのが原因です。


初歩的なミスすぎて、ちょっと恥ずかしいです。
最後に、協力していただいた@marsee101さんと@unimaru_さんに感謝したいです。