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

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

?? rs232rx.v

?? 用VERILOG語言寫的RS485通信程序,經調試可以直接使用
?? V
字號:
//-----------------------------------------
// This block takes care of receiving an RS232 input word,
// from the "rxd" line in a serial fashion.
// The user is responsible for providing appropriate CLK
// and clock enable (CE) to achieve the desired Baudot interval
// (NOTE: the state machine operates at "CLOCK_FACTOR_PP" times the
//   desired BAUD rate.  Set it to anything between 2 and 16,
//   inclusive.  Values higher than 16 will not "buy" much for you,
//   and the state machine might not work well for values less than
//   four either, because of the difficulty in sampling rxd at the
//   "middle" of the bit time.  However, it may be useful to adjust
//   the clock_factor around in order to generate good BAUD clocks
//   from odd Fclk frequencies on your board.)
// Each time the "word_ready" line drives high the unit has put
// a newly received data word into its output buffer, and is possibly
// already in the process of receiving the next one.
// Note that support is not provided for 1.5 stop bits, only integral
// numbers of stop bits are allowed.  However, a selection >2 for
// number of stop bits will still work (it will simply receive
// and count additional stop bits before reporting "word_ready"

`timescale 1ns/100ps
module rs232rx (
                clk,
                rx_clk,
                reset,
                rxd,
                read,
                data,
                data_ready,
                error_over_run,
                error_under_run,
                error_all_low
                );

// Parameter declarations
parameter START_BITS_PP  = 1;
parameter DATA_BITS_PP  = 8;
parameter STOP_BITS_PP  = 1;
parameter CLOCK_FACTOR_PP  = 16;

// State encodings, provided as parameters
// for flexibility to the one instantiating the module

parameter m1_idle = 0;
parameter m1_start = 1;
parameter m1_shift = 3;
parameter m1_over_run = 2;
parameter m1_under_run = 4;
parameter m1_all_low = 5;
//parameter m1_extra_1 = 6;
//parameter m1_extra_2 = 7;
parameter m2_data_ready_ack = 0;
parameter m2_data_ready_flag = 1;



// I/O declarations
input clk; 
input rx_clk; 
input reset;
input rxd;
input read;   //表示已經將接收到的一幀數據取走

output [DATA_BITS_PP-1:0] data; // 8 bit UART data
output data_ready;   // 8 bit UART data準備好標志
output error_over_run; //在發生錯誤后必須reset才能推出錯誤死循環
output error_under_run;
output error_all_low;

reg [DATA_BITS_PP-1:0] data;
reg data_ready;
reg error_over_run;  //stop bit error,導致over error
reg error_under_run; //start bit error,導致under error 
reg error_all_low;   //全部為低電平(包括stop),導致all low error

// Local signal declarations
`define TOTAL_BITS START_BITS_PP + DATA_BITS_PP + STOP_BITS_PP

wire word_xfer_l;  //表示一幀數據完整接收到
wire mid_bit_l;    //1 bit UART data信號的中間采樣點標志
wire start_bit_l;  // start bit flag
wire stop_bit_l;   // stop bit flag
wire all_low_l;    //接收到的一幀數據全為“0”

reg [3:0] intrabit_count_l; // 確定中間采樣點的counter
reg [`TOTAL_BITS-1:0] q; //用于保存接收到的一幀數據
reg shifter_preset; //=1-> intrabit_count_l = 0 | q <= -1
reg [2:0] m1_state;
reg [2:0] m1_next_state;
reg m2_state;
reg m2_next_state;


  // State register
  always @(posedge clk)
  begin : m1_state_register
    if (reset) m1_state <= m1_idle;
    else m1_state <= m1_next_state;
  end 

  always @(m1_state 
           or reset
           or rxd
           or mid_bit_l
           or all_low_l
           or start_bit_l
           or stop_bit_l
           )
  begin : m1_state_logic
  
    // Output signals are low unless set high in a state condition.
    shifter_preset <= 0;   //在出錯后,能夠及時重新reset,開始新的檢測
    error_over_run <= 0;
    error_under_run <= 0;
    error_all_low <= 0;
  
    case (m1_state)

      m1_idle :
        begin
          shifter_preset <= 1'b1;
          if (~rxd) m1_next_state <= m1_start;
          else m1_next_state <= m1_idle;
        end

      m1_start :
        begin
          if (~rxd && mid_bit_l) m1_next_state <= m1_shift;
          else if (rxd && mid_bit_l) m1_next_state <= m1_under_run;
          else m1_next_state <= m1_start;
        end

      m1_shift :
        begin
          if (all_low_l) m1_next_state <= m1_all_low;
          else if (~start_bit_l && ~stop_bit_l) m1_next_state <= m1_over_run;
          else if (~start_bit_l && stop_bit_l) m1_next_state <= m1_idle;
          else m1_next_state <= m1_shift;
        end

      m1_over_run :
        begin
          error_over_run <= 1;
          shifter_preset <= 1'b1;
          if (reset) m1_next_state <= m1_idle;
          else m1_next_state <= m1_over_run;
        end
      
      m1_under_run :
        begin
          error_under_run <= 1;
          shifter_preset <= 1'b1;
          if (reset) m1_next_state <= m1_idle;
          else m1_next_state <= m1_under_run;
        end
        
      m1_all_low :
        begin
          error_all_low <= 1;
          shifter_preset <= 1'b1;
          if (reset) m1_next_state <= m1_idle;
          else m1_next_state <= m1_all_low;
        end
        
      default : m1_next_state <= m1_idle;
    endcase 
  end 
  assign word_xfer_l = ((m1_state == m1_shift) && ~start_bit_l && stop_bit_l);

  // State register
  always @(posedge clk)
  begin : m2_state_register
    if (reset) m2_state <= m2_data_ready_ack;
    else m2_state <= m2_next_state;
  end 

  // State transition logic
  always @(m2_state or word_xfer_l or read)
  begin : m2_state_logic
    case (m2_state)
      m2_data_ready_ack:
            begin
              data_ready <= 1'b0;
              if (word_xfer_l) m2_next_state <= m2_data_ready_flag;
              else m2_next_state <= m2_data_ready_ack;
            end
      m2_data_ready_flag:
            begin
              data_ready <= 1'b1;
              if (read) m2_next_state <= m2_data_ready_ack;
              else m2_next_state <= m2_data_ready_flag;
            end
      default : m2_next_state <= m2_data_ready_ack;
    endcase 
  end 

  // This counts within a bit-time.
  always @(posedge clk)
  begin
    if (shifter_preset) intrabit_count_l <= 0;
    else if (rx_clk)
    begin
      if (intrabit_count_l == (CLOCK_FACTOR_PP-1)) intrabit_count_l <= 0;
      else intrabit_count_l <= intrabit_count_l + 1;
    end
  end
  // This signal gets one "rx_clk" at the middle of the bit time.
  assign mid_bit_l = ((intrabit_count_l==(CLOCK_FACTOR_PP / 2)) && rx_clk);

  // This is the shift register
  always @(posedge clk)
  begin : rxd_shifter
    if (shifter_preset) q <= -1; // Set to all ones.
    else if (mid_bit_l) q <= {rxd,q[`TOTAL_BITS-1:1]};
  end
  // Note: The definitions of "start_bit_l" and "stop_bit_l" could
  //       well be updated to include _all_ of the start and stop bits.
  assign start_bit_l = q[0];
  assign stop_bit_l = q[`TOTAL_BITS-1];
  assign all_low_l = ~(| q); // Bit-wise or of the entire shift register


  // This is the output buffer
  always @(posedge clk)
  begin : rxd_output
    if (reset) data <= 0;
    else if (word_xfer_l) 
      data <= q[START_BITS_PP+DATA_BITS_PP-1:START_BITS_PP];
  end

endmodule

//`undef TOTAL_BITS

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩三区| 一区二区三区丝袜| 国产精品无遮挡| 亚洲精品高清在线| 日日欢夜夜爽一区| 成人一级片网址| 欧美日本国产视频| 欧美激情一区二区三区| 曰韩精品一区二区| av一区二区三区| 国产亚洲一本大道中文在线| 国产999精品久久久久久绿帽| 欧洲一区在线电影| 国产精品美日韩| 国产专区综合网| 日韩一区二区三区视频在线观看| 亚洲精品免费在线播放| 国产99一区视频免费 | 国产亚洲精品资源在线26u| 亚洲综合在线免费观看| 99久久精品免费看国产| 久久久久久久久久久久久久久99| 欧美aⅴ一区二区三区视频| 欧美午夜免费电影| 自拍偷在线精品自拍偷无码专区| 国产成人在线视频网站| 26uuu精品一区二区| 美女视频黄免费的久久| 欧美一区二区三区在线电影| 亚洲国产精品久久久久婷婷884| 99在线视频精品| 国产精品第一页第二页第三页| 国产精品中文字幕日韩精品| 欧美精品一区二区在线播放| 久久se这里有精品| 日韩一级二级三级精品视频| 蜜桃精品在线观看| 日韩美女视频在线| 久久er99精品| 国产夜色精品一区二区av| 国产麻豆精品theporn| 久久综合国产精品| 国产精品白丝jk白祙喷水网站| 国产亚洲女人久久久久毛片| 成人激情av网| 亚洲黄色尤物视频| 欧美日本一区二区在线观看| 蜜臀精品久久久久久蜜臀| 精品粉嫩超白一线天av| 国产精品一区三区| 中文字幕中文乱码欧美一区二区| 99国产欧美久久久精品| 亚洲国产你懂的| 日韩一级二级三级| 国产成a人亚洲精| 一区在线中文字幕| 欧美人狂配大交3d怪物一区 | 国产精品美女www爽爽爽| av中文字幕亚洲| 亚洲午夜电影在线观看| 日韩色视频在线观看| 国产成人一区在线| 一区二区国产视频| 精品日韩一区二区| jlzzjlzz欧美大全| 日韩国产欧美视频| 欧美国产欧美综合| 欧美日韩一区小说| 国产suv一区二区三区88区| 亚洲欧美日本在线| 欧美一区二区三区在线观看视频| 欧美日本一区二区在线观看| 国产一区二区三区四| 一区二区三区影院| 欧美mv日韩mv国产网站app| 99综合影院在线| 美女视频第一区二区三区免费观看网站| 精品入口麻豆88视频| 99久久99久久精品免费看蜜桃 | 亚洲视频一二三| 日韩精品自拍偷拍| 91高清视频在线| 国内精品国产三级国产a久久| 亚洲欧美日韩人成在线播放| 欧美成va人片在线观看| 在线日韩一区二区| 高清不卡一区二区在线| 蜜臀久久久久久久| 亚洲精品国产精华液| 久久久久国产精品麻豆| 欧美日韩国产免费一区二区| 丰满岳乱妇一区二区三区| 日本在线不卡视频一二三区| 亚洲色图在线看| 欧美激情资源网| 这里是久久伊人| 色婷婷久久久亚洲一区二区三区 | 91免费看`日韩一区二区| 精品一区二区免费在线观看| 亚洲第一福利一区| 亚洲麻豆国产自偷在线| 亚洲国产精品高清| 久久久亚洲精品石原莉奈| 日韩一级在线观看| 欧美精品一二三| 91成人免费在线| 91官网在线免费观看| www.亚洲色图.com| 成人激情av网| av中文字幕亚洲| 波多野结衣精品在线| 国产成人av电影在线观看| 久久成人免费网| 久久成人麻豆午夜电影| 麻豆国产91在线播放| 麻豆一区二区在线| 美女看a上一区| 激情另类小说区图片区视频区| 美女国产一区二区三区| 精品一二线国产| 国模一区二区三区白浆| 国产精品一区二区视频| 国产毛片一区二区| 成人网在线播放| 色综合网站在线| 在线观看成人小视频| 欧美色综合久久| 欧美精品v日韩精品v韩国精品v| 欧美欧美欧美欧美| 6080yy午夜一二三区久久| 日韩写真欧美这视频| 久久色成人在线| 国产农村妇女精品| 亚洲美女一区二区三区| 首页综合国产亚洲丝袜| 精品综合久久久久久8888| 国产成人av网站| 色婷婷久久一区二区三区麻豆| 欧美日韩在线观看一区二区| 久久久精品中文字幕麻豆发布| 国产精品少妇自拍| 亚洲嫩草精品久久| 欧美96一区二区免费视频| 国产风韵犹存在线视精品| 99热国产精品| 91精品国产黑色紧身裤美女| 久久一夜天堂av一区二区三区| 国产精品久久久久久久久免费樱桃 | 综合av第一页| 性做久久久久久| 国产精品资源在线| 在线看日韩精品电影| 精品久久久久一区| 亚洲天堂网中文字| 日本怡春院一区二区| 成人免费观看男女羞羞视频| 欧美日韩亚洲综合在线| 久久奇米777| 一个色综合网站| 国产精品一级片| 欧美老年两性高潮| 欧美激情一区三区| 天天操天天干天天综合网| 丰满少妇久久久久久久| 制服.丝袜.亚洲.中文.综合| 中文字幕乱码日本亚洲一区二区 | 国产乱子轮精品视频| 在线观看免费亚洲| 久久影音资源网| 午夜视频在线观看一区二区三区| 国产精品18久久久久| 欧美美女激情18p| 国产精品美女久久久久aⅴ| 毛片基地黄久久久久久天堂| 一本到不卡精品视频在线观看| 亚洲精品一区二区三区在线观看 | 2017欧美狠狠色| 午夜激情一区二区三区| 99久久精品一区二区| 国产午夜精品一区二区三区四区| 日日摸夜夜添夜夜添精品视频 | 高潮精品一区videoshd| 日韩精品一区二区三区四区| 亚洲亚洲精品在线观看| 欧美日韩dvd在线观看| 亚洲另类在线一区| 粉嫩av一区二区三区粉嫩| 欧美mv和日韩mv国产网站| 天堂精品中文字幕在线| 在线免费观看日韩欧美| 亚洲欧美日韩国产中文在线| 成人午夜视频在线观看| 国产色婷婷亚洲99精品小说| 麻豆视频观看网址久久| 欧美精品久久久久久久多人混战| 亚洲精品国久久99热| 99久久久无码国产精品| 亚洲欧洲韩国日本视频| 97久久精品人人做人人爽| 综合亚洲深深色噜噜狠狠网站|