История изменений
Исправление 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.