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

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

?? wb_slave_behavioral.v

?? 使用方法: 以太網編程,拷貝到硬盤
?? V
字號:


`include "timescale.v"
`include "wb_model_defines.v"
module WB_SLAVE_BEHAVIORAL
(
	CLK_I,
	RST_I,
	ACK_O,
	ADR_I,
	CYC_I,
	DAT_O,
	DAT_I,
	ERR_O,
	RTY_O,
	SEL_I,
	STB_I,
	WE_I,
	CAB_I
);

/*------------------------------------------------------------------------------------------------------
WISHBONE signals
------------------------------------------------------------------------------------------------------*/
input                   CLK_I;
input                   RST_I;
output                  ACK_O;
input   `WB_ADDR_TYPE   ADR_I;
input                   CYC_I;
output  `WB_DATA_TYPE   DAT_O;
input   `WB_DATA_TYPE   DAT_I;
output                  ERR_O;
output                  RTY_O;
input   `WB_SEL_TYPE    SEL_I;
input                   STB_I;
input                   WE_I;
input                   CAB_I;

reg     `WB_DATA_TYPE   DAT_O;

/*------------------------------------------------------------------------------------------------------
Asynchronous dual-port RAM signals for storing and fetching the data
------------------------------------------------------------------------------------------------------*/
//reg     `WB_DATA_TYPE wb_memory [0:16777215]; // WB memory - 24 addresses connected - 2 LSB not used
reg     `WB_DATA_TYPE wb_memory [0:1048575]; // WB memory - 20 addresses connected - 2 LSB not used
reg     `WB_DATA_TYPE mem_wr_data_out;
reg     `WB_DATA_TYPE mem_rd_data_in;

/*------------------------------------------------------------------------------------------------------
Maximum values for WAIT and RETRY counters and which response !!!
------------------------------------------------------------------------------------------------------*/
reg     [2:0]  a_e_r_resp; // tells with which cycle_termination_signal must wb_slave respond !
reg     [3:0]  wait_cyc;
reg     [7:0]  max_retry;

// assign registers to default state while in reset
always@(RST_I)
begin
  if (RST_I)
  begin
    a_e_r_resp <= 3'b000; // do not respond
    wait_cyc   <= 4'b0; // no wait cycles
    max_retry  <= 8'h0; // no retries
  end
end //reset

task cycle_response;
  input [2:0]  ack_err_rty_resp; // acknowledge, error or retry response input flags
  input [3:0]  wait_cycles; // if wait cycles before each data termination cycle (ack, err or rty)
  input [7:0]  retry_cycles; // noumber of retry cycles before acknowledge cycle
begin
  // assign values
  a_e_r_resp <= #1 ack_err_rty_resp;
  wait_cyc   <= #1 wait_cycles;
  max_retry  <= #1 retry_cycles;
end
endtask // cycle_response

/*------------------------------------------------------------------------------------------------------
Tasks for writing and reading to and from memory !!!
------------------------------------------------------------------------------------------------------*/
reg    `WB_ADDR_TYPE task_wr_adr_i;
reg    `WB_ADDR_TYPE task_rd_adr_i;
reg    `WB_DATA_TYPE task_dat_i;
reg    `WB_DATA_TYPE task_dat_o;
reg    `WB_SEL_TYPE  task_sel_i;
reg                  task_wr_data;
reg                  task_data_written;
reg    `WB_DATA_TYPE task_mem_wr_data;

// write to memory
task wr_mem;
  input  `WB_ADDR_TYPE adr_i;
  input  `WB_DATA_TYPE dat_i;
  input  `WB_SEL_TYPE  sel_i;
begin
  task_data_written = 0;
  task_wr_adr_i = adr_i;
  task_dat_i = dat_i;
  task_sel_i = sel_i;
  task_wr_data = 1;
  wait(task_data_written);
  task_wr_data = 0;
end
endtask

// read from memory
task rd_mem;
  input  `WB_ADDR_TYPE adr_i;
  output `WB_DATA_TYPE dat_o;
  input  `WB_SEL_TYPE  sel_i;
begin
  task_rd_adr_i = adr_i;
  task_sel_i = sel_i;
  #1;
  dat_o = task_dat_o;
end
endtask

/*------------------------------------------------------------------------------------------------------
Internal signals and logic
------------------------------------------------------------------------------------------------------*/
reg            calc_ack;
reg            calc_err;
reg            calc_rty;

reg     [7:0]  retry_cnt;
reg     [7:0]  retry_num;
reg            retry_expired;

// Retry counter
always@(posedge RST_I or posedge CLK_I)
begin
  if (RST_I)
    retry_cnt <= #1 8'h00;
  else
  begin
    if (calc_ack || calc_err)
      retry_cnt <= #1 8'h00;
    else if (calc_rty)
      retry_cnt <= #1 retry_num;
  end
end

always@(retry_cnt or max_retry)
begin
  if (retry_cnt < max_retry)
  begin
    retry_num = retry_cnt + 1'b1;
    retry_expired = 1'b0;
  end
  else
  begin
    retry_num = retry_cnt;
    retry_expired = 1'b1;
  end
end

reg     [3:0]  wait_cnt;
reg     [3:0]  wait_num;
reg            wait_expired;

// Wait counter
always@(posedge RST_I or posedge CLK_I)
begin
  if (RST_I)
    wait_cnt <= #1 4'h0;
  else
  begin
    if (wait_expired || ~STB_I)
      wait_cnt <= #1 4'h0;
    else
      wait_cnt <= #1 wait_num;
  end
end

always@(wait_cnt or wait_cyc or STB_I or a_e_r_resp or retry_expired)
begin
  if ((wait_cyc > 0) && (STB_I))
  begin
    if (wait_cnt < wait_cyc) // 4'h2)
    begin
      wait_num = wait_cnt + 1'b1;
      wait_expired = 1'b0;
      calc_ack = 1'b0;
      calc_err = 1'b0;
      calc_rty = 1'b0;
    end
    else
    begin
      wait_num = wait_cnt;
      wait_expired = 1'b1;
      if (a_e_r_resp == 3'b100)
      begin
        calc_ack = 1'b1;
        calc_err = 1'b0;
        calc_rty = 1'b0;
      end
      else
      if (a_e_r_resp == 3'b010)
      begin
        calc_ack = 1'b0;
        calc_err = 1'b1;
        calc_rty = 1'b0;
      end
      else
      if (a_e_r_resp == 3'b001)
      begin
        calc_err = 1'b0;
        if (retry_expired)
        begin
          calc_ack = 1'b1;
          calc_rty = 1'b0;
        end
        else
        begin
          calc_ack = 1'b0;
          calc_rty = 1'b1;
        end
      end
      else
      begin
        calc_ack = 1'b0;
        calc_err = 1'b0;
        calc_rty = 1'b0;
      end
    end
  end
  else
  if ((wait_cyc == 0) && (STB_I))
  begin
    wait_num = 2'h0;
    wait_expired = 1'b1;
    if (a_e_r_resp == 3'b100)
    begin
      calc_ack = 1'b1;
      calc_err = 1'b0;
      calc_rty = 1'b0;
    end
    else if (a_e_r_resp == 3'b010)
    begin
      calc_ack = 1'b0;
      calc_err = 1'b1;
      calc_rty = 1'b0;
    end
    else if (a_e_r_resp == 3'b001)
    begin
      calc_err = 1'b0;
      if (retry_expired)
      begin
        calc_ack = 1'b1;
        calc_rty = 1'b0;
      end
      else
      begin
        calc_ack = 1'b0;
        calc_rty = 1'b1;
      end
    end
    else
    begin
      calc_ack = 1'b0;
      calc_err = 1'b0;
      calc_rty = 1'b0;
    end
  end
  else
  begin
    wait_num = 2'h0;
    wait_expired = 1'b0;
    calc_ack = 1'b0;
    calc_err = 1'b0;
    calc_rty = 1'b0;
  end
end

wire rd_sel = (CYC_I && STB_I && ~WE_I);
wire wr_sel = (CYC_I && STB_I && WE_I);

// Generate cycle termination signals
assign ACK_O = calc_ack && STB_I;
assign ERR_O = calc_err && STB_I;
assign RTY_O = calc_rty && STB_I;

// Assign address to asynchronous memory
always@(RST_I or ADR_I)
begin
  if (RST_I) // this is added because at start of test bench we need address change in order to get data!
  begin
    #1 mem_rd_data_in = `WB_DATA_WIDTH'hxxxx_xxxx;
  end
  else
  begin
//    #1 mem_rd_data_in = wb_memory[ADR_I[25:2]];
    #1 mem_rd_data_in = wb_memory[ADR_I[21:2]];
  end
end

// Data input/output interface
always@(rd_sel or mem_rd_data_in or RST_I)
begin
  if (RST_I)
    DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx;	// assign outputs to unknown state while in reset
  else if (rd_sel)
    DAT_O <=#1 mem_rd_data_in;
  else
    DAT_O <=#1 `WB_DATA_WIDTH'hxxxx_xxxx;
end


always@(RST_I or task_rd_adr_i)
begin
  if (RST_I)
    task_dat_o = `WB_DATA_WIDTH'hxxxx_xxxx;
  else
    task_dat_o = wb_memory[task_rd_adr_i[21:2]];
end
always@(CLK_I or wr_sel or task_wr_data or ADR_I or task_wr_adr_i or 
        mem_wr_data_out or DAT_I or task_mem_wr_data or task_dat_i or
        SEL_I or task_sel_i)
begin
  if (task_wr_data)
  begin
    task_mem_wr_data = wb_memory[task_wr_adr_i[21:2]];

    if (task_sel_i[3])
      task_mem_wr_data[31:24] = task_dat_i[31:24];
    if (task_sel_i[2])
      task_mem_wr_data[23:16] = task_dat_i[23:16];
    if (task_sel_i[1])
      task_mem_wr_data[15: 8] = task_dat_i[15: 8];
    if (task_sel_i[0])
      task_mem_wr_data[ 7: 0] = task_dat_i[ 7: 0];

    wb_memory[task_wr_adr_i[21:2]] = task_mem_wr_data; // write data
    task_data_written = 1;
  end
  else if (wr_sel && CLK_I)
  begin
//    mem_wr_data_out = wb_memory[ADR_I[25:2]]; // if no SEL_I is active, old value will be written
    mem_wr_data_out = wb_memory[ADR_I[21:2]]; // if no SEL_I is active, old value will be written

    if (SEL_I[3])
      mem_wr_data_out[31:24] = DAT_I[31:24];
    if (SEL_I[2])
      mem_wr_data_out[23:16] = DAT_I[23:16];
    if (SEL_I[1])
      mem_wr_data_out[15: 8] = DAT_I[15: 8];
    if (SEL_I[0])
      mem_wr_data_out[ 7: 0] = DAT_I[ 7: 0];

//    wb_memory[ADR_I[25:2]]  <= mem_wr_data_out; // write data
    wb_memory[ADR_I[21:2]]      = mem_wr_data_out; // write data
  end
end

endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲小说春色综合另类电影| 毛片基地黄久久久久久天堂| 日韩一级黄色大片| 高清不卡一区二区在线| 丝袜亚洲另类欧美| 国产精品美女久久久久aⅴ | 日韩欧美精品在线| 99精品久久只有精品| 国产综合色在线| 亚洲第四色夜色| 亚洲欧美日韩国产手机在线| 久久免费美女视频| 91精品国产一区二区三区蜜臀| 91美女片黄在线观看91美女| 日韩精品一级中文字幕精品视频免费观看| 日韩一区二区麻豆国产| 91国偷自产一区二区三区观看| 国产精品资源在线| 麻豆精品视频在线观看免费| 亚洲一区二区偷拍精品| 国产精品不卡视频| 欧美经典一区二区| 91美女在线视频| 99久久伊人精品| 国产v综合v亚洲欧| 国产精品香蕉一区二区三区| 精品亚洲成a人在线观看| 天天综合网天天综合色| 一区二区三区国产豹纹内裤在线| 国产精品久久久久久久久免费桃花 | 欧美伦理视频网站| 一本久道中文字幕精品亚洲嫩| 久久99精品久久只有精品| 午夜精品久久久久久久99水蜜桃 | 综合欧美亚洲日本| 国产精品卡一卡二| 国产精品伦一区| 欧美国产一区二区| 国产精品色一区二区三区| 久久精品男人的天堂| 久久久99精品免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩美女主播在线视频一区二区三区| 91精品国产综合久久小美女| 宅男噜噜噜66一区二区66| 在线播放视频一区| 欧美久久久一区| 日韩一级二级三级| 欧美成人aa大片| 久久久久久久电影| 国产精品私人影院| 成人欧美一区二区三区| 日韩码欧中文字| 亚洲一区二区三区影院| 亚洲国产精品一区二区www| 亚洲国产欧美日韩另类综合| 亚洲成人av在线电影| 日韩影院在线观看| 激情小说亚洲一区| 丁香激情综合五月| 色综合一个色综合| 91精品国产综合久久精品| 日韩欧美一区二区在线视频| 久久精品网站免费观看| 国产精品丝袜在线| 亚洲国产美国国产综合一区二区 | 91蜜桃视频在线| 欧美日韩免费电影| 精品国产伦一区二区三区观看方式 | 成人毛片在线观看| 成人国产精品免费网站| 欧美亚洲国产一区二区三区va | 国产欧美精品一区aⅴ影院| 亚洲三级电影网站| 日韩精品一级中文字幕精品视频免费观看| 国内精品久久久久影院薰衣草| 成人精品电影在线观看| 欧美日韩中文字幕一区| 久久亚洲一区二区三区明星换脸| 综合分类小说区另类春色亚洲小说欧美 | 日韩电影在线观看电影| 国产一区亚洲一区| 在线观看一区日韩| 欧美一区二区三区成人| 国产精品私人自拍| 麻豆精品一区二区三区| 91在线高清观看| 欧美成人伊人久久综合网| 成人免费在线视频| 老色鬼精品视频在线观看播放| 不卡的av中国片| 精品三级av在线| 亚洲主播在线观看| 成人免费视频播放| 欧美一级久久久| 亚洲精品美国一| 国产精品一区二区果冻传媒| 精品视频一区三区九区| 国产精品国产三级国产普通话蜜臀 | 在线免费观看一区| 久久免费视频一区| 日韩av在线播放中文字幕| 大白屁股一区二区视频| 日韩精品在线一区二区| 亚洲图片欧美一区| 99在线精品一区二区三区| 欧美电影免费观看高清完整版| 亚洲欧美日韩一区二区三区在线观看| 国产一区二区精品在线观看| 91精品免费在线观看| 亚洲黄色性网站| 成人app网站| 26uuu亚洲综合色欧美| 日韩av在线发布| 欧美日韩免费一区二区三区| 亚洲免费资源在线播放| 大胆亚洲人体视频| 国产亚洲精品7777| 国内一区二区视频| 欧美一级日韩一级| 五月婷婷另类国产| 欧美视频一区二区三区四区| 一区二区久久久| 91久久精品一区二区三| 亚洲视频在线观看一区| 高清国产一区二区三区| 久久精品日产第一区二区三区高清版 | 国产91精品欧美| 欧美精品一区二区三| 日本人妖一区二区| 91精品国产综合久久精品图片| 午夜精品福利视频网站| 欧美日韩精品一区二区三区蜜桃| 一区二区三区四区视频精品免费| 色婷婷激情一区二区三区| 亚洲精品中文在线观看| 色婷婷一区二区| 亚洲国产精品人人做人人爽| 欧美三级乱人伦电影| 日韩在线一区二区三区| 欧美久久久久久蜜桃| 日韩高清一区在线| 欧美一区二区三区在线观看视频| 裸体在线国模精品偷拍| 精品国产乱码久久久久久蜜臀| 久久99国产乱子伦精品免费| 欧美精品一区二区三区久久久 | 毛片不卡一区二区| 日韩一区二区高清| 国产一区二三区好的| 欧美激情综合五月色丁香| 成人一区二区三区在线观看| 中文字幕一区二区不卡| 91黄色激情网站| 日日夜夜精品免费视频| 日韩精品中文字幕在线不卡尤物| 国产乱子伦视频一区二区三区| 国产欧美一二三区| 色综合久久综合网| 日韩激情一二三区| 久久久亚洲精品石原莉奈| youjizz久久| 午夜精品久久久久久久99樱桃| 日韩精品一区二区三区老鸭窝| 国产成人在线观看免费网站| 亚洲免费大片在线观看| 6080yy午夜一二三区久久| 国产一区二区三区四区在线观看| 中文字幕一区二区三中文字幕| 欧美在线你懂得| 精品午夜久久福利影院| 国产精品色眯眯| 欧美年轻男男videosbes| 国产精品2024| 香蕉影视欧美成人| 久久久久久黄色| 欧美色图激情小说| 国产在线精品视频| 亚洲一级二级三级在线免费观看| 亚洲精品在线观| 欧美天天综合网| 成人午夜av电影| 奇米一区二区三区| 成人欧美一区二区三区| 欧美xxxxxxxx| 欧美在线色视频| 成人午夜视频福利| 日av在线不卡| 亚洲愉拍自拍另类高清精品| 久久久久久**毛片大全| 欧美人伦禁忌dvd放荡欲情| 成人小视频在线观看| 日本 国产 欧美色综合| 怡红院av一区二区三区| 亚洲精品一区二区三区福利 | 国产一区二区女| 婷婷开心久久网| 亚洲人精品午夜| 久久久久国色av免费看影院| 欧美一区二区精品|