并行數(shù)據(jù)流-串行數(shù)據(jù)流_第1頁
并行數(shù)據(jù)流-串行數(shù)據(jù)流_第2頁
并行數(shù)據(jù)流-串行數(shù)據(jù)流_第3頁
并行數(shù)據(jù)流-串行數(shù)據(jù)流_第4頁
并行數(shù)據(jù)流-串行數(shù)據(jù)流_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

instinst并行數(shù)據(jù)流轉換為特殊串行數(shù)據(jù)流模塊設計設計要求設計兩個可綜合的電路模塊:第一個模塊M1能把4位的并行數(shù)據(jù)轉換為符合以下協(xié)議的串行碼流,數(shù)據(jù)流用scl和sda兩條線傳輸,scik為輸入的時鐘信號,data[3:0]為輸入數(shù)據(jù),ack為M1請求M0發(fā)送數(shù)據(jù)信號。第二個模塊M2能把串行數(shù)據(jù)流內的信息接收到,并轉換為相應 16條信號線的高電平,即若數(shù)據(jù)為1,則第一條信號線為高電平,數(shù)據(jù)為n,則第N=2n條信號線為高電平??傮w的框圖如下圖所示:圖1通信協(xié)議scl為不斷輸出的時鐘信號,如果scl為高電平時,sda由高變低時刻,串行數(shù)據(jù)流開始;如果scl為高電平時,sda由低變高時刻,串行數(shù)據(jù)結束。sda信號的串行數(shù)據(jù)位必須在scl為低電平時變化,若為高則為1,否則為0。通信協(xié)議的波形如圖2所示:sclsda 1/0 1/0 1/0 1/0圖2M1模塊設計模塊功能:按照設計要求,把輸入的4位并行數(shù)據(jù)轉換為協(xié)議要求的串行數(shù)據(jù)流,并由scl和sda配合輸出。思路分析:M1需要產生M2的時鐘信號scl,考慮到M1時鐘端所接為外部穩(wěn)定時鐘源,則scl信號應該可以通過sclk時鐘信號分頻產生。rst為異步復位端,便于在通電時將硬件電路復位到有效狀態(tài)。 M1將接收到的并行數(shù)據(jù)轉換為串行數(shù)據(jù),需要先將并行數(shù)據(jù)存入寄存器中,在 sclk配合下,將并行數(shù)據(jù)轉換為串行數(shù)據(jù)輸出,同時再輸出反饋信號ack到M0,所以設計的核心在于利用M1模塊產生符合協(xié)議要求的sda信號和ack信號,以供M0模塊和M2模塊使用。sda信號的串行數(shù)據(jù)位必須在scl為低電平時變化,這是設計的關鍵所在。為了便于編寫程序及調試,給出了如圖3所示的時序邏輯狀態(tài)轉移圖。3dr]—td?aa:0Li..J.HE流程圖:設計中采用了同步狀態(tài)機,利用狀態(tài)跳轉來使SCI、sdaack信號在同步性能上有明顯提高,以保證時序的可靠性和準確性。link_sdalink_sda<=0ack<=1圖3狀態(tài)轉移圖程序代碼如下:moduleptosda1(rst,sclk,ack,scl,sda,data);inputsclk,rst;input[3:0]data;outputack,scl,sda;regscl,link_sda,ack,sdabuf;reg[3:0]databuf;reg[7:0]state;assignsda=link_sda?sdabuf:1'b0;parameterready=8'b0000_0000,start=8'b0000_0001,bit1=8'b0000_0010,bit2=8'b0000_0100,bit3=8'b0000_1000,bit4=8'b0001_0000,bit5=8'b0010_0000,stop=8'b0100_0000,IDLE=8'b1000_0000;always@(posedgesclkornegedgerst)beginif(!rst)scl<=1;elsescl=~scl;endalways@(posedgeack)databuf<=data;always@(negedgesclkornegedgerst)beginif(!rst)beginlink_sda<=0;state<=ready;sdabuf<=1;ack<=0;endelsebegincase(state)ready:if(ack)beginlink_sda<=1;state<=start;endelsebeginlink_sda<=0;state<=ready;ack=1;endstart:if(scl&&ack)beginsdabuf<=0;state<=bit1;endelsestate<=start;bit1:if(!scl)beginsdabuf<=databuf[3];state<=bit2;ack<=0;endelsestate<=bit1;bit2:if(!scl)beginsdabuf<=databuf[2];state<=bit3;endelsestate<=bit2;bit3:if(!scl)beginsdabuf<=databuf[1];state<=bit4;endelsestate<=bit3;bit4:if(!scl)beginsdabuf<=databuf[0];state<=bit5;endelsestate<=bit4;bit5:if(!scl)beginsdabuf<=0;state<=stop;endelsestate<=bit5;stop:if(scl)beginsdabuf<=1;state<=IDLE;endelsestate<=stop;IDLE:if(scl)beginlink_sda<=0;state<=ready;endelsestate<=IDLE;default:beginlink_sda<=0;sdabuf<=1;state<=ready;endendcaseendendendmodule仿真波形為:組并行數(shù)據(jù)轉換為串行數(shù)據(jù)輸出后,databuf中的數(shù)據(jù)才更新。輸出串行數(shù)據(jù)流的格式為OxxxxO,其中,xxxx是轉換后得到的四位串行數(shù)據(jù)。而且串行數(shù)據(jù)的變化均在scl為低電平器件,數(shù)據(jù)的傳輸符合通信協(xié)議要求,達到設計要求。M2模塊設計模塊功能:按照協(xié)議接收串行數(shù)據(jù),進行處理并按照數(shù)據(jù)值在相應位輸出高電平。思路分析:scl為M2的輸入時鐘信號,sda為輸入串行數(shù)據(jù)流,M2準確讀出sda中的串行數(shù)據(jù)并進行處理,然后按照要求在相應位輸出高電平。 輸入串行數(shù)據(jù)流的格式為OxxxxO,因此正確的讀出數(shù)據(jù)xxxx并轉換為并行數(shù)據(jù)是設計的關鍵,同時按照協(xié)議要求,應該設置相應的串行數(shù)據(jù)開始標志 StartFlag和結束標志EndFlag,設置這樣的標志是極其重要的,因為這樣可以幫助我們正確的設計狀態(tài)機,從而準確可靠的讀出串行數(shù)據(jù)xxxx并轉換為并行數(shù)據(jù)。最后將并行數(shù)據(jù)按指定要求輸出,要求M2內部有譯碼模塊。?:--■J■'' ouihiQh[l&..■Kiai-";■-■--■■>nti■■-“-*:i■rr?---■:in$ii--狀態(tài)轉移圖:程序代碼如下:moduleout16hi(scl,sda,outhigh,rst);inputscl,sda,rst;output[15:0]outhigh;reg[5:0]mstate;reg[3:0]pdata,pdatabuf;reg[15:0]outhigh;regStartFlag,EndFlag;always@(negedgesdaornegedgerst)beginif(scl)StartFlag<=~StartFlag;elseif(!rst)StartFlag<=0;endalways@(posedgesdaornegedgerst)beginif(scl)beginEndFlagv=~EndFlag;pdatabuf<=pdata;endelseif(!rst)EndFlag<=1;endparameterready=6'b00_0000,sbit0=6'b00_0001,sbit1=6'b00_0010,sbit2=6'b00_0100,sbit3=6'b00_1000,sbit4=6'b01_0000;always@(pdatabuf)begincase(pdatabuf)4'b0001:outhigh=16'b0000_0000_0000_0001;4'b0010:outhigh=16'b0000_0000_0000_0010;4'b0011:outhigh=16'b0000_0000_0000_0100;4'b0100:outhigh=16'b0000_0000_0000_1000;4'b0101:outhigh=16'b0000_0000_0001_0000;4'b0110:outhigh=16'b0000_0000_0010_0000;4'b0111:outhigh=16'b0000_0000_0100_0000;4'b1000:outhigh=16'b0000_0000_1000_0000;4'b1001:outhigh=16'b0000_0001_0000_0000;4'b1010:outhigh=16'b0000_0010_0000_0000;4'b1011:outhigh=16'b0000_0100_0000_0000;4'b1100:outhigh=16'b0000_1000_0000_0000;4'b1101:outhigh=16'b0001_0000_0000_0000;4'b1110:outhigh=16'b0010_0000_0000_0000;4'b1111:outhigh=16'b0100_0000_0000_0000;4'b0000:outhigh=16'b1000_0000_0000_0000;endcaseendalways@(posedgescl)beginif(StartFlag)case(mstate)ready:beginmstate<=sbit0;$display("Iaminready");endsbit0:beginmstate<=sbit1;pdata[3]<=sda;$display("Iaminsdabit0");endsbit1:beginmstate<=sbit2;pdata[2]<=sda;$display("Iaminsdabit1");endsbit2:beginmstate<=sbit3;pdata[1]<=sda;$display("Iaminsdabit2");endsbit3:begin

mstate<=sbit4;pdata[O]v=sda;$display("laminsdabit3");endsbit4:beginmstate<=ready;$display("Iaminready");enddefault:mstate<=ready;endcaseelsemstate<=sbit0;endendmodule仿真波形為:仿真結果表明:rst復位信號用于對數(shù)據(jù)開始標志 StartFlag仿真結果表明:rst復位信號用于對數(shù)據(jù)開始標志 StartFlag和數(shù)據(jù)結束標志EndFlag置初值,根據(jù)通信協(xié)議要求,數(shù)據(jù)傳輸開始于 sda下降沿,結束與sda上升沿,因此可以利用sda的上升沿來改變EndFlag的狀態(tài),sda的下降沿來改變StartFlag的狀態(tài),同時在sda的上升沿到來時將串行數(shù)據(jù)轉換為并行數(shù)據(jù)并輸出高電平。從圖中可以看出,StartFlag為高電平有效,EndFlag為低電平有效,M2準確地從串行數(shù)據(jù)流內讀出串行數(shù)據(jù),如圖中串行數(shù)據(jù)依次為0000,0001,…,與測試輸入數(shù)據(jù)吻合,表明M2模塊設計符合要求。M1與M2連接方式M0測試模塊設計思路:由于M1模塊有輸出信號反饋到M0模塊,并對M0模塊產生影響,因此需要在M0模塊中加入輸入信號,用于接收M1模塊的反饋信號。利用這個反饋信號編制相應的輸出信號,這樣能更好地仿真實際電路。代碼:'timescale1ns/1ns'definehalfperiod50modulesigdata(rst,sclk,data,ask_for_data);outputrst,sclk;output[3:0]data;inputask_for_data;regrst,sclk;reg[3:0]data;initialbeginrst=1;#10rst=0;#('halfperiod*2+3)rst=1;endinitialbeginsclk=0;data=0;#('halfperiod*1000)$stop;endalways#('halfperiod)sclk=~sclk;always@(posedgeask_for_data)#('halfperiod/2+3)data=data+1;Endmodule頂層模塊設計模塊功能:對所設計的兩個可綜合模塊M1和M2進行聯(lián)合測試,觀察M1模塊能否正確地把并行數(shù)據(jù)轉換成符合協(xié)議要求的串行碼流;串行碼流能否通過M2模塊的處理輸出符合設計要求的信號。代碼:'timescale1ns/1ns'include"sigdata.v"'include"ptosda1.v"'include"out16hi.v"modul

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論