verilog named block

  • タグ:
  • タグはありません
`default_nettype none

module hoge;
	reg clock;
	initial begin
		clock = 1’b0;
		
		forever begin
			#4 clock <= ~clock;
		end
	end
	
	always @(posedge clock) begin: increment //label を付けると
		reg [3:0] count; //局所配線宣言が可能
		//always の中で wire 宣言はエラーになる
		//wire [2:0] dd = {clock, clock, clock}; 
		
		//parameter は宣言可能
		parameter SEQ_INIT = 4’d0;
		parameter SEQ_II = 4’d1;
		if(count === 4’hx) begin
			count <= 4’h0;
		end else begin
			count <= count + 4’d1;
		end
	end
	
	//これはスコープを抜けるのでエラーになる。
	//wire [3:0] decrement = ~count;
	//label.regname とすると使えるようだ
	wire [3:0] decrement = ~increment.count;
	wire [3:0] ss = increment.SEQ_II;

	begin: nanmo //単なる begin – end では局所 wire 宣言が利用可能
		wire [7:0] dd = {decrement, ss};
		//parameter はどちらでも使えるようだ。
		parameter XOR = 8’hee;
	end
	
	wire [7:0] rr = nanmo.dd ^ nanmo.XOR;
endmodule