LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Я верно понимаю, что надо сделать так:

module led_module(rst, clk, addr, data_r, data_w, write, led);
	input rst;
	input clk;
	input[15:0] addr;
	output[15:0] data_r;
	input[15:0] data_w;
	input write;
	output wire[3:0] led;
	
	wire cs;
	reg[3:0] state;
	assign cs = (addr == 16'hF010);
	assign led = ~state;
	assign data_r = (~write && cs) ? state : 16'bZ;
	
	always @(posedge clk)
		if (~rst) begin
			state <= 4'b0;
		end else begin
			if (cs && write) begin
				state <= data_w;
			end
		end
endmodule

В ядре просто data_r и data_w имеют противоположные типы input и output.

Да? А можно ещё советов, как лучше писать (каких конструкций избегать, а какие наоборот очень хороши в общем случае)? А то данное изменение уменьшило количество синтезированных блоков.

Исправление KivApple, :

Я верно понимаю, что надо сделать так:

module led_module(rst, clk, addr, data_r, data_w, write, led);
	input rst;
	input clk;
	input[15:0] addr;
	output[15:0] data_r;
	input[15:0] data_w;
	input write;
	output wire[3:0] led;
	
	wire cs;
	reg[3:0] state;
	assign cs = (addr == 16'hF010);
	assign led = ~state;
	assign data_r = (~write && cs) ? state : 16'bZ;
	
	always @(posedge clk)
		if (~rst) begin
			state <= 4'b0;
		end else begin
			if (cs && write) begin
				state <= data_w;
			end
		end
endmodule

В ядре просто data_r и data_w имеют противоположные типы input и output.

Да? А можно ещё советов, как лучше делать? А то данное изменение уменьшило количество синтезированных блоков.

Исходная версия KivApple, :

Я верно понимаю, что надо сделать так:

module led_module(rst, clk, addr, data_r, data_w, write, led);
	input rst;
	input clk;
	input[15:0] addr;
	output[15:0] data_r;
	input[15:0] data_w;
	input write;
	output wire[3:0] led;
	
	wire cs;
	reg[3:0] state;
	assign cs = (addr == 16'hF010);
	assign led = ~state;
	assign data_r = (~write && cs) ? state : 16'bZ;
	
	always @(posedge clk)
		if (~rst) begin
			state <= 4'b0;
		end else begin
			if (cs && write) begin
				state <= data_w;
			end
		end
endmodule

В ядре просто data_r и data_w имеют противоположные типы input и output.