Kaynağa Gözat

Обновлён тестбенч

Anatoliy Chigirinskiy 1 yıl önce
ebeveyn
işleme
25a2898660

+ 8 - 12
sources_1/new/S5443_3Top.v

@@ -76,10 +76,6 @@ module S5443_3Top
     wire [0:31] txFifoCtrlReg [SpiNum-1:0];
     wire [0:31] rxFifoCtrlReg [SpiNum-1:0];
     
-    
-    
-    
-    
     //InitRst
     
     wire [SpiNum-1:0] initRstGen;
@@ -299,13 +295,13 @@ module S5443_3Top
     assign smcValComb = (!SmcAmsN_i && !SmcAwe_i) ? 1'b1 : 1'b0;
     assign txEn = spiTxRxEn[6:0];
 
-    assign Mosi1_io[0] =(SpiDir_o[0])?mosi1[0]:1'bz;
-    assign Mosi1_io[1] =(SpiDir_o[1])?mosi1[1]:1'bz;
-    assign Mosi1_io[2] =(SpiDir_o[2])?mosi1[2]:1'bz;
-    assign Mosi1_io[3] =(SpiDir_o[3])?mosi1[3]:1'bz;
-    assign Mosi1_io[4] =(SpiDir_o[4])?mosi1[4]:1'bz;
-    assign Mosi1_io[5] =(SpiDir_o[5])?mosi1[5]:1'bz;
-    assign Mosi1_io[6] =(SpiDir_o[6])?mosi1[6]:1'bz;
+    // assign Mosi1_io[0] =(SpiDir_o[0])?mosi1[0]:1'bz;
+    // assign Mosi1_io[1] =(SpiDir_o[1])?mosi1[1]:1'bz;
+    // assign Mosi1_io[2] =(SpiDir_o[2])?mosi1[2]:1'bz;
+    // assign Mosi1_io[3] =(SpiDir_o[3])?mosi1[3]:1'bz;
+    // assign Mosi1_io[4] =(SpiDir_o[4])?mosi1[4]:1'bz;
+    // assign Mosi1_io[5] =(SpiDir_o[5])?mosi1[5]:1'bz;
+    // assign Mosi1_io[6] =(SpiDir_o[6])?mosi1[6]:1'bz;
   
     assign widthSel[0] = spi0CtrlRR[6:5];
     assign widthSel[1] = spi1CtrlRR[6:5];
@@ -798,7 +794,7 @@ module S5443_3Top
                 .Ss_o(Ss_o[i]),
                 .SsFlash_o(SsFlash_o[i]),
                 .Mosi0_o(Mosi0_o[i]),
-                .Mosi1_o(mosi1[i]),
+                .Mosi1_io(Mosi1_io[i]),
                 .Mosi2_o(Mosi2_o[i]),
                 .Mosi3_o(Mosi3_o[i])
             );

+ 73 - 17
sources_1/new/S5443_3_tb.v

@@ -11,14 +11,17 @@ reg Rst_i;
 reg [10:0] SmcAddr_i;
 reg [15:0]SmcData_i;
 reg SmcAre_i;
+wire smcAre;
 reg SmcAwe_i;
 wire SmcAmsN_i;
 wire [1:0] SmcBe_i;
-reg SmcAoe_i;
+wire SmcAoe_i;
 
 reg [31:0] tb_cnt;
 wire [15:0] smcData;
 reg mosi1reg;
+reg minorByte;
+reg [1:0] areCnt;
 //***********************************************
 //	           SPI0 Adresses
 //***********************************************
@@ -219,10 +222,12 @@ localparam GPIOAddr = 11'hFF0;
 //***********************************************
 //	           ASSIGNS
 //***********************************************
-assign SmcBe_i = (tb_cnt >0 && tb_cnt <=44) ? 2'b00 : 2'b11;
+assign SmcBe_i = (tb_cnt >0 && tb_cnt <=374) ? 2'b00 : 2'b11;
 assign SmcAmsN_i = (tb_cnt > 0 && tb_cnt <= 44) ? 1'b0 : 1'b1;
-assign smcData = SmcData_i;
+assign SmcAoe_i = (tb_cnt > 330 && tb_cnt <= 374) ? 1'b0 : 1'b1;
+assign smcData = (!SmcAoe_i && !SmcAre_i) ? 16'bz:SmcData_i;
 assign mosi1_io = (!Mode0) ? mosi0_o : 1'bz;
+assign smcAre = SmcAre_i;
 
 //***********************************************
 //	           CLOCK GENERATION
@@ -236,7 +241,7 @@ always #(CLK_PERIOD/2) Clk_i = ~Clk_i;
         .SmcData_io(smcData), 
         .SmcAwe_i(SmcAwe_i), 
         .SmcAmsN_i(SmcAmsN_i), 
-        .SmcAre_i(SmcAre_i), 
+        .SmcAre_i(smcAre), 
         .SmcBe_i(SmcBe_i), 
         .SmcAoe_i(SmcAoe_i), 
         .Led_o(), 
@@ -270,11 +275,26 @@ always @(posedge Clk_i) begin
     end
 end
 
-    
-
-
-
 
+always @(posedge Clk_i) begin 
+    if (Rst_i) begin 
+        SmcAre_i <= 1'b1;
+    end
+    else begin 
+        if (tb_cnt > 330 && tb_cnt <= 374) begin
+            if (tb_cnt % 2 == 0) begin 
+                SmcAre_i <= 1'b0;
+            end
+            else begin  
+                SmcAre_i <= 1'b1;
+            end
+        end
+        else begin 
+            SmcAre_i <= 1'b1;
+        end
+    end
+end
+    
 always @(posedge Clk_i) begin 
     if (Rst_i) begin 
         SmcAddr_i <= 0;
@@ -311,18 +331,53 @@ always @(posedge Clk_i) begin
         end
         endcase
         end
-        else begin 
-            if (tb_cnt % 2 != 0) begin 
-                SmcAddr_i <= Spi0TxFifoAddrL;
+        else begin
+            if (tb_cnt <= 44) begin  
+                if (tb_cnt % 2 != 0) begin 
+                    SmcAddr_i <= Spi0TxFifoAddrL;
+                end
+                else begin 
+                    SmcAddr_i <= Spi0TxFifoAddrM;
+                end
             end
             else begin 
-                SmcAddr_i <= Spi0TxFifoAddrM;
+                if (tb_cnt % 2 == 0) begin
+                    if (minorByte != 0) begin  
+                        SmcAddr_i <= Spi0RxFifoAddrL;
+                    end
+                    else begin 
+                        SmcAddr_i <= Spi0RxFifoAddrM;
+                    end
+                end
             end
         end
     end
 end
 
 
+always @(posedge Clk_i) begin 
+    if (Rst_i) begin 
+        areCnt <= 2'b0;
+    end
+    else begin 
+        if (!SmcAre_i) begin 
+            areCnt <= areCnt+1;
+        end
+        else begin 
+            areCnt <= 2'b0;
+        end
+    end
+end
+
+always @(posedge Clk_i) begin 
+    if (SmcAddr_i == Spi0RxFifoAddrM) begin 
+        minorByte <= 1'b1;
+    end
+    else begin
+        minorByte <= 1'b0;
+    end
+end
+
 always @(posedge Clk_i) begin 
     if (Rst_i) begin 
         SmcData_i <= 16'h0;
@@ -359,7 +414,8 @@ always @(posedge Clk_i) begin
             end
             endcase
         end
-        else begin 
+        else begin
+            if (tb_cnt <300) 
                 SmcData_i <= $urandom_range(0, 8'hFF);
             end
     end
@@ -369,16 +425,16 @@ always @(posedge Clk_i) begin
     if (Rst_i) begin 
         tb_cnt <= 0;
     end
-    else begin 
-        tb_cnt <= tb_cnt + 1;
+    else begin
+        if (SmcAre_i) begin  
+            tb_cnt <= tb_cnt + 1;
+        end
     end
 end
 
 initial begin 
     Clk_i = 1'b0;
     Rst_i = 1'b1;
-    SmcAre_i = 1'b1;
-    SmcAoe_i = 1'b1;
     #(CLK_PERIOD*300) Rst_i = 1'b0;
 
 

+ 3 - 2
sources_1/new/SpiSubSystem/SpiSubSystem.v

@@ -43,7 +43,7 @@ module SpiSubSystem #(
     output Ss_o,
     output SsFlash_o,
     output Mosi0_o,
-    output Mosi1_o,
+    inout Mosi1_io,
     output Mosi2_o,
     output Mosi3_o
 );
@@ -74,6 +74,7 @@ wire [CmdRegWidth-1:0] dataToRxFifo;
 //================================================================================
 assign valToTxFifoRead  = (SpiMode_i) ? valToTxQ : valToTxR;
 
+assign Mosi1_io = (SpiMode_i) ? mosi1_o : 1'bz;
 //================================================================================
 //	CODING
 //================================================================================
@@ -172,7 +173,7 @@ QuadSPIm QuadSPIm_inst (
     .Sck_o(sckQ),
     .Ss_o(ssQ),
     .Mosi0_o(mosi0Q),
-    .Mosi1_o(Mosi1_o),
+    .Mosi1_o(mosi1_o),
     .Mosi2_o(Mosi2_o),
     .Mosi3_o(Mosi3_o),
     .Val_o(valToTxQ)