openFPGALoader/spiOverJtag/efinix_spiOverJtag.v

60 lines
1.2 KiB
Verilog

module spiOverJtag (
input jtag_1_CAPTURE,
input jtag_1_DRCK,
input jtag_1_RESET,
input jtag_1_RUNTEST,
input jtag_1_SEL,
input jtag_1_SHIFT,
input jtag_1_TCK,
input jtag_1_TDI,
input jtag_1_TMS,
input jtag_1_UPDATE,
output jtag_1_TDO,
output csn,
output sck,
output sdi_dq0,
input sdo_dq1,
output wpn_dq2,
output hldn_dq3
);
wire capture, drck, sel, update;
wire runtest;
wire tdi;
reg fsm_csn;
assign wpn_dq2 = 1'b1;
assign hldn_dq3 = 1'b1;
// jtag -> spi flash
assign sdi_dq0 = tdi;
wire tdo = (sel) ? sdo_dq1 : tdi;
assign csn = fsm_csn;
wire tmp_cap_s = capture && sel;
wire tmp_up_s = update && sel;
always @(posedge drck, posedge runtest) begin
if (runtest) begin
fsm_csn <= 1'b1;
end else begin
if (tmp_cap_s) begin
fsm_csn <= 1'b0;
end else if (tmp_up_s) begin
fsm_csn <= 1'b1;
end else begin
fsm_csn <= fsm_csn;
end
end
end
assign sck = drck;
assign capture = jtag_1_CAPTURE;
assign drck = jtag_1_DRCK;
assign runtest = jtag_1_RUNTEST;
assign sel = jtag_1_SEL;
assign tdi = jtag_1_TDI;
assign update = jtag_1_UPDATE;
assign jtag_1_TDO = tdo;
endmodule