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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lcd_dual_port_fifo.v

?? Altera的基于NIOS II的LCD控制器源代碼
?? V
字號:
// ================================================================================
// (c) 2004 Altera Corporation. All rights reserved.
// Altera products are protected under numerous U.S. and foreign patents, maskwork
// rights, copyrights and other intellectual property laws.
// 
// This reference design file, and your use thereof, is subject to and governed
// by the terms and conditions of the applicable Altera Reference Design License
// Agreement (either as signed by you, agreed by you upon download or as a
// "click-through" agreement upon installation andor found at www.altera.com).
// By using this reference design file, you indicate your acceptance of such terms
// and conditions between you and Altera Corporation.  In the event that you do
// not agree with such terms and conditions, you may not use the reference design
// file and please promptly destroy any copies you have made.
// 
// This reference design file is being provided on an "as-is" basis and as an
// accommodation and therefore all warranties, representations or guarantees of
// any kind (whether express, implied or statutory) including, without limitation,
// warranties of merchantability, non-infringement, or fitness for a particular
// purpose, are specifically disclaimed.  By making this reference design file
// available, Altera expressly does not recommend, suggest or require that this
// reference design file be used in combination with any other product not
// provided by Altera.
// ================================================================================
// ================================================================================
// This module uses altsyncram to implement a (possibly) asynchronous FIFO with.
// ================================================================================
`timescale 1ns/1ns

module lcd_dual_port_fifo
  (
   rst_n,
   
   // Write side
   clk_wr,
   wr,			// write strobe
   wdata,
   
   wr_almost_full,
   wr_full,

   reset_fifo_rd,
   
   // Read side
   clk_rd,
   rd_en,
   
   rdata,
   rd_empty,
   rd_available,

   full_error,
   empty_error
   );                

  // defaults
  parameter DEVICE = "Cyclone";
  
  parameter WR_PTR_WIDTH = 7;
  parameter RD_PTR_WIDTH = 8;
  parameter WR_DATA_WIDTH = 32;
  parameter RD_DATA_WIDTH = 16;
  parameter WR_DEPTH = 128;
  parameter RD_DEPTH = 256;
  parameter WRITE_ALMOST_BIT = 4;
  parameter DIFF_RD_WR = 1;

  input         rst_n;
  
  // Write side
  input         clk_wr;
  input         wr;
  input [WR_DATA_WIDTH-1:0]  wdata;
  
  output 		   wr_almost_full;
  output 		   wr_full;

  input 		   reset_fifo_rd;

  // Read side
  input         clk_rd;
  input 	rd_en;
  
  output [RD_DATA_WIDTH-1:0] rdata;
  output 		  rd_empty;
  output [RD_PTR_WIDTH-1:0]  rd_available;

  output 		  full_error;
  output 		  empty_error;

  // pointers on write side
  wire [WR_PTR_WIDTH-1:0] wr_ptr;
  wire [WR_PTR_WIDTH-1:0] nxt_wr_ptr;
  wire [WR_PTR_WIDTH-1:0] binary_wr_ptr;
  reg [RD_PTR_WIDTH-1:0] rd_ptr_s;
  wire [RD_PTR_WIDTH-1:0] synch_rd_ptr;
  reg [RD_PTR_WIDTH-1:0] binary_synch_rd_ptr;

  // pointers on read side  
  wire [RD_PTR_WIDTH-1:0] rd_ptr;
  wire [RD_PTR_WIDTH-1:0] nxt_rd_ptr;
  wire [RD_PTR_WIDTH-1:0] binary_rd_ptr;
  reg [WR_PTR_WIDTH-1:0] wr_ptr_s;
  wire [WR_PTR_WIDTH-1:0] synch_wr_ptr;
  reg [WR_PTR_WIDTH-1:0] binary_synch_wr_ptr;
  
  wire [RD_DATA_WIDTH-1:0] rdata;

  reg 			reset_fifo_wr;
  reg 			reset_fifo_rd_sync;
  always @(posedge clk_wr or negedge rst_n)
    if (~rst_n)
    begin
      reset_fifo_rd_sync <= 1'b0;
      reset_fifo_wr <= 1'b0;
    end
    else
    begin
      reset_fifo_rd_sync <= reset_fifo_rd;
      reset_fifo_wr <= reset_fifo_rd_sync;
    end

//additional logic to generate lsb for dpram read address
//assumes read pointer width = write pointer width
//currently only valid for 32-bit write and 16-bit read - TODO fix
reg [DIFF_RD_WR -1:0] rd_lsb;

always @(posedge clk_rd or negedge rst_n)
 if (~rst_n)
  rd_lsb <= 'b0; //reset
 else if (rd_en == 0)
  rd_lsb <= rd_lsb; //only update if rd_en is true
 else
  rd_lsb <= rd_lsb + 1'b1; //increment


  //---------------------------------------------------------------------------
  // Write side
  //---------------------------------------------------------------------------
  //---------------------------------------------------------------------------
  // Write pointer
  //
  // Write pointer is gray coded and increments on when wr is asserted.
  //---------------------------------------------------------------------------
  gray_count #(WR_PTR_WIDTH) u_gray_wr_ptr
    (
     .clk         (clk_wr),
     .reset_n     (~reset_fifo_wr),
     .en          (wr),
     
     .gray        (wr_ptr),
     .binary      (binary_wr_ptr),
     .next_gray   (nxt_wr_ptr),
     .next_binary ()
     );
  
  //---------------------------------------------------------------------------
  // Synchronise read pointer to write side
  //
  // Pointers are gray coded so only one bit can be changing at the time a
  // pointer is sampled in a different clock domain. Double clocking ensures no
  // metastability on that bit. Uncertainty just means that a pointer
  // incrementing may take an extra clock to sample.
  //---------------------------------------------------------------------------
  integer j;
  always @(posedge clk_wr or negedge rst_n)
    if (~rst_n)
    begin
      rd_ptr_s <= {RD_PTR_WIDTH{1'b0}};
      binary_synch_rd_ptr <= {RD_PTR_WIDTH{1'b0}};
    end
    else
    begin
      rd_ptr_s <= rd_ptr;
      binary_synch_rd_ptr[RD_PTR_WIDTH-1] = rd_ptr_s[RD_PTR_WIDTH-1];
      for (j=RD_PTR_WIDTH-2; j>=0; j=j-1)
	binary_synch_rd_ptr[j] = binary_synch_rd_ptr[j+1] ^ rd_ptr_s[j];
    end

  wire [WR_PTR_WIDTH-1:0] wr_used;
  assign wr_used = binary_wr_ptr - binary_synch_rd_ptr[RD_PTR_WIDTH-1:(RD_PTR_WIDTH - WR_PTR_WIDTH)];

  reg 		       wr_almost_full;
  always @(posedge clk_wr or negedge rst_n)
    if (~rst_n)
      wr_almost_full <= 1'b0;
    else if (reset_fifo_wr)
      wr_almost_full <= 1'b0;
    else if (wr)
    begin
      // set full bit a bit early to allow for the fact that the master
      // will sample it whilst data is still streaming back on Avalon
      if (wr_used > ({WR_PTR_WIDTH{1'b1}} - 8) - (1 << (WRITE_ALMOST_BIT - 1)))
	wr_almost_full <= 1'b1;
    end
    else if (wr_almost_full)
    begin
      if (wr_used > ({WR_PTR_WIDTH{1'b1}} - 8) - (1 << (WRITE_ALMOST_BIT - 1)))
	wr_almost_full <= 1'b1;
      else
	wr_almost_full <= 1'b0;
    end

  reg 		       wr_full;
  always @(posedge clk_wr or negedge rst_n)
    if (~rst_n)
      wr_full <= 1'b0;
    else if (reset_fifo_wr)
      wr_full <= 1'b0;
    else if (wr)
    begin
      if (wr_used == ({WR_PTR_WIDTH{1'b1}} - 1))
	wr_full <= 1'b1;
    end
    else if (wr_full)
    begin
      if (wr_used == {WR_PTR_WIDTH{1'b1}})
	wr_full <= 1'b1;
      else
	wr_full <= 1'b0;
    end

  //---------------------------------------------------------------------------
  // Memory
  //
  // Dual port mem.
  //---------------------------------------------------------------------------
  altsyncram u_dp_ram (
		       .clock0		(clk_wr),
		       .wren_a		(wr),
		       .address_a	(wr_ptr),
		       .data_a		(wdata),
		       
		       .clock1		(clk_rd),
		       .address_b	({rd_ptr, rd_lsb}),
		       .q_b		(rdata)
		       );
  defparam 	       
              u_dp_ram.operation_mode = "DUAL_PORT",
	      u_dp_ram.width_a = WR_DATA_WIDTH,
	      u_dp_ram.widthad_a = WR_PTR_WIDTH,
	      u_dp_ram.numwords_a = WR_DEPTH,
	      u_dp_ram.width_b = RD_DATA_WIDTH,
	      u_dp_ram.widthad_b = (RD_PTR_WIDTH + DIFF_RD_WR),
	      u_dp_ram.numwords_b = RD_DEPTH,
	      u_dp_ram.lpm_type = "altsyncram",
	      u_dp_ram.width_byteena_a = 1,
	      u_dp_ram.outdata_reg_b = "UNREGISTERED",
	      u_dp_ram.indata_aclr_a = "NONE",
	      u_dp_ram.wrcontrol_aclr_a = "NONE",
	      u_dp_ram.address_aclr_a = "NONE",
	      u_dp_ram.address_reg_b = "CLOCK1",
	      u_dp_ram.address_aclr_b = "NONE",
	      u_dp_ram.outdata_aclr_b = "NONE",
	      u_dp_ram.ram_block_type = "AUTO",
	      u_dp_ram.intended_device_family = DEVICE;

  //---------------------------------------------------------------------------
  // Read side
  //---------------------------------------------------------------------------
  //---------------------------------------------------------------------------
  // Read pointer
  //---------------------------------------------------------------------------
  gray_count #(RD_PTR_WIDTH) u_gray_rd_ptr
    (
     .clk         (clk_rd),
     .reset_n     (~reset_fifo_rd),
     .en          (rd_en && (&rd_lsb)),
     
     .gray        (rd_ptr),
     .binary      (binary_rd_ptr),
     .next_gray   (nxt_rd_ptr),
     .next_binary ()
     );

  //---------------------------------------------------------------------------
  // Synchronise write pointer to read side and convert to binary
  //---------------------------------------------------------------------------
  integer m;
  always @(posedge clk_rd or negedge rst_n)
    if (~rst_n)
    begin
      wr_ptr_s <= {WR_PTR_WIDTH{1'b0}};
      binary_synch_wr_ptr <= {WR_PTR_WIDTH{1'b0}};
    end
    else
    begin
      wr_ptr_s <= wr_ptr;
      binary_synch_wr_ptr[WR_PTR_WIDTH-1] = wr_ptr_s[WR_PTR_WIDTH-1];
      for (m=WR_PTR_WIDTH-2; m>=0; m=m-1)
	binary_synch_wr_ptr[m] = binary_synch_wr_ptr[m+1] ^ wr_ptr_s[m];
    end

  wire [RD_PTR_WIDTH-1:0] rd_available;
  assign rd_available = binary_synch_wr_ptr - binary_rd_ptr[RD_PTR_WIDTH-1:(RD_PTR_WIDTH - WR_PTR_WIDTH)];

  reg rd_empty;
  always @(posedge clk_rd or negedge rst_n)
    if (~rst_n)
      rd_empty <= 1'b1;
    else if (reset_fifo_rd)
      rd_empty <= 1'b1;
    else if (rd_en)
    begin
      if (rd_available == 1)
	rd_empty <= 1'b1;
    end
    else if (rd_empty)
    begin
      if (binary_synch_wr_ptr == binary_rd_ptr)
	rd_empty <= 1'b1;
      else
	rd_empty <= 1'b0;
    end

  //---------------------------------------------------------------------------
  // Not implemented
  //---------------------------------------------------------------------------
  wire full_error = 1'b0;
  wire empty_error = 1'b0;

  //---------------------------------------------------------------------------
  //---------------------------------------------------------------------------

endmodule       // dual_port_fifo

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99r精品视频| 日韩精品一区二区三区在线观看| 欧美视频在线观看一区二区| 欧美一二三区在线观看| 国产精品福利影院| 狠狠色综合色综合网络| 欧美在线观看视频一区二区 | 精品少妇一区二区三区免费观看 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美亚洲一区三区| 国产欧美日韩综合| 美女一区二区三区在线观看| 色综合久久综合网97色综合| 国产视频一区在线播放| 美女网站色91| 4438成人网| 一个色在线综合| 91欧美一区二区| 久久精品一区蜜桃臀影院| 蜜桃av一区二区| 555www色欧美视频| 天天av天天翘天天综合网| 在线一区二区视频| 亚洲视频香蕉人妖| 色综合中文字幕国产 | 国产91精品在线观看| 日韩欧美一级在线播放| 五月婷婷综合在线| 欧美日韩视频在线一区二区| 亚洲综合小说图片| 精品1区2区3区| 亚洲国产精品一区二区尤物区| 99vv1com这只有精品| 中文字幕在线观看一区二区| 福利一区二区在线| 国产精品区一区二区三区| 国产精品一区免费视频| 国产女主播视频一区二区| 国产成人精品亚洲日本在线桃色| 久久综合色婷婷| 国产电影一区在线| 国产精品美女一区二区三区| 99国产欧美久久久精品| 亚洲精品写真福利| 欧美日韩激情一区| 久久成人免费日本黄色| 久久这里只有精品6| 国产不卡一区视频| 亚洲美女少妇撒尿| 8v天堂国产在线一区二区| 久久精品国产一区二区三区免费看| 制服丝袜亚洲播放| 国产乱人伦精品一区二区在线观看| 久久久99精品免费观看不卡| 99亚偷拍自图区亚洲| 综合激情成人伊人| 8x8x8国产精品| 国产成人自拍高清视频在线免费播放| 国产精品剧情在线亚洲| 在线观看成人免费视频| 麻豆freexxxx性91精品| 中文一区二区完整视频在线观看| 91高清视频免费看| 美女一区二区视频| 日韩一区中文字幕| 日韩一区二区三区视频在线| 国产成人精品一区二区三区网站观看| 亚洲人成影院在线观看| 91精品国产综合久久福利软件| 国产乱国产乱300精品| 一区二区视频在线看| 欧美成人一区二区| 色婷婷av一区二区三区之一色屋| 美日韩黄色大片| 亚洲激情综合网| 精品国产乱码久久久久久浪潮| 99视频在线观看一区三区| 香蕉影视欧美成人| 国产精品妹子av| 91精品国产综合久久精品app| 成人美女在线观看| 青青草97国产精品免费观看无弹窗版 | 日韩午夜激情电影| 91欧美一区二区| 国产成人精品一区二区三区网站观看| 一区二区三区欧美久久| 久久综合色8888| 欧美日韩视频一区二区| 99在线精品观看| 国产电影一区二区三区| 日本vs亚洲vs韩国一区三区二区| 国产精品亲子伦对白| 91精品久久久久久蜜臀| 色婷婷综合久久久中文字幕| 国产老肥熟一区二区三区| 日韩av二区在线播放| 亚洲影院在线观看| 亚洲欧美另类久久久精品2019| 久久理论电影网| 精品日韩av一区二区| 欧美放荡的少妇| 欧美三区在线观看| 欧美亚洲国产一区二区三区| 99久久婷婷国产| 成人免费视频一区| 国产福利不卡视频| 国产福利精品一区| 国产一区 二区 三区一级| 久久99在线观看| 美女一区二区视频| 激情五月激情综合网| 毛片av一区二区三区| 麻豆精品久久久| 日本aⅴ亚洲精品中文乱码| 午夜精品爽啪视频| 日韩在线a电影| 麻豆一区二区三| 狠狠色狠狠色综合| 国产精品一区在线观看乱码| 国产一区高清在线| 从欧美一区二区三区| 成人午夜电影久久影院| 成人app下载| 色菇凉天天综合网| 欧美日韩高清影院| 日韩一区二区在线看片| 欧美成人一区二区三区片免费| 精品欧美乱码久久久久久1区2区| 久久只精品国产| 国产精品嫩草影院com| 日韩一区在线看| 亚洲第一精品在线| 久草在线在线精品观看| 国产激情视频一区二区三区欧美 | 日韩—二三区免费观看av| 日本91福利区| 国产一区二区日韩精品| 成人免费毛片片v| 在线观看免费亚洲| 精品裸体舞一区二区三区| 国产丝袜在线精品| 日韩成人dvd| 蜜臀av一区二区| 国产精品99久久久久久有的能看| 风间由美一区二区三区在线观看| 色偷偷88欧美精品久久久| 欧美精品黑人性xxxx| 1024精品合集| 日韩精品免费视频人成| 国产精品一区二区久激情瑜伽| 91蜜桃视频在线| 日韩你懂的在线播放| 中文字幕一区二区三区不卡在线| 亚洲一线二线三线视频| 久久www免费人成看片高清| 成人免费视频播放| 日韩一区二区三| 国产精品伦理在线| 日本aⅴ精品一区二区三区| 成人免费视频一区二区| 91精品国产91久久综合桃花| 日本一区二区三级电影在线观看 | 国产成人综合亚洲网站| aaa亚洲精品| 久久久久久99久久久精品网站| 亚洲日穴在线视频| 激情综合色综合久久| 色综合久久六月婷婷中文字幕| 欧美成人性战久久| 亚洲 欧美综合在线网络| 国产成人在线视频免费播放| 欧美人体做爰大胆视频| 国产精品久久久一本精品| 麻豆国产欧美日韩综合精品二区| 91色在线porny| 国产日韩亚洲欧美综合| 奇米色777欧美一区二区| 色呦呦一区二区三区| 国产嫩草影院久久久久| 久久99在线观看| 91精品国产一区二区三区蜜臀| 一区二区成人在线| www.色精品| 国产精品高潮呻吟久久| 国产精品99久久久久久久女警| 欧美一二三四在线| 视频一区二区国产| 欧美日韩国产小视频| 亚洲自拍与偷拍| 91免费精品国自产拍在线不卡| 日本一区二区三区国色天香| 狠狠色综合日日| 欧美成人国产一区二区| 美女一区二区久久| 欧美一区二区私人影院日本| 午夜视频久久久久久| 欧美日韩一区视频| 五月天婷婷综合| 欧美老肥妇做.爰bbww| 日韩精品高清不卡|