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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一個簡單串行總線方案的veilog語言實現(xiàn)

          一個簡單串行總線方案的veilog語言實現(xiàn)

          作者: 時間:2016-12-15 來源:網(wǎng)絡(luò) 收藏
          1.線路狀態(tài):在平時不發(fā)送數(shù)據(jù)的時候,DI 為高電平。SCK為低電平。

          2.起始位:SCK 為高的時候,DI 的下降沿決定了一次數(shù)據(jù)傳送的開始。也就是說,在發(fā)送數(shù)據(jù)的時候,SCK為高電平的期間,DI 不允許變化。

          本文引用地址:http://www.ex-cimer.com/article/201612/330297.htm

          3.起始位有效后,SCK的上升沿輸出數(shù)據(jù)。

          4.時序圖


          5.所有數(shù)據(jù)低位在前

          數(shù)據(jù)為單向發(fā)送,目的是產(chǎn)生寬度可頻率可以調(diào)節(jié)的信號。同時產(chǎn)生一路Pwm信號,本設(shè)計只是發(fā)送數(shù)據(jù)部分

          代碼:

          module SetData(Rst,SCK,DI,Width,Cycle,PWM);
          input SCK,DI,Rst;
          output reg [7:0]Width;//脈沖寬度
          output reg [23:0]Cycle;//周期
          output reg [7:0] PWM;//Pwm數(shù)據(jù)
          reg [7:0]Buff;
          reg [7:0] Buff1;
          reg [2:0]Stage;//狀態(tài)變量
          reg [5:0]Cnt;
          reg Load;
          reg INIT;//起始位標(biāo)記
          parameterStatus0= 3b000;//狀態(tài)定義
          parameterStatus1= 3b001;
          parameterStatus2= 3b010;
          parameterStatus3= 3b011;
          parameterStatus4= 3b100;
          parameterStatus5= 3b101;
          parameterStatus6= 3b110;
          parameterStatus7= 3b111;
          always @(negedge Rst,negedge SCK)//產(chǎn)生串并轉(zhuǎn)換完成信號(8bit)
          begin
          if(!Rst) Load<=0;
          else if ((!SCK)&&(Cnt==8))
          Load<=1;
          else Load<=0;
          end
          always @(negedge DI)//檢測起始位
          begin
          if(SCK==1)INIT<=0;//標(biāo)記到init 中
          else INIT<=1;
          end
          always @(negedge Rst,posedge SCK,negedge INIT)//狀態(tài)轉(zhuǎn)換
          begin
          if ((Rst==0) || (INIT==0))//強(qiáng)制到狀態(tài)0
          begin
          Stage<=Status0;
          Buff<=0;
          end
          else if ((SCK==1)&&(Stage==Status0)) begin Stage<=Status1;Cnt<=0; end
          else if ((SCK==1)&&(Stage!=Status0))
          begin
          Buff<={DI,Buff[7:1]};
          Cnt <= Cnt+1;
          if (Cnt==8)
          begin
          Cnt<=1;
          Stage<=Stage+1;
          if (Stage==Status7) Stage<=Status0;

          end

          end
          end
          always @(posedge Load,negedge INIT)//組合出需要的數(shù)據(jù)
          begin
          if (INIT==0)//如果是起始位,所有數(shù)據(jù)清零
          begin Width <=0;Cycle<=0; PWM<=0; end
          else
          //begin
          case(Stage)//不同狀態(tài)下的數(shù)據(jù)輸出
          //Status0:
          Status1: Width<=Buff;//脈寬數(shù)據(jù)
          Status2: Cycle<={ Cycle[23:8],Buff};//周期數(shù)據(jù)
          Status3: Cycle<={ Cycle[23:16],Buff,Cycle[7:0]};
          Status4: Cycle<={ Buff,Cycle[15:8],Cycle[7:0]};
          Status5: PWM<=Buff;//PWM數(shù)據(jù)
          endcase
          // end
          end
          endmodule

          仿真結(jié)果



          注意圖中認(rèn)為中斷了數(shù)據(jù)發(fā)送(通過設(shè)置起始位來實現(xiàn))。

          初學(xué)verilog語言,用的可能不夠規(guī)范,主要是不習(xí)慣不能在不同進(jìn)程里對同一個變量賦值的約束,只好加一個init變量進(jìn)行信號傳遞。



          關(guān)鍵詞: 串行總線veilog語

          評論


          技術(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); })();