亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wb_bus_mon.v

?? FPGA數字電子系統設計與開發實例導航(源程序)
?? V
字號:


`include "timescale.v"
`include "wb_model_defines.v"
// WISHBONE bus monitor module - it connects to WISHBONE master signals and
// monitors for any illegal combinations appearing on the bus.
module WB_BUS_MON(
                    CLK_I,
                    RST_I,
	            ACK_I,
                    ADDR_O,
                    CYC_O,
                    DAT_I,
                    DAT_O,
                    ERR_I,
                    RTY_I,
                    SEL_O,
                    STB_O,
                    WE_O,
                    TAG_I,
                    TAG_O,
                    CAB_O,
                    log_file_desc
                  ) ;

input                           CLK_I  ;
input                           RST_I  ;
input                           ACK_I  ;
input   [(`WB_ADDR_WIDTH-1):0]  ADDR_O ;
input                           CYC_O  ;
input   [(`WB_DATA_WIDTH-1):0]  DAT_I  ;
input   [(`WB_DATA_WIDTH-1):0]  DAT_O  ;
input                           ERR_I  ;
input                           RTY_I  ;
input   [(`WB_SEL_WIDTH-1):0]   SEL_O  ;
input                           STB_O  ;
input                           WE_O   ;
input   [(`WB_TAG_WIDTH-1):0] TAG_I  ;
input   [(`WB_TAG_WIDTH-1):0] TAG_O  ;
input                           CAB_O  ;
input [31:0] log_file_desc ;

always@(posedge CLK_I or posedge RST_I)
begin
    if (RST_I)
    begin
        // when reset is applied, all control signals must be low
        if (CYC_O)
        begin
            $display("*E (%0t) CYC_O active under reset", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)CYC_O active under reset", $time) ;
        end
        if (STB_O)
        begin
            $display("*E (%0t) STB_O active under reset", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)STB_O active under reset", $time) ;
        end
        /*if (ACK_I)
            $display("ACK_I active under reset") ;*/
        if (ERR_I)
        begin
            $display("*E (%0t) ERR_I active under reset", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)ERR_I active under reset", $time) ;
        end
        if (RTY_I)
        begin
            $display("*E (%0t) RTY_I active under reset", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)RTY_I active under reset", $time) ;
        end
        if (CAB_O)
        begin
            $display("*E (%0t) CAB_O active under reset", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)CAB_O active under reset", $time) ;
        end
    end // reset
    else
    if (~CYC_O)
    begin
        // when cycle indicator is low, all control signals must be low
        if (STB_O)
        begin
            $display("*E (%0t) STB_O active without CYC_O being active", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)STB_O active without CYC_O being active", $time) ;
        end
        if (ACK_I)
        begin
            $display("*E (%0t) ACK_I active without CYC_O being active", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)ACK_I active without CYC_O being active", $time) ;
        end
        if (ERR_I)
        begin
            $display("*E (%0t) ERR_I active without CYC_O being active", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)ERR_I active without CYC_O being active", $time) ;
        end
        if (RTY_I)
        begin
            $display("*E (%0t) RTY_I active without CYC_O being active", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)RTY_I active without CYC_O being active", $time) ;
        end
        if (CAB_O)
        begin
            $display("*E (%0t) CAB_O active without CYC_O being active", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)CAB_O active without CYC_O being active", $time) ;
        end
    end // ~CYC_O
end

reg [`WB_DATA_WIDTH-1:0] previous_data ;
reg [`WB_ADDR_WIDTH-1:0] previous_address ;
reg [`WB_SEL_WIDTH-1:0] previous_sel ;
reg                     previous_stb ;
reg                     previous_ack ;
reg                     previous_err ;
reg                     previous_rty ;
reg                     previous_cyc ;
reg can_change ;

always@(posedge CLK_I or posedge RST_I)
begin
    if (RST_I)
    begin
        previous_stb <= 1'b0 ;
        previous_ack <= 1'b0 ;
        previous_err <= 1'b0 ;
        previous_rty <= 1'b0 ;
        previous_cyc <= 1'b0 ;
    end
    else
    begin
        previous_stb <= STB_O ;
        previous_ack <= ACK_I ;
        previous_err <= ERR_I ;
        previous_rty <= RTY_I ;
        previous_cyc <= CYC_O ;
    end
end

// cycle monitor
always@(posedge CLK_I)
begin
    if (CYC_O && ~RST_I) // cycle in progress
    begin
        if (STB_O)
        begin
            // check for two control signals active at same edge
            if ( ACK_I && RTY_I )
            begin
                $display("*E (%0t) ACK_I and RTY_I asserted at the same time during cycle", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)ACK_I and RTY_I asserted at the same time during cycle", $time) ;
            end
            if ( ACK_I && ERR_I )
            begin
                $display("*E (%0t) ACK_I and ERR_I asserted at the same time during cycle", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)ACK_I and ERR_I asserted at the same time during cycle", $time) ;
            end
            if ( RTY_I && ERR_I )
            begin
                $display("*E (%0t) RTY_I and ERR_I asserted at the same time during cycle", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)RTY_I and ERR_I asserted at the same time during cycle", $time) ;
            end

            if ( can_change !== 1 )
            begin
                if ( ADDR_O !== previous_address )
                begin
                    $display("*E (%0t) WB bus monitor detected address change in the middle of the cycle!", $time) ;
                    $fdisplay(log_file_desc, "*E (%0t)(%m)WB bus monitor detected address change in the middle of the cycle!", $time) ;
                end

                if ( SEL_O !== previous_sel )
                begin
                    $display("*E (%0t) WB bus monitor detected select lines changed in the middle of the cycle!", $time) ;
                    $fdisplay(log_file_desc, "*E (%0t)(%m)WB bus monitor detected select lines changed in the middle of the cycle!", $time) ;
                end

                if ( (WE_O !== 0) && ( DAT_O !== previous_data ) )
                begin
                    $display("*E (%0t) WB bus monitor detected data lines changed in the middle of the cycle!", $time) ;
                    $fdisplay(log_file_desc, "*E (%0t)(%m)WB bus monitor detected data lines changed in the middle of the cycle!", $time) ;
                end
            end

            if ( ACK_I || RTY_I || ERR_I )
                can_change       = 1 ;
            else
            begin
                previous_data    = DAT_O ;
                previous_address = ADDR_O ;
                previous_sel     = SEL_O ;
                can_change = 0 ;
            end

        end // STB_O
        else
        begin //~STB_O
            // while STB_O is inactive, only ACK_I is allowed to be active
            if ( ERR_I )
            begin
                $display("*E (%0t) ERR_I asserted during cycle without STB_O", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)ERR_I asserted during cycle without STB_O", $time) ;
            end
            if ( RTY_I )
            begin
                $display("*E (%0t) RTY_I asserted during cycle without STB_O", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)RTY_I asserted during cycle without STB_O", $time) ;
            end

            if ((previous_ack !== 1) && (previous_err !== 1) && (previous_rty !== 1) && (previous_stb !== 0))
            begin
                $display("STB_O de-asserted without reception of slave response") ;
                $fdisplay(log_file_desc, "STB_O de-asserted without reception of slave response") ;
            end

            can_change = 1 ;
        end   // ~STB_O
    end // cycle in progress
    else if (!RST_I)
    begin
        // cycle not in progress anymore
        can_change = 1 ;
        if ((previous_ack !== 1) && (previous_err !== 1) && (previous_rty !== 1) && (previous_stb !== 0))
        begin
            $display("STB_O de-asserted without reception of slave response") ;
            $fdisplay(log_file_desc, "STB_O de-asserted without reception of slave response") ;
        end
    end
end // cycle monitor

// CAB_O monitor - CAB_O musn't change during one cycle
reg [1:0] first_cab_val ;
always@(posedge CLK_I or RST_I)
begin
    if ((CYC_O === 0) || RST_I)
        first_cab_val <= 2'b00 ;
    else
    begin
        // cycle in progress - is this first clock edge in a cycle ?
        if (first_cab_val[1] === 1'b0)
            first_cab_val <= {1'b1, CAB_O} ;
        else if ( first_cab_val[0] !== CAB_O )
        begin
            $display("*E (%0t) CAB_O value changed during cycle", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)CAB_O value changed during cycle", $time) ;
        end
    end
end // CAB_O monitor

// WE_O monitor for consecutive address bursts
reg [1:0] first_we_val ;
always@(posedge CLK_I or posedge RST_I)
begin
    if (~CYC_O || ~CAB_O || RST_I)
        first_we_val <= 2'b00 ;
    else
    if (STB_O)
    begin
        // cycle in progress - is this first clock edge in a cycle ?
        if (first_we_val[1] == 1'b0)
            first_we_val <= {1'b1, WE_O} ;
        else if ( first_we_val[0] != WE_O )
        begin
            $display("*E (%0t) WE_O value changed during CAB cycle", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)WE_O value changed during CAB cycle", $time) ;
        end
    end
end // CAB_O monitor

// address monitor for consecutive address bursts
reg [`WB_ADDR_WIDTH:0] address ;
always@(posedge CLK_I or posedge RST_I)
begin
    if (~CYC_O || ~CAB_O || RST_I)
        address <= {(`WB_ADDR_WIDTH + 1){1'b0}} ;
    else
    begin
        if (STB_O && ACK_I)
        begin
            if (address[`WB_ADDR_WIDTH] == 1'b0)
                address <= {1'b1, (ADDR_O + `WB_SEL_WIDTH)} ;
            else
            begin
                if ( address[(`WB_ADDR_WIDTH-1):0] != ADDR_O)
                begin
                    $display("*E (%0t) Consecutive address burst address incrementing incorrect", $time) ;
                    $fdisplay(log_file_desc, "*E (%0t)(%m)Consecutive address burst address incrementing incorrect", $time) ;
                end
                else
                    address <= {1'b1, (ADDR_O + `WB_SEL_WIDTH)} ;
            end
        end
    end
end // address monitor

// data monitor
always@(posedge CLK_I or posedge RST_I)
begin
    if (CYC_O && STB_O && ~RST_I)
    begin
        if ( ((^ADDR_O) !== 1'b1) && ((^ADDR_O) !== 1'b0) )
        begin
            $display("*E (%0t) Master provided invalid address and qualified it with STB_O", $time) ;
            $fdisplay(log_file_desc, "*E (%0t)(%m)Master provided invalid address and qualified it with STB_O", $time) ;
        end
        if ( WE_O )
        begin
            if (
                (SEL_O[0] && (((^DAT_O[7:0])   !== 1'b0) && ((^DAT_O[7:0])   !== 1'b1))) ||
                (SEL_O[1] && (((^DAT_O[15:8])  !== 1'b0) && ((^DAT_O[15:8])  !== 1'b1))) ||
                (SEL_O[2] && (((^DAT_O[23:16]) !== 1'b0) && ((^DAT_O[23:16]) !== 1'b1))) ||
                (SEL_O[3] && (((^DAT_O[31:24]) !== 1'b0) && ((^DAT_O[31:24]) !== 1'b1)))
               )
            begin
                $display("*E (%0t) Master provided invalid data during write and qualified it with STB_O", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)Master provided invalid data during write and qualified it with STB_O", $time) ;
                $display("*E (%0t) Byte select value: SEL_O = %b, Data bus value: DAT_O =  %h ", $time, SEL_O, DAT_O) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)Byte select value: SEL_O = %b, Data bus value: DAT_O =  %h ", $time, SEL_O, DAT_O) ;
            end

        end
        else
        if (~WE_O && ACK_I)
        begin
            if (
                (SEL_O[0] && (((^DAT_I[7:0])   !== 1'b0) && ((^DAT_I[7:0])   !== 1'b1))) ||
                (SEL_O[1] && (((^DAT_I[15:8])  !== 1'b0) && ((^DAT_I[15:8])  !== 1'b1))) ||
                (SEL_O[2] && (((^DAT_I[23:16]) !== 1'b0) && ((^DAT_I[23:16]) !== 1'b1))) ||
                (SEL_O[3] && (((^DAT_I[31:24]) !== 1'b0) && ((^DAT_I[31:24]) !== 1'b1)))
               )
            begin
                $display("*E (%0t) Slave provided invalid data during read and qualified it with ACK_I", $time) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)Slave provided invalid data during read and qualified it with ACK_I", $time) ;
                $display("*E (%0t) Byte select value: SEL_O = %b, Data bus value: DAT_I =  %h ", $time, SEL_O, DAT_I) ;
                $fdisplay(log_file_desc, "*E (%0t)(%m)Byte select value: SEL_O = %b, Data bus value: DAT_I =  %h ", $time, SEL_O, DAT_I) ;
            end
        end
    end
end

initial
begin
    previous_data = 0 ;
    previous_address = 0 ;
    can_change = 1 ;
end
endmodule // BUS_MON

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费观看视频| 国产精品久久久久久久久晋中| 久久久天堂av| 国产精品区一区二区三区| 色先锋久久av资源部| 中文字幕国产一区| 国产欧美一区二区精品忘忧草| 一区二区三区在线影院| 国产一区二区h| 日韩一区二区免费电影| 亚洲欧美日韩在线| 成人毛片视频在线观看| 日韩一区二区免费高清| 亚洲不卡一区二区三区| 色综合久久中文综合久久牛| 中文字幕av一区 二区| 激情伊人五月天久久综合| 91精品一区二区三区在线观看| 樱花草国产18久久久久| 91美女片黄在线观看91美女| 国产精品私房写真福利视频| 国产永久精品大片wwwapp | 天使萌一区二区三区免费观看| 日韩伦理av电影| 成人小视频在线观看| 风间由美一区二区三区在线观看| 538在线一区二区精品国产| 一区二区三区在线视频播放| 成人黄色片在线观看| 国产精品久久久久aaaa樱花| 丁香网亚洲国际| 国产精品白丝在线| 91美女蜜桃在线| 一卡二卡欧美日韩| 欧美亚洲免费在线一区| 午夜精品福利一区二区蜜股av| 欧美伊人精品成人久久综合97| 亚洲国产一区二区在线播放| 欧美系列在线观看| 日本强好片久久久久久aaa| 欧美一区二区视频在线观看2022| 亚洲aⅴ怡春院| 欧美一级xxx| 国产一区二区三区免费在线观看| 国产在线麻豆精品观看| 亚洲欧洲制服丝袜| 丝袜美腿亚洲色图| 91精品久久久久久久91蜜桃| 免费三级欧美电影| 久久久久久日产精品| 成人免费av网站| 亚洲永久精品国产| 日韩精品中文字幕在线不卡尤物| 国内精品免费在线观看| 国产精品久久久久9999吃药| 欧美伊人久久久久久久久影院| 奇米在线7777在线精品| 欧美国产97人人爽人人喊| 一本一道波多野结衣一区二区| 亚洲激情成人在线| 日韩三级在线免费观看| 成人毛片在线观看| 日韩高清在线电影| 国产欧美一区二区三区在线看蜜臀 | 伊人一区二区三区| 欧美精品18+| 国产一区在线精品| 尤物av一区二区| 久久久久久麻豆| 欧美性生交片4| 国产精品99久久久久久似苏梦涵 | 日韩精品一区二区三区视频播放| 国产成人综合在线播放| 亚洲精品日韩一| www久久精品| 欧美午夜在线观看| 懂色av中文一区二区三区| 亚洲va韩国va欧美va| 久久久久免费观看| 欧美一区二区三区影视| 色综合久久99| 粉嫩13p一区二区三区| 亚洲人成小说网站色在线| 亚洲国产你懂的| 色欧美片视频在线观看在线视频| 亚洲成人午夜电影| 国产丝袜欧美中文另类| 欧美美女喷水视频| 色综合久久中文综合久久牛| 国产麻豆一精品一av一免费 | 天天综合日日夜夜精品| 日本一区二区三区视频视频| 欧美精品在线一区二区三区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 亚洲国产精品二十页| 欧美一区二区三区免费大片| 色综合天天做天天爱| 日韩一区二区免费电影| 韩国成人在线视频| 激情图片小说一区| 久久在线观看免费| 日韩欧美一区在线| 777亚洲妇女| 日本高清不卡aⅴ免费网站| 不卡一区二区三区四区| 国产精品自在在线| 国产一区福利在线| 久草精品在线观看| 麻豆精品视频在线观看| 日本欧美一区二区| 日韩有码一区二区三区| 天堂蜜桃91精品| 婷婷国产在线综合| 日韩不卡一二三区| 日产精品久久久久久久性色| 视频一区在线播放| 日韩高清在线不卡| 精品在线免费视频| 国产制服丝袜一区| 国产精品77777竹菊影视小说| 国产成人三级在线观看| 国产在线国偷精品产拍免费yy| 免费的成人av| 国产一区二区女| 菠萝蜜视频在线观看一区| www.欧美色图| 欧美亚洲精品一区| 日韩视频在线观看一区二区| 精品国产凹凸成av人网站| 久久久国产精品午夜一区ai换脸| 欧美激情综合在线| 亚洲精品视频免费观看| 五月婷婷色综合| 国产综合一区二区| 99久久免费视频.com| 在线视频观看一区| 91精品午夜视频| 中文字幕欧美国产| 午夜欧美2019年伦理| 狠狠久久亚洲欧美| 一本色道久久综合亚洲aⅴ蜜桃| 欧亚洲嫩模精品一区三区| 欧美一区2区视频在线观看| xfplay精品久久| 一区二区欧美国产| 精品在线一区二区三区| 91色九色蝌蚪| 日韩欧美国产电影| 国产精品久久久久久久岛一牛影视| 一二三区精品视频| 国产一区二区三区免费观看| 91国产免费观看| 久久久亚洲高清| 午夜国产精品影院在线观看| 国产毛片精品视频| 欧美日韩在线播放三区四区| 精品国产一区二区三区久久影院| 国产精品毛片无遮挡高清| 午夜精品久久久久久久久| 国产一区999| 欧美视频中文字幕| 国产精品五月天| 久久超碰97中文字幕| 色视频成人在线观看免| 久久人人爽爽爽人久久久| 亚洲成人一区二区在线观看| 岛国精品一区二区| 日韩精品专区在线| 亚洲电影第三页| 成人黄色国产精品网站大全在线免费观看| 欧美日韩五月天| 亚洲啪啪综合av一区二区三区| 精品一区二区三区香蕉蜜桃| 欧美日韩亚洲综合在线| 国产精品乱人伦一区二区| 久久av老司机精品网站导航| 欧美少妇性性性| 亚洲欧美电影一区二区| 国产河南妇女毛片精品久久久 | 国产精品白丝在线| 国产麻豆91精品| 欧美一区二区三区在| 亚洲一区二区三区四区在线免费观看 | 欧美日韩国产一级| 亚洲欧美激情在线| 97久久精品人人做人人爽| 国产欧美精品国产国产专区| 精品夜夜嗨av一区二区三区| 欧美疯狂做受xxxx富婆| 亚洲永久精品大片| 在线观看一区二区视频| 中文字幕人成不卡一区| 成人精品国产福利| 亚洲国产成人在线| 国产不卡一区视频| 国产精品网站在线| a在线欧美一区| 亚洲免费成人av| 日本精品一级二级| 亚洲一区二区三区免费视频|