将代码参数化,便于代码自动化生成
This commit is contained in:
@@ -40,17 +40,37 @@ module ShinTopSpiTb(
|
|||||||
|
|
||||||
reg [15:0] multiCLK;
|
reg [15:0] multiCLK;
|
||||||
|
|
||||||
wire [3:0] dDat_w;
|
`define DEV_NUM 4 //slave num
|
||||||
wire [3:0] uDat_w;
|
`define ALL_DEV_NUM (`DEV_NUM + 1) // slave + master
|
||||||
|
`define SPI_CSN_NUM (`ALL_DEV_NUM * 3)
|
||||||
|
|
||||||
|
`define HW_SERIAL 0 //(48'h4c5850303031)
|
||||||
|
`define IQSPI_PINS(N) (`N*4+3):(`N*4)
|
||||||
|
`define EQSPI_PINS(N) ((`N + `ALL_DEV_NUM)*4+3):((`N + `ALL_DEV_NUM)*4)
|
||||||
|
`define IQSPI_MISO(N) qspi_miso[`IQSPI_PINS(`N)]
|
||||||
|
`define EQSPI_MISO(N) qspi_miso[`EQSPI_PINS(`N)]
|
||||||
|
|
||||||
|
`define IQSPI_CSN_NUM(id) (`id)
|
||||||
|
`define ESPI_CSN_NUM(id) ((`id)+(`ALL_DEV_NUM))
|
||||||
|
`define EQSPI_CSN_NUM(id) ((`id)+(`ALL_DEV_NUM)*2)
|
||||||
|
|
||||||
|
`define IQSPI_CSN(id) spi_csn[`IQSPI_CSN_NUM(`id)]
|
||||||
|
`define ESPI_CSN(id) spi_csn[`ESPI_CSN_NUM(`id)]
|
||||||
|
`define EQSPI_CSN(id) spi_csn[`EQSPI_CSN_NUM(`id)]
|
||||||
|
|
||||||
|
|
||||||
|
wire [(`DEV_NUM - 1):0] dDat_w;
|
||||||
|
wire [(`DEV_NUM - 1):0] uDat_w;
|
||||||
|
|
||||||
wire spi_sck;
|
wire spi_sck;
|
||||||
wire spi_mosi;
|
wire spi_mosi;
|
||||||
wire [4:0] spi_miso;
|
wire [4:0] spi_miso;
|
||||||
reg [14:0] spi_csn;
|
reg [(`SPI_CSN_NUM - 1):0] spi_csn;
|
||||||
|
|
||||||
wire qspi_sck;
|
wire qspi_sck;
|
||||||
wire [3:0] qspi_mosi;
|
wire [3:0] qspi_mosi;
|
||||||
wire [40-1:0] qspi_miso;
|
//wire [40-1:0] qspi_miso;
|
||||||
|
wire [(`ALL_DEV_NUM * 4 * 2 - 1):0] qspi_miso;
|
||||||
|
|
||||||
integer spidata_file;
|
integer spidata_file;
|
||||||
integer c_line;
|
integer c_line;
|
||||||
@@ -61,9 +81,9 @@ module ShinTopSpiTb(
|
|||||||
reg [63:0] _temp_time;
|
reg [63:0] _temp_time;
|
||||||
reg _reset_deactive;
|
reg _reset_deactive;
|
||||||
|
|
||||||
wire [4:0] isSoftReset;
|
wire [(`ALL_DEV_NUM - 1):0] isSoftReset;
|
||||||
|
|
||||||
wire [4:0] io_int_sig;
|
wire [`DEV_NUM:0] io_int_sig;
|
||||||
|
|
||||||
reg latch0;
|
reg latch0;
|
||||||
reg latch1;
|
reg latch1;
|
||||||
@@ -96,27 +116,27 @@ ShinTop s_ShinTop_Mst(
|
|||||||
|
|
||||||
.io_iqspi_sck(qspi_sck),
|
.io_iqspi_sck(qspi_sck),
|
||||||
.io_iqspi_mosi(qspi_mosi),
|
.io_iqspi_mosi(qspi_mosi),
|
||||||
.io_iqspi_miso(qspi_miso[3:0]),
|
.io_iqspi_miso(`IQSPI_MISO(0)),
|
||||||
.io_iqspi_isDirIn(),
|
.io_iqspi_isDirIn(),
|
||||||
.io_iqspi_csn(spi_csn[0]),
|
.io_iqspi_csn(`IQSPI_CSN(0)),
|
||||||
|
|
||||||
.io_ospi_sck (spi_sck),
|
.io_ospi_sck (spi_sck),
|
||||||
.io_ospi_mosi(spi_mosi),
|
.io_ospi_mosi(spi_mosi),
|
||||||
.io_ospi_miso(spi_miso[0]),
|
.io_ospi_miso(spi_miso[0]),
|
||||||
.io_ospi_csn (spi_csn[5]),
|
.io_ospi_csn (`ESPI_CSN(0)),
|
||||||
|
|
||||||
|
|
||||||
.io_oqspi_sck(qspi_sck),
|
.io_oqspi_sck(qspi_sck),
|
||||||
.io_oqspi_mosi(qspi_mosi),
|
.io_oqspi_mosi(qspi_mosi),
|
||||||
.io_oqspi_miso(qspi_miso[4*5+3:4*5]),
|
.io_oqspi_miso(`EQSPI_MISO(0)),
|
||||||
.io_oqspi_isDirIn(),
|
.io_oqspi_isDirIn(),
|
||||||
.io_oqspi_csn(spi_csn[10]),
|
.io_oqspi_csn(`EQSPI_CSN(0)),
|
||||||
|
|
||||||
.io_isSoftReset(isSoftReset[0]),
|
.io_isSoftReset(isSoftReset[0]),
|
||||||
.io_interrupt(io_int_sig[0]),
|
.io_interrupt(io_int_sig[0]),
|
||||||
.io_latchPin_0(latch0),
|
.io_latchPin_0(latch0),
|
||||||
.io_latchPin_1(latch1),
|
.io_latchPin_1(latch1),
|
||||||
.io_hwSerial(0),
|
.io_hwSerial(`HW_SERIAL),
|
||||||
.io_uniCode(0)
|
.io_uniCode(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -148,26 +168,26 @@ ShinTop s_ShinTop_slv0(
|
|||||||
|
|
||||||
.io_iqspi_sck(qspi_sck),
|
.io_iqspi_sck(qspi_sck),
|
||||||
.io_iqspi_mosi(qspi_mosi),
|
.io_iqspi_mosi(qspi_mosi),
|
||||||
.io_iqspi_miso(qspi_miso[4*1+3:4*1]),
|
.io_iqspi_miso(`IQSPI_MISO(1)),
|
||||||
.io_iqspi_isDirIn(),
|
.io_iqspi_isDirIn(),
|
||||||
.io_iqspi_csn(spi_csn[1]),
|
.io_iqspi_csn(`IQSPI_CSN(1)),
|
||||||
|
|
||||||
.io_ospi_sck (spi_sck),
|
.io_ospi_sck (spi_sck),
|
||||||
.io_ospi_mosi(spi_mosi),
|
.io_ospi_mosi(spi_mosi),
|
||||||
.io_ospi_miso(spi_miso[1]),
|
.io_ospi_miso(spi_miso[1]),
|
||||||
.io_ospi_csn (spi_csn[6]),
|
.io_ospi_csn (`ESPI_CSN(1)),
|
||||||
|
|
||||||
.io_oqspi_sck(qspi_sck),
|
.io_oqspi_sck(qspi_sck),
|
||||||
.io_oqspi_mosi(qspi_mosi),
|
.io_oqspi_mosi(qspi_mosi),
|
||||||
.io_oqspi_miso(qspi_miso[4*6+3:4*6]),
|
.io_oqspi_miso(`EQSPI_MISO(1)),
|
||||||
.io_oqspi_isDirIn(),
|
.io_oqspi_isDirIn(),
|
||||||
.io_oqspi_csn(spi_csn[11]),
|
.io_oqspi_csn(`EQSPI_CSN(1)),
|
||||||
|
|
||||||
.io_isSoftReset(isSoftReset[1]),
|
.io_isSoftReset(isSoftReset[1]),
|
||||||
.io_interrupt(io_int_sig[1]),
|
.io_interrupt(io_int_sig[1]),
|
||||||
.io_latchPin_0(latch0),
|
.io_latchPin_0(latch0),
|
||||||
.io_latchPin_1(latch1),
|
.io_latchPin_1(latch1),
|
||||||
.io_hwSerial(0),
|
.io_hwSerial(`HW_SERIAL),
|
||||||
.io_uniCode(0)
|
.io_uniCode(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -199,26 +219,26 @@ ShinTop s_ShinTop_slv1(
|
|||||||
|
|
||||||
.io_iqspi_sck(qspi_sck),
|
.io_iqspi_sck(qspi_sck),
|
||||||
.io_iqspi_mosi(qspi_mosi),
|
.io_iqspi_mosi(qspi_mosi),
|
||||||
.io_iqspi_miso(qspi_miso[4*2+3:4*2]),
|
.io_iqspi_miso(`IQSPI_MISO(2)),
|
||||||
.io_iqspi_isDirIn(),
|
.io_iqspi_isDirIn(),
|
||||||
.io_iqspi_csn(spi_csn[2]),
|
.io_iqspi_csn(`IQSPI_CSN(2)),
|
||||||
|
|
||||||
.io_ospi_sck (spi_sck),
|
.io_ospi_sck (spi_sck),
|
||||||
.io_ospi_mosi(spi_mosi),
|
.io_ospi_mosi(spi_mosi),
|
||||||
.io_ospi_miso(spi_miso[2]),
|
.io_ospi_miso(spi_miso[2]),
|
||||||
.io_ospi_csn (spi_csn[7]),
|
.io_ospi_csn (`ESPI_CSN(2)),
|
||||||
|
|
||||||
.io_oqspi_sck(qspi_sck),
|
.io_oqspi_sck(qspi_sck),
|
||||||
.io_oqspi_mosi(qspi_mosi),
|
.io_oqspi_mosi(qspi_mosi),
|
||||||
.io_oqspi_miso(qspi_miso[4*7+3:4*7]),
|
.io_oqspi_miso(`EQSPI_MISO(2)),
|
||||||
.io_oqspi_isDirIn(),
|
.io_oqspi_isDirIn(),
|
||||||
.io_oqspi_csn(spi_csn[12]),
|
.io_oqspi_csn(`EQSPI_CSN(2)),
|
||||||
|
|
||||||
.io_isSoftReset(isSoftReset[2]),
|
.io_isSoftReset(isSoftReset[2]),
|
||||||
.io_interrupt(io_int_sig[2]),
|
.io_interrupt(io_int_sig[2]),
|
||||||
.io_latchPin_0(latch0),
|
.io_latchPin_0(latch0),
|
||||||
.io_latchPin_1(latch1),
|
.io_latchPin_1(latch1),
|
||||||
.io_hwSerial(0),
|
.io_hwSerial(`HW_SERIAL),
|
||||||
.io_uniCode(0)
|
.io_uniCode(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -250,26 +270,26 @@ ShinTop s_ShinTop_slv2(
|
|||||||
|
|
||||||
.io_iqspi_sck(qspi_sck),
|
.io_iqspi_sck(qspi_sck),
|
||||||
.io_iqspi_mosi(qspi_mosi),
|
.io_iqspi_mosi(qspi_mosi),
|
||||||
.io_iqspi_miso(qspi_miso[4*3+3:4*3]),
|
.io_iqspi_miso(`IQSPI_MISO(3)),
|
||||||
.io_iqspi_isDirIn(),
|
.io_iqspi_isDirIn(),
|
||||||
.io_iqspi_csn(spi_csn[3]),
|
.io_iqspi_csn(`IQSPI_CSN(3)),
|
||||||
|
|
||||||
.io_ospi_sck (spi_sck),
|
.io_ospi_sck (spi_sck),
|
||||||
.io_ospi_mosi(spi_mosi),
|
.io_ospi_mosi(spi_mosi),
|
||||||
.io_ospi_miso(spi_miso[3]),
|
.io_ospi_miso(spi_miso[3]),
|
||||||
.io_ospi_csn (spi_csn[8]),
|
.io_ospi_csn (`ESPI_CSN(3)),
|
||||||
|
|
||||||
.io_oqspi_sck(qspi_sck),
|
.io_oqspi_sck(qspi_sck),
|
||||||
.io_oqspi_mosi(qspi_mosi),
|
.io_oqspi_mosi(qspi_mosi),
|
||||||
.io_oqspi_miso(qspi_miso[4*8+3:4*8]),
|
.io_oqspi_miso(`EQSPI_MISO(3)),
|
||||||
.io_oqspi_isDirIn(),
|
.io_oqspi_isDirIn(),
|
||||||
.io_oqspi_csn(spi_csn[13]),
|
.io_oqspi_csn(`EQSPI_CSN(3)),
|
||||||
|
|
||||||
.io_isSoftReset(isSoftReset[3]),
|
.io_isSoftReset(isSoftReset[3]),
|
||||||
.io_interrupt(io_int_sig[3]),
|
.io_interrupt(io_int_sig[3]),
|
||||||
.io_latchPin_0(latch0),
|
.io_latchPin_0(latch0),
|
||||||
.io_latchPin_1(latch1),
|
.io_latchPin_1(latch1),
|
||||||
.io_hwSerial(0),
|
.io_hwSerial(`HW_SERIAL),
|
||||||
.io_uniCode(0)
|
.io_uniCode(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -301,37 +321,30 @@ ShinTop s_ShinTop_slv3(
|
|||||||
|
|
||||||
.io_iqspi_sck(qspi_sck),
|
.io_iqspi_sck(qspi_sck),
|
||||||
.io_iqspi_mosi(qspi_mosi),
|
.io_iqspi_mosi(qspi_mosi),
|
||||||
.io_iqspi_miso(qspi_miso[4*4+3:4*4]),
|
.io_iqspi_miso(`IQSPI_MISO(4)),
|
||||||
.io_iqspi_isDirIn(),
|
.io_iqspi_isDirIn(),
|
||||||
.io_iqspi_csn(spi_csn[4]),
|
.io_iqspi_csn(`IQSPI_CSN(4)),
|
||||||
|
|
||||||
.io_ospi_sck (spi_sck),
|
.io_ospi_sck (spi_sck),
|
||||||
.io_ospi_mosi(spi_mosi),
|
.io_ospi_mosi(spi_mosi),
|
||||||
.io_ospi_miso(spi_miso[4]),
|
.io_ospi_miso(spi_miso[4]),
|
||||||
.io_ospi_csn (spi_csn[9]),
|
.io_ospi_csn (`ESPI_CSN(4)),
|
||||||
|
|
||||||
.io_oqspi_sck(qspi_sck),
|
.io_oqspi_sck(qspi_sck),
|
||||||
.io_oqspi_mosi(qspi_mosi),
|
.io_oqspi_mosi(qspi_mosi),
|
||||||
.io_oqspi_miso(qspi_miso[4*9+3:4*9]),
|
.io_oqspi_miso(`EQSPI_MISO(4)),
|
||||||
.io_oqspi_isDirIn(),
|
.io_oqspi_isDirIn(),
|
||||||
.io_oqspi_csn(spi_csn[14]),
|
.io_oqspi_csn(`EQSPI_CSN(4)),
|
||||||
|
|
||||||
.io_isSoftReset(isSoftReset[4]),
|
.io_isSoftReset(isSoftReset[4]),
|
||||||
.io_interrupt(io_int_sig[4]),
|
.io_interrupt(io_int_sig[4]),
|
||||||
.io_latchPin_0(latch0),
|
.io_latchPin_0(latch0),
|
||||||
.io_latchPin_1(latch1),
|
.io_latchPin_1(latch1),
|
||||||
.io_hwSerial(0),
|
.io_hwSerial(`HW_SERIAL),
|
||||||
.io_uniCode(0)
|
.io_uniCode(0)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
clock = 0;
|
clock = 0;
|
||||||
clk8x = 0;
|
clk8x = 0;
|
||||||
@@ -344,7 +357,7 @@ initial begin
|
|||||||
|
|
||||||
$timeformat(-9, 2, " ns", 8);
|
$timeformat(-9, 2, " ns", 8);
|
||||||
|
|
||||||
spi_csn = ~15'b0;
|
spi_csn = {`SPI_CSN_NUM{1'b1}}; //~15'b0;
|
||||||
|
|
||||||
#100
|
#100
|
||||||
reset <= 1;
|
reset <= 1;
|
||||||
@@ -426,23 +439,38 @@ end
|
|||||||
assign qspi_mosi = exChangeRego[7:4];
|
assign qspi_mosi = exChangeRego[7:4];
|
||||||
|
|
||||||
wire [3:0] qspi_mux_miso =
|
wire [3:0] qspi_mux_miso =
|
||||||
( qspi_miso[4*0+3:4*0] & ~{4{spi_csn[ 0]}}) |
|
//( qspi_miso[4*0+3:4*0] & ~{4{spi_csn[ 0]}}) |
|
||||||
( qspi_miso[4*1+3:4*1] & ~{4{spi_csn[ 1]}}) |
|
//( qspi_miso[4*1+3:4*1] & ~{4{spi_csn[ 1]}}) |
|
||||||
( qspi_miso[4*2+3:4*2] & ~{4{spi_csn[ 2]}}) |
|
//( qspi_miso[4*2+3:4*2] & ~{4{spi_csn[ 2]}}) |
|
||||||
( qspi_miso[4*3+3:4*3] & ~{4{spi_csn[ 3]}}) |
|
//( qspi_miso[4*3+3:4*3] & ~{4{spi_csn[ 3]}}) |
|
||||||
( qspi_miso[4*4+3:4*4] & ~{4{spi_csn[ 4]}}) |
|
//( qspi_miso[4*4+3:4*4] & ~{4{spi_csn[ 4]}}) |
|
||||||
( qspi_miso[4*5+3:4*5] & ~{4{spi_csn[10]}}) |
|
//( qspi_miso[4*5+3:4*5] & ~{4{spi_csn[10]}}) |
|
||||||
( qspi_miso[4*6+3:4*6] & ~{4{spi_csn[11]}}) |
|
//( qspi_miso[4*6+3:4*6] & ~{4{spi_csn[11]}}) |
|
||||||
( qspi_miso[4*7+3:4*7] & ~{4{spi_csn[12]}}) |
|
//( qspi_miso[4*7+3:4*7] & ~{4{spi_csn[12]}}) |
|
||||||
( qspi_miso[4*8+3:4*8] & ~{4{spi_csn[13]}}) |
|
//( qspi_miso[4*8+3:4*8] & ~{4{spi_csn[13]}}) |
|
||||||
( qspi_miso[4*9+3:4*9] & ~{4{spi_csn[14]}});
|
//( qspi_miso[4*9+3:4*9] & ~{4{spi_csn[14]}});
|
||||||
|
(`IQSPI_MISO(0) & ~{4{`IQSPI_CSN(0)}}) |
|
||||||
|
(`IQSPI_MISO(1) & ~{4{`IQSPI_CSN(1)}}) |
|
||||||
|
(`IQSPI_MISO(2) & ~{4{`IQSPI_CSN(2)}}) |
|
||||||
|
(`IQSPI_MISO(3) & ~{4{`IQSPI_CSN(3)}}) |
|
||||||
|
(`IQSPI_MISO(4) & ~{4{`IQSPI_CSN(4)}}) |
|
||||||
|
(`EQSPI_MISO(0) & ~{4{`EQSPI_CSN(0)}}) |
|
||||||
|
(`EQSPI_MISO(1) & ~{4{`EQSPI_CSN(1)}}) |
|
||||||
|
(`EQSPI_MISO(2) & ~{4{`EQSPI_CSN(2)}}) |
|
||||||
|
(`EQSPI_MISO(3) & ~{4{`EQSPI_CSN(3)}}) |
|
||||||
|
(`EQSPI_MISO(4) & ~{4{`EQSPI_CSN(4)}});
|
||||||
|
|
||||||
wire spi_mux_miso =
|
wire spi_mux_miso =
|
||||||
( spi_miso[0] & ~spi_csn[5] ) |
|
//( spi_miso[0] & ~spi_csn[5] ) |
|
||||||
( spi_miso[1] & ~spi_csn[6] ) |
|
//( spi_miso[1] & ~spi_csn[6] ) |
|
||||||
( spi_miso[2] & ~spi_csn[7] ) |
|
//( spi_miso[2] & ~spi_csn[7] ) |
|
||||||
( spi_miso[3] & ~spi_csn[8] ) |
|
//( spi_miso[3] & ~spi_csn[8] ) |
|
||||||
( spi_miso[4] & ~spi_csn[9] );
|
//( spi_miso[4] & ~spi_csn[9] );
|
||||||
|
( spi_miso[0] & ~`ESPI_CSN(0)) |
|
||||||
|
( spi_miso[1] & ~`ESPI_CSN(1)) |
|
||||||
|
( spi_miso[2] & ~`ESPI_CSN(2)) |
|
||||||
|
( spi_miso[3] & ~`ESPI_CSN(3)) |
|
||||||
|
( spi_miso[4] & ~`ESPI_CSN(4));
|
||||||
|
|
||||||
reg isReq = 0;
|
reg isReq = 0;
|
||||||
reg isBusy = 0;
|
reg isBusy = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user