From acf09cf11877164fac3e9b3a25afc7f03988922c Mon Sep 17 00:00:00 2001 From: Ruige Lee Date: Tue, 22 Jul 2025 11:24:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=A7=8B=E8=B0=83=E8=AF=95=EF=BC=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=81=A2=E5=A4=8D=E4=B8=8D=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/scala/backBoard/shin/ShinTop.scala | 6 +- tb/shinTest/ShinTopSpiTb.v | 85 +++++++++++++++++++-- 2 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/main/scala/backBoard/shin/ShinTop.scala b/src/main/scala/backBoard/shin/ShinTop.scala index 1cb23ca..4dd2d54 100644 --- a/src/main/scala/backBoard/shin/ShinTop.scala +++ b/src/main/scala/backBoard/shin/ShinTop.scala @@ -79,10 +79,12 @@ abstract class ShinTopBase extends Module{ val multiCLK = IO(Input(Vec(isMultiCLK, Bool()))) val down = Module(new CDRIn with CDRInMultiSample) val up = Module(new CDRIn with CDRInMultiSample) - down.multiCLK := multiCLK - up.multiCLK := multiCLK require( isMultiCLK == down.clkNum ) require( isMultiCLK == up.clkNum ) + + down.multiCLK := multiCLK + up.multiCLK := multiCLK + (down, up) } diff --git a/tb/shinTest/ShinTopSpiTb.v b/tb/shinTest/ShinTopSpiTb.v index adfb873..3cb022a 100644 --- a/tb/shinTest/ShinTopSpiTb.v +++ b/tb/shinTest/ShinTopSpiTb.v @@ -39,6 +39,8 @@ module ShinTopSpiTb( reg reset; reg clk8x; + reg [7:0] multiCLK; + wire [3:0] dDat_w; wire [3:0] uDat_w; @@ -66,11 +68,24 @@ module ShinTopSpiTb( wire [4:0] io_int_sig; +`define MULTICLK + ShinTop s_ShinTop_Mst( .clock(clock), .reset(reset | isSoftReset[0]), - .io_clk8x(clk8x), +`ifdef MULTICLK + .multiCLK_0(multiCLK[0]), + .multiCLK_1(multiCLK[1]), + .multiCLK_2(multiCLK[2]), + .multiCLK_3(multiCLK[3]), + .multiCLK_4(multiCLK[4]), + .multiCLK_5(multiCLK[5]), + .multiCLK_6(multiCLK[6]), + .multiCLK_7(multiCLK[7]), +`else + .clk8x(clk8x), +`endif .io_dDatIn(1'b0), .io_dDatOut(dDat_w[0]), .io_uDatIn(uDat_w[0]), @@ -104,7 +119,18 @@ ShinTop s_ShinTop_slv0( .clock(clock), .reset(reset | isSoftReset[1]), - .io_clk8x(clk8x), +`ifdef MULTICLK + .multiCLK_0(multiCLK[0]), + .multiCLK_1(multiCLK[1]), + .multiCLK_2(multiCLK[2]), + .multiCLK_3(multiCLK[3]), + .multiCLK_4(multiCLK[4]), + .multiCLK_5(multiCLK[5]), + .multiCLK_6(multiCLK[6]), + .multiCLK_7(multiCLK[7]), +`else + .clk8x(clk8x), +`endif .io_dDatIn(dDat_w[0]), .io_dDatOut(dDat_w[1]), .io_uDatIn(uDat_w[1]), @@ -137,7 +163,18 @@ ShinTop s_ShinTop_slv1( .clock(clock), .reset(reset | isSoftReset[2]), - .io_clk8x(clk8x), +`ifdef MULTICLK + .multiCLK_0(multiCLK[0]), + .multiCLK_1(multiCLK[1]), + .multiCLK_2(multiCLK[2]), + .multiCLK_3(multiCLK[3]), + .multiCLK_4(multiCLK[4]), + .multiCLK_5(multiCLK[5]), + .multiCLK_6(multiCLK[6]), + .multiCLK_7(multiCLK[7]), +`else + .clk8x(clk8x), +`endif .io_dDatIn(dDat_w[1]), .io_dDatOut(dDat_w[2]), .io_uDatIn(uDat_w[2]), @@ -170,7 +207,18 @@ ShinTop s_ShinTop_slv2( .clock(clock), .reset(reset | isSoftReset[3]), - .io_clk8x(clk8x), +`ifdef MULTICLK + .multiCLK_0(multiCLK[0]), + .multiCLK_1(multiCLK[1]), + .multiCLK_2(multiCLK[2]), + .multiCLK_3(multiCLK[3]), + .multiCLK_4(multiCLK[4]), + .multiCLK_5(multiCLK[5]), + .multiCLK_6(multiCLK[6]), + .multiCLK_7(multiCLK[7]), +`else + .clk8x(clk8x), +`endif .io_dDatIn(dDat_w[2]), .io_dDatOut(dDat_w[3]), .io_uDatIn(uDat_w[3]), @@ -203,7 +251,18 @@ ShinTop s_ShinTop_slv3( .clock(clock), .reset(reset | isSoftReset[4]), - .io_clk8x(clk8x), +`ifdef MULTICLK + .multiCLK_0(multiCLK[0]), + .multiCLK_1(multiCLK[1]), + .multiCLK_2(multiCLK[2]), + .multiCLK_3(multiCLK[3]), + .multiCLK_4(multiCLK[4]), + .multiCLK_5(multiCLK[5]), + .multiCLK_6(multiCLK[6]), + .multiCLK_7(multiCLK[7]), +`else + .clk8x(clk8x), +`endif .io_dDatIn(dDat_w[3]), .io_dDatOut(), .io_uDatIn(1'b0), @@ -274,6 +333,22 @@ initial begin forever begin #80 clock <= ~clock; end end + +generate + for( genvar i = 0; i < 8; i = i + 1 ) begin + initial begin + multiCLK[i] = 0; + for( integer j = i; j < 8; j = j + 1 ) begin + #20 + ; + end + forever begin #80 multiCLK[i] <= ~multiCLK[i]; end + end + end +endgenerate + + + initial begin spidata_file = $fopen("spi_trans_data.txt", "w");