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

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

?? usiedpll.v

?? 實現(xiàn)USB接口功能的VHDL和verilog完整源代碼
?? V
字號:
/******************************************
	Filename: 	siedpll.v 1.27
******************************************/

/*
The Digital PLL module takes the incoming signal, synchronizes it through
a pair of flops for EACH input (data, plus, minus), and then looks for
edges.  Based on transitions/edges it creates a divide by 4 clock and
outputs synchronized data.  For every transition it readjusts its sampling
and output clock so that it is always sampling in between data transitions.
It also adjusts the output clock, lest the output clock get too far ahead of
or behind the data [Imagine if the bus does 1000 transitions while we do
999, if we didn't keep adjusting the USB clock, eventually we'd miss one] 
*/
module Usiedpll  (
		  // inputs
                  testmode,
                  testreset,
		  clock48,
		  usbclock,
		  rcvin,
		  vpin,
		  vmin,
		  pwronreset,
		  se0reset,
		  syncreset48,
		  //suspend,
		  xmitactive,
		  usboen,
		  
		  // outputs
		  syncidle,
		  syncrcv,
		  syncse0,
		  syncerror,
		  syncreset48out,
		  syncreset,
		  usbreset,
		  usbclockout//,
		  //usbclocksuspendedout,
		  //clock24out
		  );

`include "Usiedplldef.v"

  input           testmode;
  input           testreset;
  input	clock48;
  input	usbclock;
  input	rcvin;
  input	pwronreset;	// synopsys sync_set_reset "pwronreset"
  input	se0reset;
  input	syncreset48;	// synopsys sync_set_reset "syncreset48"
  //input	suspend;
  input	xmitactive;
  input	vpin;
  input	vmin;
  input	usboen;

  output    usbclockout;
  //output    usbclocksuspendedout;
  //output    clock24out;
  output    syncidle;
  output    syncrcv;
  output    syncse0;
  output    syncerror;
  output    syncreset48out;
  output    syncreset;
  output    usbreset;

  reg	    syncidle;
  reg	    syncrcv;
  reg	    syncse0;
  reg	    syncerror;
  reg	    syncreset48out;
  reg	    syncreset48bad;
  reg [1:0] clock48quarter, selectquarter;
  reg	    resetselectquarter, incrselectquarter, decrselectquarter;
  reg	    rcvbad;
  reg [1:0] rcvgood;
  reg [1:0] filterbits;
  reg	    filteredrcvd;
  reg [3:0] vpinflops; // 3 tmp stages and the one i look at
  reg [3:0] vminflops;
  // we have 4 delay stages on rcvin so we need 4 on vm and vp
  wire	    vpingood = vpinflops[3];
  wire	    vmingood = vminflops[3];
  reg [7:0] dpllst, nextdpllst;
  reg	    idleselected, rcvselected, se0selected, errorselected, fsselected, lsselected;
  reg	    removelogicreset;
  reg	    xmitactived1, xmitactive48;

  always @(posedge clock48)
    begin
      syncreset48bad <= pwronreset;
      syncreset48out <= syncreset48bad;
      xmitactive48 <= xmitactive || xmitactived1; // i'm keeping this around longer
                               // and bringing it to the clock48 domain before I use it in
                               // the dpll state machine. I dont want to respond to noise
                               // during the turnaround from us driving to the host driving
    end

always @(posedge clock48)
begin
	// syncreset48 is a pwronreset, only active for a short time
	if (syncreset48)
		clock48quarter <= 2'b00;
	else 
	case (clock48quarter)	// synopsys parallel_case full_case
		2'b00 :	clock48quarter <= 2'b01;
		2'b01 :	clock48quarter <= 2'b10;
		2'b10 :	clock48quarter <= 2'b11;
		2'b11 :	clock48quarter <= 2'b00;
	endcase

	if (resetselectquarter)
		selectquarter <= clock48quarter + 2'b10;	// initially set it to 1/2 clock later
	else if (incrselectquarter)
		selectquarter <= selectquarter + 1'b1;
	else if (decrselectquarter)
		selectquarter <= selectquarter - 1'b1;

	//usbclockout <= ~((clock48quarter == selectquarter) || (clock48quarter == (selectquarter + 1'b1)));
end

wire	usbclockpre = ~((clock48quarter == selectquarter) || (clock48quarter == (selectquarter + 1'b1)));
//wire	usbclocksuspendedpre = ~(suspend || (clock48quarter == selectquarter) || (clock48quarter == (selectquarter + 1'b1)));
//wire	clock24pre = ~suspend && clock48quarter[0];

// special aysnc flop logic for usbclockout 
// syncreset48 is a pwronreset, only active for a short time
wire   rstn;
assign rstn = (testmode)? testreset : ~syncreset48;
dffr clkflop (
	.q (usbclockout),
	.d (usbclockpre),
	.clk (clock48),
	.rstn (rstn)
	);

//// special aysnc flop logic for usbclocksuspendedout 
//dffr clksflop (
//	.q (usbclocksuspendedout),
//	.d (usbclocksuspendedpre),
//	.clk (clock48),
//	.rstn (~pwronreset)
//	);
//
//// special aysnc flop logic for clock24out 
//dffr clk24flop (
//	.q (clock24out),
//	.d (clock24pre),
//	.clk (clock48),
//	.rstn (~pwronreset)
//	);

// find four good usb fast rcv points
  always @(posedge clock48)
    begin
      rcvbad <= rcvin;
      rcvgood <= {rcvgood[0],filteredrcvd};
      filterbits <= {filterbits[0],rcvbad}; // first two storage stages used to
                                               // filter glitches
      vpinflops <= {vpinflops[2:0],vpin};
      vminflops <= {vminflops[2:0],vmin};
    end // always @ (posedge clock48)


  always @(filterbits or rcvgood)
    case (filterbits)
      2'b00 : filteredrcvd = 1'b0; // 0 for 2 clks in a row, call it a 0
      2'b10 : filteredrcvd = rcvgood[0]; // dont get excited, may be a glitch
      2'b01 : filteredrcvd = rcvgood[0]; // dont get excited, may be a glitch
      2'b11 : filteredrcvd = 1'b1; // 1 for 2 clks in a row, call it a 1
   default : filteredrcvd = rcvgood[0];
    endcase

// syncreset48 is a pwronreset, only active for a short time
// grab off the bus at the right moment
  always @(posedge clock48)
    begin
      if (syncreset48)
	begin
	  idleselected <= 1'b1;
	  rcvselected <= 1'b1;
	  se0selected <= 1'b0;
	  errorselected <= 1'b0;
	  fsselected <= 1'b1;
	  lsselected <= 1'b0;
	end
      else if (selectquarter == clock48quarter)	// time to grab rcv
	begin
	  // idle if in state idle OR if were se0selected but won't be now
	  idleselected <= (dpllst == DPLLIDLE) || (se0selected && (vpingood || vmingood));
	  rcvselected <= rcvgood[0];
	  se0selected <= ({vpingood,vmingood} == 2'b00);
	  errorselected <= ({vpingood,vmingood} == 2'b11);
	  fsselected <= ({vpingood,vmingood} == 2'b01);
	  lsselected <= ({vpingood,vmingood} == 2'b10);
	end
      // else leave alone!
    end

// sync up usb rcv to usb clock
  reg usbreset;
  wire	syncresetn;
  always @(posedge usbclock)
    begin
      syncidle <= idleselected;
      syncrcv <= rcvselected;
      syncse0 <= se0selected;
      syncerror <= errorselected;
      usbreset <= ~syncresetn || se0reset; // helps for static timing analysis
      xmitactived1 <= (usboen == 1'b0); // oe is one clock after xmitactive
                      // and here we're delaying it one more even
                                     
    end

wire	clearreset = removelogicreset ? 1'b1 : syncresetn;
wire	syncreset = ~syncresetn;

// special aysnc flop logic for syncreset 
wire   rstn1;
assign rstn1 = (testmode)? testreset : ~pwronreset;
dffr resetflop (
	.q (syncresetn),
	.d (clearreset),
	.clk (usbclock),
	.rstn (rstn1)
	);


// state machine for syncing to the rcv transition edges

  always @(posedge clock48)
    begin
      if (syncreset48)
	dpllst <= DPLLIDLE;
      else
	dpllst <= nextdpllst;
    end

  always @(dpllst or rcvgood or syncreset48 or se0selected or xmitactive48)
    begin
      if (syncreset48 == 1)
	begin
	  resetselectquarter = 1'b1;	
	  incrselectquarter = 1'b0;
	  decrselectquarter = 1'b0;
	  removelogicreset = 1'b0;
	  nextdpllst = DPLLIDLE;
	end
      else
	case (dpllst)	// synopsys parallel_case full_case
	  DPLLIDLE:
	    begin
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (~xmitactive48 && (rcvgood[1] != rcvgood[0]))	// input transition, leaving idle
		begin
		  resetselectquarter = 1'b1;	
		  nextdpllst = DPLL1ST;
		end
	      else
		begin
		  resetselectquarter = 1'b0;
		  nextdpllst = DPLLIDLE;
		end
	    end
	  DPLL1ST:
	    begin
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (rcvgood[1] != rcvgood[0])	// 2nd transition, resync pll
		begin
		  resetselectquarter = 1'b1;	
		  nextdpllst = DPLLQ1;
		end
	      else
		begin
		  resetselectquarter = 1'b0;
		  nextdpllst = DPLL1ST;
		end
	    end
	  DPLLQ1:
	    begin
	      resetselectquarter = 1'b0;	
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      nextdpllst = DPLLQ2;
	    end
	  DPLLQ2:
	    begin
	      resetselectquarter = 1'b0;	
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      nextdpllst = DPLLQ3;
	    end
	  DPLLQ3:
	    begin
	      resetselectquarter = 1'b0;	
	      incrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (se0selected)
		begin
		  nextdpllst = DPLLSE0;
		  decrselectquarter = 1'b0;
		end
	      else if (rcvgood[1] != rcvgood[0])	// transition
		begin
		  // we need to shrink our clock,
		  // because we saw a transition early
		  nextdpllst = DPLLQ1;
		  decrselectquarter = 1'b1;
		end
	      else
		begin
		  nextdpllst = DPLLQ4;
		  decrselectquarter = 1'b0;
		end
	    end
	  DPLLQ4:
	    begin
	      resetselectquarter = 1'b0;	
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (rcvgood[1] != rcvgood[0])	// transition
		nextdpllst = DPLLQ1;
	      else
		nextdpllst = DPLLQ5;
	    end
	  DPLLQ5:
	    begin
	      // normally we wouldnt see a transition here
	      // if we do, we need to stretch our clock
	      resetselectquarter = 1'b0;	
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (rcvgood[1] != rcvgood[0])	// transition
		begin
		  nextdpllst = DPLLQ1;
		  incrselectquarter = 1'b1;
		end
	      else		// no transition, must have been a 1
		begin
		  nextdpllst = DPLLQ2;
		  incrselectquarter = 1'b0;
		end
	    end
	  DPLLSE0:
	    begin
	      resetselectquarter = 1'b0;	
	      incrselectquarter = 1'b0;
	      decrselectquarter = 1'b0;
	      removelogicreset = 1'b1;
	      if (se0selected)
		nextdpllst = DPLLSE0;
	      else
		nextdpllst = DPLLIDLE;
	    end
	endcase
    end

// make the ascii version of the dpll state
// synopsys translate_off
  reg [8*10:1] dpllstate;
  always @(dpllst)
    case (dpllst)
      DPLLIDLE : dpllstate = "IDLE";
      DPLL1ST : dpllstate = "1ST";
      DPLLQ1 : dpllstate = "Q1";
      DPLLQ2 : dpllstate = "Q2";
      DPLLQ3 : dpllstate = "Q3";
      DPLLQ4 : dpllstate = "Q4";
      DPLLQ5 : dpllstate = "Q5";
      DPLLSE0 : dpllstate = "SE0";
    endcase
// synopsys translate_on

endmodule

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线影院| 国产精品一区二区三区四区| 国产精品美女久久久久av爽李琼| 精品一区二区免费在线观看| 日韩一区二区三区电影在线观看| 日日夜夜免费精品| 91精品国产色综合久久ai换脸 | 色婷婷av一区二区三区之一色屋| 亚洲色图19p| 欧美浪妇xxxx高跟鞋交| 日韩成人午夜电影| 国产片一区二区三区| 成人av资源下载| 亚洲小少妇裸体bbw| 日韩视频免费观看高清在线视频| 国产一区二区三区在线观看免费视频| 中文字幕 久热精品 视频在线| 色综合中文字幕国产 | 国产日韩欧美在线一区| 26uuu精品一区二区在线观看| 国产一区二区三区四| 欧美精品一区二区三区高清aⅴ| 国产在线精品一区二区不卡了| 欧美成人乱码一区二区三区| 青椒成人免费视频| 精品日韩一区二区| 国产成人亚洲综合a∨婷婷| 中文字幕欧美区| 91麻豆精东视频| 亚洲成人tv网| 精品成人一区二区三区四区| 国产不卡高清在线观看视频| 国产精品国产成人国产三级| 日本精品裸体写真集在线观看| 亚洲成av人片一区二区三区| 91精品国产综合久久精品app| 久久9热精品视频| 中文字幕中文字幕中文字幕亚洲无线| 7799精品视频| 国产毛片一区二区| 亚洲精品大片www| 欧美色图一区二区三区| 日韩国产一二三区| 欧美片网站yy| 视频一区二区三区中文字幕| 欧美电影免费观看高清完整版 | 欧美精品一区二区三区蜜臀| 91在线精品秘密一区二区| 亚洲第一会所有码转帖| 久久久99久久| 欧美浪妇xxxx高跟鞋交| 成人综合婷婷国产精品久久| 亚洲无线码一区二区三区| 久久久亚洲午夜电影| 色哟哟精品一区| 狠狠色狠狠色综合| 国产日产亚洲精品系列| 欧美三级韩国三级日本三斤 | 日本道免费精品一区二区三区| 亚洲一区二区偷拍精品| 欧美男女性生活在线直播观看| 国产激情一区二区三区桃花岛亚洲| 国产精品国产自产拍高清av王其| 91精品国产免费| 成人午夜电影小说| 男人的j进女人的j一区| 亚洲小少妇裸体bbw| 精品卡一卡二卡三卡四在线| 91免费视频大全| 国产91富婆露脸刺激对白| 人人爽香蕉精品| 亚洲综合激情网| 中文字幕一区二区在线观看| 欧美mv和日韩mv的网站| 欧美男女性生活在线直播观看| 91麻豆swag| 成人黄色免费短视频| 狠狠色丁香婷婷综合| 日韩精品电影一区亚洲| 亚洲成人av电影在线| 1区2区3区精品视频| 国产欧美精品区一区二区三区| 日韩三级免费观看| 在线观看91av| 欧美一区二区女人| 欧美一区二区三区四区高清| 欧美视频在线播放| 欧美日韩在线免费视频| 91免费国产视频网站| 91日韩在线专区| 91一区二区在线| 91麻豆swag| 欧美性色综合网| 欧美日韩国产综合草草| 精品视频一区二区三区免费| 欧美亚洲综合另类| 色噜噜狠狠色综合欧洲selulu| 91同城在线观看| 91免费看`日韩一区二区| aaa亚洲精品| 色综合一个色综合| av电影在线观看完整版一区二区| 国产精品一区二区你懂的| 韩国欧美国产1区| 极品少妇xxxx精品少妇| 国产一区二区三区精品欧美日韩一区二区三区| 免费观看一级欧美片| 亚洲18女电影在线观看| 丝袜脚交一区二区| 激情欧美日韩一区二区| 国产成人综合在线| 97aⅴ精品视频一二三区| 91啪亚洲精品| 欧美三级日韩在线| 精品欧美一区二区在线观看| 26uuu成人网一区二区三区| 国产欧美精品一区二区色综合| 中文字幕亚洲电影| 亚洲国产一区二区a毛片| 日本视频中文字幕一区二区三区| 国产一区在线观看视频| 99久久99久久综合| 欧美日本一区二区三区| 精品国产91久久久久久久妲己| 国产欧美精品在线观看| 亚洲自拍欧美精品| 精品一区二区精品| 99r国产精品| 91精品婷婷国产综合久久性色| 久久久电影一区二区三区| 亚洲欧美一区二区三区国产精品 | 亚洲成人精品一区二区| 韩国三级中文字幕hd久久精品| av午夜精品一区二区三区| 91麻豆精品国产91久久久使用方法 | 日韩中文字幕一区二区三区| 精品一区二区三区的国产在线播放 | 日韩一卡二卡三卡国产欧美| 精品不卡在线视频| 18成人在线观看| 日本中文一区二区三区| 99视频热这里只有精品免费| 欧美欧美午夜aⅴ在线观看| 日本一区二区三区电影| 丝袜国产日韩另类美女| 99久久er热在这里只有精品66| 日韩欧美国产三级电影视频| 最新国产精品久久精品| 久久精品国产77777蜜臀| 91精彩视频在线观看| 久久亚洲免费视频| 日日欢夜夜爽一区| 日本丰满少妇一区二区三区| 久久久久久久久伊人| 日本不卡高清视频| 在线亚洲高清视频| 欧美国产乱子伦| 精品在线播放免费| 欧美精品视频www在线观看| 国产精品美女一区二区三区 | 精品sm捆绑视频| 亚洲一二三四区| 高清国产一区二区三区| 欧美精品三级在线观看| 国产精品美女久久久久久| 看国产成人h片视频| 在线一区二区三区四区五区| 中文字幕一区在线观看| 国产米奇在线777精品观看| 欧美一区二区三区婷婷月色| 亚洲国产视频直播| 91视频免费播放| 成人免费在线视频观看| 波多野洁衣一区| 欧美不卡一区二区三区| 亚洲成精国产精品女| 成人av网址在线| 专区另类欧美日韩| 91亚洲资源网| 亚洲欧洲综合另类在线| 91污在线观看| 亚洲精品中文在线| 91久久香蕉国产日韩欧美9色| 亚洲三级免费电影| 91丨porny丨蝌蚪视频| 亚洲视频在线观看三级| 99热99精品| 亚洲日本va在线观看| 色婷婷精品大在线视频| 亚洲男人的天堂在线aⅴ视频| 91一区二区在线| 亚洲影院久久精品| 欧美视频在线一区二区三区| 午夜精品久久久久久久蜜桃app| 欧洲在线/亚洲| 日韩精品亚洲专区| 欧美日韩一级片在线观看| 亚洲福利视频三区| 欧美美女喷水视频| 亚洲精品欧美专区|