60 lines
1.2 KiB
Coq
60 lines
1.2 KiB
Coq
|
|
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
|