<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于串口通訊的Verilog設(shè)計

          基于串口通訊的Verilog設(shè)計

          作者: 時間:2012-09-03 來源:網(wǎng)絡(luò) 收藏

          else begin

          counter=0;

          state=s0;

          end

          end

          s1:if(!din)//如果是0的話,轉(zhuǎn)入s2狀態(tài),提取八位有效數(shù)據(jù)

          state=s2;

          else //否則轉(zhuǎn)到s0狀態(tài)重新檢測

          state=s0;

          s2:if(cnt3==3)//是否采集四次數(shù)據(jù)

          begin

          cnt2=0;

          indata_buf[bitpos]=din; //先進(jìn)來的是高位數(shù)據(jù)

          bitpos=bitpos-1;

          if(bitpos==-1)

          begin

          bitpos=7;state=s3;end

          end

          else cnt3=cnt3+1;

          s3:begin

          tag1=tag;

          tag=1'b1; //標(biāo)志輸入寄存器滿。表明已把有用數(shù)據(jù)裝入寄存器

          if(tag~tag1)txdone) //檢測到tag的上升沿以及txdone為高才把輸入緩沖數(shù)據(jù)放到輸出緩沖去

          dout_buf={1'b1,indata_buf[7:0],1'b0};//停止位,高位,低位,起始位

          state=s0;

          end

          endcase

          end

          //***********發(fā)送數(shù)據(jù)模塊

          reg[3:0] state_tx=0;

          always@(posedge txclk or posedge rst)

          begin

          if(rst)

          begin

          dout_ser=1'bz;

          state_tx=0;

          txdone=1;

          end

          else

          case(state_tx)

          0:begin

          dout_ser=dout_buf[0];state_tx=state_tx+1;txdone=1'b0;end

          1:begin

          dout_ser=dout_buf[1];state_tx=state_tx+1;end

          2:begin

          dout_ser=dout_buf[2];state_tx=state_tx+1;end

          3:begin

          dout_ser=dout_buf[3];state_tx=state_tx+1;end

          4:begin

          dout_ser=dout_buf[4];state_tx=state_tx+1;end

          5:begin

          dout_ser=dout_buf[5];state_tx=state_tx+1;end

          6:begin

          dout_ser=dout_buf[6];state_tx=state_tx+1;end

          7:begin

          dout_ser=dout_buf[7];state_tx=state_tx+1;end

          8:begin

          dout_ser=dout_buf[8];state_tx=state_tx+1;end

          9:begin

          dout_ser=dout_buf[9];state_tx=state_tx+1;end

          endcase

          end

          endmodule

          注:兩個頻率信號nclk、txclk由相應(yīng)的分頻程序產(chǎn)生。由于篇幅所限未在文中列出。

          FPGA模塊接收從RS-485發(fā)送過來的串行數(shù)據(jù)。25位為一個字符。數(shù)據(jù)的傳輸速率是700kbps,用四倍于波特率的速率進(jìn)行采樣,這樣可以大大降低系統(tǒng)的噪聲。數(shù)據(jù)的串行輸出波特率選為11200bps。

          由輸入輸出波形圖可以看出:本段程序?qū)崿F(xiàn)了對輸入數(shù)據(jù)的有效數(shù)據(jù)位的提取,并按照一定的波特率進(jìn)行串行輸出。程序中,波特率可以根據(jù)需要通過分頻程序進(jìn)行改動。硬件電路搭建簡單,程序代碼書寫容易。數(shù)據(jù)傳輸穩(wěn)定可靠,可以滿足串口通信的要求。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: Verilog 串口通訊

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();