设为首页 加入收藏

TOP

「数字IC设计项目」 —— AHB SRAM控制器设计 & March C-算法内建自测试的实现(十一)
2023-07-23 13:25:06 】 浏览:269
Tags:数字 计项目 AHB SRAM March
_1状态之间的转换波形:

其他几段状态转化处的波形也是同理,在此不在一一标注解释了,具体如下:

MARCH_1状态和MARCH_2状态之间的波形:

MARCH_2状态和MARCH_3状态之间的波形:

MARCH_3状态和MARCH_4状态之间的波形:

MARCH_4状态最后一段波形:

完成MARCH_4后,BIST_done被拉高,代表BIST结束。

以上,就是关于AHB-SRAN的BIST模式下的逻辑仿真解读。

最后附上两种工作模式下的Testbench:

点击查看代码
`timescale 1ns / 1ps

module sram_tb #(
    //HRESP
    parameter    OKAY  = 2'b00   ,
    parameter    ERROR = 2'b01   ,
    parameter    SPLIT = 2'b10   ,
    parameter    RETRY = 2'b11   ,
    //HTRANS
    parameter    IDLE   = 2'b00  ,
    parameter    BUSY   = 2'b01  ,
    parameter    SEQ    = 2'b10  ,
    parameter    NONSEQ = 2'b11  ,
    //HSIZE
    parameter    BYTE  = 3'b000  ,
    parameter    WORD  = 3'b001  ,
    parameter    DWORD = 3'b010  ,
    //HBURST
    parameter    SINGLE = 3'b000 ,
    parameter    INCR   = 3'b001 ,
    parameter    WRAP4  = 3'b010 ,
    parameter    INCR4  = 3'b011 ,
    parameter    WARP8  = 3'b100 ,
    parameter    INCR8  = 3'b101 ,
    parameter    WARP16 = 3'b110 ,
    parameter    INCR16 = 3'b111 

)();

    // input output declaration   
    reg HCLK;
    reg HRESETn;
    reg           HSEL  ;
    reg  [1:0]    HTRANS;    
    reg  [2:0]    HBURST;
    reg  [2:0]    HSIZE ;
    reg           HWRITE;
    reg  [15:0]   HADDR ;
    reg  [31:0]   HWDATA;
    wire          HREADY;
    wire [1:0]    HRESP ;
    wire [31:0]   HRDATA;
    // BIST IO
    reg           BIST_en;
    wire          BIST_done;
    wire          BIST_fail;

    // top module instantion
    sram_top u_test(
        .HCLK   (HCLK   ), 
        .HRESETn(HRESETn), 
        .HSEL   (HSEL   ),
        .HTRANS (HTRANS ),    
        .HBURST (HBURST ),
        .HSIZE  (HSIZE  ),
        .HWRITE (HWRITE ),
        .HADDR  (HADDR  ),
        .HWDATA (HWDATA ),
        .HREADY (HREADY ),
        .HRESP  (HRESP  ),
        .HRDATA (HRDATA ),
        .BIST_en  (BIST_en  ),     
        .BIST_done(BIST_done),
        .BIST_fail(BIST_fail)
    );
 
    // Excitation Vector Generation
    initial begin
    	forever #10 HCLK = ~HCLK;	//50Mhz
    end
    
    initial begin
        HCLK  = 0;
        HRESETn = 0;


    // Choose BIST Mode/ FUNC Mode to run simulation 
    
    /*————————————————————————————————————————————————————————————————————————*\
    /                        Testbench for BIST Mode                           \  
    \*————————————————————————————————————————————————————————————————————————*/        
        
/*
        BIST_en = 1;
    end
*/  

    /*————————————————————————————————————————————————————————————————————————*\
    /                        Testbench for FUNC Mode                           \
    \*————————————————————————————————————————————————————————————————————————*/      
        
        HRESETn = 0;
        BIST_en = 0;

        HSEL    = 0;
        HTRANS  = 3'b111;    
        HBURST  = 2'b11;
        HSIZE   = 3'b111;
        HWRITE  = 1'b0;
        HADDR   = 16'h0000; //HADDR[1:0] have to be 2'b00 ( 4n )
        HWDATA  = 32'h0;

        #65  HRESETn = 1;
        //-------------------------WRITE MEM---------------
        #20  
        // write control0 
        HSEL    = 1;
        HTRANS  = NONSEQ;    
        HBURST  = SINGLE;
        HSIZE   = WORD;
        HWRITE  = 1'b1;
        HADDR   = 16'h0000;

        #20  
        // data0 → mem(0x0000)     
        HWDATA  = 32'h11223344;
        // write control 1        
        HWRITE  = 1'b1;
        HADDR   = 16'h0004;


        #20  
        // data1 → mem(0x0004)
        HWDATA  = 32'h55667788;
        // write control 2     
        HWRITE  = 1'b1;
        HADDR   = 16'h0008;


        #20  
        // data2 → mem(0x0008)
        HWDATA  = 32'h99AABBCC;
        //// write control 3
        //HWRITE  = 1'b1;
        //HADDR   = 16'h000C;

        #20  
        // data3 → mem(0x000C)
        HWDATA  = 32'hAAAAAAAA;
        // write control 4
        HWRITE  = 1'b1;
        HADDR   = 16'h0010;

        #20  
        // data4 → mem(0x0010)
        HWDATA  = 32'hBBBBBBBB;
        // write control 5
        HWRITE  = 1'b1;
        HADDR   = 16'h0014;

        
        #20  
        // data5 → mem(0x0014)
        HWDATA  = 32'hCCCCCCCC;
        // write control 6
        HWRITE  = 1'b1;
        HADDR   = 16'h8000;

        #20  
        // data6 → mem(0x8000)
        HWDATA  = 32'hDDDDDDDD;
        // write control 7
        HWRITE  = 1'b1;
        HADDR   = 16'h8004;

        #20  
        // data7 → mem(0x8004)
        HWDATA  = 32'hEEEEEEEE;
        // write control 8
        HWRITE  = 1'b1;
        HADDR   = 16'h8008;

        #20  
        // data8 → mem(0x8008)
        HWDATA  = 32'hFFFFFFFF;
        // read control 0
        HWRITE  = 1'b0;
        HADDR   = 16'h0000;
        
        //--------------READ MEM----------------
        #
首页 上一页 8 9 10 11 下一页 尾页 11/11/11
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【牛客】7 计数器&存储器&综合 下一篇推排序 Verilog实现原理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目