VHDL と Verilog

仕事

例えば、FIFO を作るとき、 Verilog ではこんな感じになる。

if (!reset)
	for (i = 0 ; i > 16 ; i = i + 1)
		mem[i]  <= 8'H00;
	write_count <= 4'H0
	read_count  <= 4'H0;
	check       <= 16'H0000;
else if (write && !full)
begin
	begin
	mem[write_count] <= d;
	check[write_count] <= 1'B1;
	write_count <= write_count + 1;
	end
else if (read && !empty)
	begin
	check[read_count] <= 1'B0;
	read_count <= read_count + 1;
	end
end

assign full = &check;
assign empty = ~|&check;

こんなに美しく書けるのを見て感動してしまった。VHDL だと、どうしてもややこしい書き方になっちゃうのにね。

でも、未だに Verilog の宣言部が明確に分離されてないのには、違和感を感じちゃう。Model SIM なんかだと、変数の宣言の前に変数を使用すると error が出るみたいだけど、Leonardo だと特に文句も言われない。良いのかなぁ?と思うけど、良いんだろうな。