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

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

?? can_fifo.v

?? USB_I2C_MAC_FPGA_Code.rar
?? V
字號:

// synopsys translate_off
`include "timescale.v"
// synopsys translate_on
`include "can_defines.v"

module can_fifo
( 
  clk,
  rst,

  wr,

  data_in,
  addr,
  data_out,
  fifo_selected,

  reset_mode,
  release_buffer,
  extended_mode,
  overrun,
  info_empty,
  info_cnt

);

parameter Tp = 1;

input         clk;
input         rst;
input         wr;
input   [7:0] data_in;
input   [7:0] addr;
input         reset_mode;
input         release_buffer;
input         extended_mode;
input         fifo_selected;

output  [7:0] data_out;
output        overrun;
output        info_empty;
output  [6:0] info_cnt;

`ifdef ACTEL_APA_RAM
`else
`ifdef XILINX_RAM
`else
  reg     [7:0] fifo [0:63];
  reg     [3:0] length_fifo[0:63];
  reg           overrun_info[0:63];
`endif
`endif

reg     [5:0] rd_pointer;
reg     [5:0] wr_pointer;
reg     [5:0] read_address;
reg     [5:0] wr_info_pointer;
reg     [5:0] rd_info_pointer;
reg           wr_q;
reg     [3:0] len_cnt;
reg     [6:0] fifo_cnt;
reg     [6:0] info_cnt;
reg           latch_overrun;

wire    [3:0] length_info;
wire          write_length_info;
wire          fifo_empty;
wire          fifo_full;
wire          info_full;

assign write_length_info = (~wr) & wr_q;

// Delayed write signal
always @ (posedge clk or posedge rst)
begin
  if (rst)
    wr_q <= 0;
  else if (reset_mode)
    wr_q <=#Tp 0;
  else
    wr_q <=#Tp wr;
end


// length counter
always @ (posedge clk or posedge rst)
begin
  if (rst)
    len_cnt <= 0;
  else if (reset_mode | write_length_info)
    len_cnt <=#Tp 1'b0;
  else if (wr & (~fifo_full))
    len_cnt <=#Tp len_cnt + 1'b1;
end


// wr_info_pointer
always @ (posedge clk or posedge rst)
begin
  if (rst)
    wr_info_pointer <= 0;
  else if (reset_mode)
    wr_info_pointer <=#Tp 0;
  else if (write_length_info & (~info_full))
    wr_info_pointer <=#Tp wr_info_pointer + 1'b1;
end



// rd_info_pointer
always @ (posedge clk or posedge rst)
begin
  if (rst)
    rd_info_pointer <= 0;
  else if (reset_mode)
    rd_info_pointer <=#Tp 0;
  else if (release_buffer & (~fifo_empty))
    rd_info_pointer <=#Tp rd_info_pointer + 1'b1;
end


// rd_pointer
always @ (posedge clk or posedge rst)
begin
  if (rst)
    rd_pointer <= 0;
  else if (release_buffer & (~fifo_empty))
    rd_pointer <=#Tp rd_pointer + length_info;
  else if (reset_mode)
    rd_pointer <=#Tp 0;
end


// wr_pointer
always @ (posedge clk or posedge rst)
begin
  if (rst)
    wr_pointer <= 0;
  else if (wr & (~fifo_full))
    wr_pointer <=#Tp wr_pointer + 1'b1;
  else if (reset_mode)
    wr_pointer <=#Tp 0;
end


// latch_overrun
always @ (posedge clk or posedge rst)
begin
  if (rst)
    latch_overrun <= 0;
  else if (reset_mode | write_length_info)
    latch_overrun <=#Tp 0;
  else if (wr & fifo_full)
    latch_overrun <=#Tp 1'b1;
end


// Counting data in fifo
always @ (posedge clk or posedge rst)
begin
  if (rst)
    fifo_cnt <= 0;
  else if (wr & (~release_buffer) & (~fifo_full))
    fifo_cnt <=#Tp fifo_cnt + 1'b1;
  else if ((~wr) & release_buffer & (~fifo_empty))
    fifo_cnt <=#Tp fifo_cnt - length_info;
  else if (wr & release_buffer & (~fifo_full) & (~fifo_empty))
    fifo_cnt <=#Tp fifo_cnt - length_info + 1'b1;
  else if (reset_mode)
    fifo_cnt <=#Tp 0;
end

assign fifo_full = fifo_cnt == 64;
assign fifo_empty = fifo_cnt == 0;


// Counting data in length_fifo and overrun_info fifo
always @ (posedge clk or posedge rst)
begin
  if (rst)
    info_cnt <= 0;
  else if (write_length_info ^ release_buffer)
    begin
      if (release_buffer & (~info_empty))
        info_cnt <=#Tp info_cnt - 1'b1;
      else if (write_length_info & (~info_full))
        info_cnt <=#Tp info_cnt + 1'b1;
    end
end
        
assign info_full = info_cnt == 64;
assign info_empty = info_cnt == 0;


// Selecting which address will be used for reading data from rx fifo
always @ (extended_mode or rd_pointer or addr)
begin
  if (extended_mode)      // extended mode
    begin
      read_address <= rd_pointer + (addr - 8'd16);
    end
  else                    // normal mode
    begin
      read_address <= rd_pointer + (addr - 8'd20);
    end
end



`ifdef ACTEL_APA_RAM
  actel_ram_64x8_sync fifo
  (
    .DO      (data_out),
    .RCLOCK  (clk),
    .WCLOCK  (clk),
    .DI      (data_in),
    .PO      (),                       // parity not used
    .WRB     (~(wr & (~fifo_full))),
    .RDB     (~fifo_selected),
    .WADDR   (wr_pointer),
    .RADDR   (read_address)
  );


  actel_ram_64x4_sync info_fifo
  (
    .DO      (length_info),
    .RCLOCK  (clk),
    .WCLOCK  (clk),
    .DI      (len_cnt),
    .PO      (),                       // parity not used
    .WRB     (~(write_length_info & (~info_full))),
    .RDB     (1'b0),                   // always enabled
    .WADDR   (wr_info_pointer),
    .RADDR   (rd_info_pointer)
  );


  actel_ram_64x1_sync overrun_fifo
  (
    .DO      (overrun),
    .RCLOCK  (clk),
    .WCLOCK  (clk),
    .DI      (latch_overrun | (wr & fifo_full)),
    .PO      (),                       // parity not used
    .WRB     (~(write_length_info & (~info_full))),
    .RDB     (1'b0),                   // always enabled
    .WADDR   (wr_info_pointer),
    .RADDR   (rd_info_pointer)
  );
`else
`ifdef XILINX_RAM

/*
  ram_64x8_sync fifo
  (
    .addra(wr_pointer),
    .addrb(read_address),
    .clka(clk),
    .clkb(clk),
    .dina(data_in),
    .doutb(data_out),
    .wea(wr & (~fifo_full))
  );
*/

  RAMB4_S8_S8 fifo
  (
    .DOA(),
    .DOB(data_out),
    .ADDRA({3'h0, wr_pointer}),
    .CLKA(clk),
    .DIA(data_in),
    .ENA(1'b1),
    .RSTA(1'b0),
    .WEA(wr & (~fifo_full)),
    .ADDRB({3'h0, read_address}),
    .CLKB(clk),
    .DIB(8'h0),
    .ENB(1'b1),
    .RSTB(1'b0),
    .WEB(1'b0)
  );



/*
  ram_64x4_sync info_fifo
  (
    .addra(wr_info_pointer),
    .addrb(rd_info_pointer),
    .clka(clk),
    .clkb(clk),
    .dina(len_cnt),
    .doutb(length_info),
    .wea(write_length_info & (~info_full))
  );
*/
  RAMB4_S4_S4 info_fifo
  (
    .DOA(),
    .DOB(length_info),
    .ADDRA({4'h0, wr_info_pointer}),
    .CLKA(clk),
    .DIA(len_cnt),
    .ENA(1'b1),
    .RSTA(1'b0),
    .WEA(write_length_info & (~info_full)),
    .ADDRB({4'h0, rd_info_pointer}),
    .CLKB(clk),
    .DIB(4'h0),
    .ENB(1'b1),
    .RSTB(1'b0),
    .WEB(1'b0)
  );

/*
  ram_64x1_sync overrun_fifo
  (
    .addra(wr_info_pointer),
    .addrb(rd_info_pointer),
    .clka(clk),
    .clkb(clk),
    .dina(latch_overrun | (wr & fifo_full)),
    .doutb(overrun),
    .wea(write_length_info & (~info_full))
  );
*/


  RAMB4_S1_S1 overrun_fifo
  (
    .DOA(),
    .DOB(overrun),
    .ADDRA({6'h0, wr_info_pointer}),
    .CLKA(clk),
    .DIA(latch_overrun | (wr & fifo_full)),
    .ENA(1'b1),
    .RSTA(1'b0),
    .WEA(write_length_info & (~info_full)),
    .ADDRB({6'h0, rd_info_pointer}),
    .CLKB(clk),
    .DIB(1'h0),
    .ENB(1'b1),
    .RSTB(1'b0),
    .WEB(1'b0)
  );




`else
  // writing data to fifo
  always @ (posedge clk)
  begin
    if (wr & (~fifo_full))
      fifo[wr_pointer] <=#Tp data_in;
  end

  // reading from fifo
  assign data_out = fifo[read_address];


  // writing length_fifo
  always @ (posedge clk)
  begin
    if (write_length_info & (~info_full))
      length_fifo[wr_info_pointer] <=#Tp len_cnt;
  end

  // reading length_fifo
  assign length_info = length_fifo[rd_info_pointer];

  // overrun_info
  always @ (posedge clk)
  begin
    if (write_length_info & (~info_full))
      overrun_info[wr_info_pointer] <=#Tp latch_overrun | (wr & fifo_full);
  end
  
  
  // reading overrun
  assign overrun = overrun_info[rd_info_pointer];


`endif
`endif





endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品卡一卡二| 亚洲国产精品一区二区www在线 | 久久99久久精品| 欧美日韩精品三区| 精品va天堂亚洲国产| 玉足女爽爽91| 国产福利91精品一区| 在线不卡免费av| 亚洲免费av网站| 国产精品亚洲第一区在线暖暖韩国| 91丝袜国产在线播放| 精品国产乱码久久久久久牛牛 | 国产成人精品综合在线观看 | 成人国产精品视频| 欧美一级艳片视频免费观看| 亚洲日本青草视频在线怡红院| 久久99精品视频| 91精品啪在线观看国产60岁| 亚洲激情中文1区| 成人18视频日本| 国产日韩成人精品| 国模套图日韩精品一区二区| 日韩欧美中文字幕公布| 青椒成人免费视频| 在线看不卡av| 一区二区三区精密机械公司| 91丝袜呻吟高潮美腿白嫩在线观看| 久久精品亚洲一区二区三区浴池| 免费欧美在线视频| 欧美一区二区三区视频在线 | 色婷婷综合激情| 中文字幕日韩一区| voyeur盗摄精品| 国产精品对白交换视频| 成人动漫中文字幕| 国产精品国产三级国产aⅴ入口| 丁香激情综合五月| 中文字幕乱码日本亚洲一区二区| 国产精品77777| 欧美国产日韩在线观看| 成人涩涩免费视频| 亚洲视频图片小说| 在线视频国内自拍亚洲视频| 亚洲一区二区免费视频| 欧美日韩国产免费| 免费一区二区视频| 欧美一区二区三区视频在线| 久久超级碰视频| 国产日产欧产精品推荐色| 国产成人高清在线| 1区2区3区精品视频| 欧美视频日韩视频| 日本不卡免费在线视频| 精品欧美一区二区久久| 国产成人亚洲精品青草天美| 亚洲视频在线一区二区| 精品视频在线免费观看| 日韩av午夜在线观看| 久久久另类综合| 99久久综合国产精品| 午夜精品久久久久影视| 亚洲精品一区二区三区在线观看| 国产91精品一区二区麻豆亚洲| 中文字幕av一区二区三区免费看| 暴力调教一区二区三区| 亚洲香肠在线观看| 日韩精品一区二| gogogo免费视频观看亚洲一| 偷拍日韩校园综合在线| 亚洲成人免费视| 日韩美女在线视频 | 91麻豆自制传媒国产之光| 亚洲成av人片一区二区梦乃| www久久精品| 欧美性生活久久| 国产麻豆视频精品| 亚洲18影院在线观看| 国产日韩精品一区二区三区 | 成人午夜电影小说| 五月天亚洲婷婷| 国产精品视频免费看| 91精品国产乱码| 色乱码一区二区三区88| 国产一区二区三区精品视频| 午夜精品一区在线观看| 日韩理论片在线| 久久久亚洲精华液精华液精华液| 欧美日韩极品在线观看一区| jvid福利写真一区二区三区| 美女mm1313爽爽久久久蜜臀| 一区二区三区免费网站| 国产精品乱码久久久久久| 欧美电影免费观看高清完整版在线观看| 99re8在线精品视频免费播放| 精品亚洲成a人| 日本不卡的三区四区五区| 亚洲一区二区欧美| 亚洲人成亚洲人成在线观看图片| 久久人人爽爽爽人久久久| 欧美精品自拍偷拍动漫精品| 色8久久精品久久久久久蜜| 成人国产一区二区三区精品| 韩国欧美国产1区| 久热成人在线视频| 免费看精品久久片| 天天影视涩香欲综合网 | 国产午夜精品理论片a级大结局| 欧美精品黑人性xxxx| 欧美在线三级电影| 91丨porny丨中文| 91在线视频观看| 99久久99久久精品免费看蜜桃| 国产精品中文有码| 狠狠色狠狠色综合系列| 韩日av一区二区| 韩国v欧美v日本v亚洲v| 激情国产一区二区| 激情成人综合网| 国产久卡久卡久卡久卡视频精品| 理论片日本一区| 久草精品在线观看| 久久超碰97中文字幕| 国产在线播放一区| 国产91丝袜在线观看| av综合在线播放| 色老汉一区二区三区| 久久久久97国产精华液好用吗| 2欧美一区二区三区在线观看视频| 精品久久久久久亚洲综合网 | 国产日韩欧美a| 国产精品久久久久久久久免费相片| 国产欧美一区二区精品性色超碰 | 国产suv精品一区二区883| 成人午夜激情视频| 欧美探花视频资源| 欧美一区二区三级| 久久免费精品国产久精品久久久久| 国产亚洲制服色| 一区二区三区自拍| 日韩av中文在线观看| 国产精品1区2区3区| 91在线免费播放| 欧美精品1区2区3区| 精品剧情在线观看| 国产亚洲欧洲997久久综合| 亚洲欧美一区二区视频| 肉色丝袜一区二区| 国产一区二区三区蝌蚪| 在线视频观看一区| 日韩欧美国产午夜精品| 中文字幕一区二区日韩精品绯色| 亚洲va欧美va人人爽午夜| 国产麻豆视频一区| 在线这里只有精品| 2021中文字幕一区亚洲| 一区二区三区成人| 国产原创一区二区三区| 欧美亚洲高清一区二区三区不卡| 精品理论电影在线观看| 亚洲自拍偷拍麻豆| 久久se精品一区二区| 91成人网在线| 久久久精品欧美丰满| 香蕉成人啪国产精品视频综合网| 国产寡妇亲子伦一区二区| 在线视频一区二区三区| 国产欧美精品一区| 欧美aa在线视频| 在线欧美日韩国产| 欧美激情在线观看视频免费| 五月综合激情婷婷六月色窝| www.日本不卡| 国产日产精品1区| 在线观看视频一区二区欧美日韩| 精品剧情v国产在线观看在线| 亚洲综合色成人| 成人免费高清视频在线观看| 欧美成人艳星乳罩| 天堂成人国产精品一区| 色国产精品一区在线观看| 国产三级精品三级在线专区| 美女视频黄a大片欧美| 欧美亚洲禁片免费| 亚洲天堂成人在线观看| 风间由美性色一区二区三区| 26uuu亚洲综合色欧美| 另类小说一区二区三区| 3751色影院一区二区三区| 亚洲一二三四区不卡| 一本到高清视频免费精品| 日本一区二区在线不卡| 国产一区二三区| 欧美精品一区二区三区久久久| 日韩不卡免费视频| 欧美人伦禁忌dvd放荡欲情| 亚洲午夜电影在线观看| 欧美亚洲国产一区在线观看网站| 亚洲精品成人在线| 欧美日韩亚洲综合一区| 亚洲国产精品久久久久秋霞影院 |