91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 0.30M
    文件類型: .pdf
    金幣: 1
    下載: 0 次
    發布日期: 2021-03-28
  • 語言: 其他
  • 標簽: 其他??

資源簡介


關于SPI技術的Verilog實現代碼,里面詳細講解了SPI的通信協議
數據接收: P"LLPH上P2mL叫上 l g out_buf 了工a Lu out_ dat 4183 圖2、數據接收 數據接收與數據發送使用同一個時鐘信號SCK和片選信號CS。其工作情況大紋如下:在 每個SCK時鐘的上升沿對接收數據進行采樣。由圖2可知,在一個bu信號使能階段,采 到的數據為l0110111,即丨進制183。在busy信號關閉使能后,只有片選使能且處于允許 讀狀態,接收到的數據才會被存儲,否則丟棄。 Chipscope數據抓取 E waveform - CEV 0 MyDewlced ( xC5SLX150T) UNIT O MyI L AO (LA)9999992929993929999992999 Ef a Bus/Signal X in11515155 ⊥,,,囪,,,,,,,,,,,,,L,,⊥ DataPort[3] DataEort [21 DataEort[21] 00 Dataform [20] Dataror 21=0 Window=) Cample= Datafort[19 Datagort [16 DataEort [151 DataEort [14] D孟Et[13] TAF∩Tt[11 Da品Et[10] Dotolort[5] 1 DataPort!S]- DataPort[o]:busy、sdo、addr、cs、wr、ro Patapon21- DataPort[14]:待發送8bit數據 DataPort13]- DataPort6]:接收的8bit數據 總結 完成時間:124-1212 前期:該階段主要是熟悉SPⅠ工作原理,進一步掌握和認識SP通信協議。( Chipcore的使 用之前木曾接蝕,在這階段,我先通過簡單編程結合開發板抓取數據進行分析達到 對其的基本掌握。 中期:在熟悉SPI的工作原理之后,開始嘗試編寫代碼。寫了兩三次代碼,效果均不理想 很多問題在編寫代碼的時候沒有考慮清楚,導致到了仿真階段結果與預期有所差距, 且代碼冗長復雜。參考了一些資料,效果也不是很好,特別是數據傳輸暫停部分,很 多都省略了。不過借鑒別人寫的代碼也讓我收獲了不少編寫的經驗,有些情況下,運 用不同的邏輯思維可以讓代碼史簡潔、更只有健壯性。當然期間也遇到了一些自己無 法解決的問,非常感謝福星學長耐心的指導,讓我學到了不少知識和經驗。 后期:該階段主要是對代碼進行再修改、波豗仿真以及抓數據調試 問題及分析 小問題遇到不少,不過大多都通過eror的提小,或者上網搜索,找到了問題的原因 并予以解決。也有軟件上的原因,比如:第一次裝ISE的時候可能沒有安裝好,上板調試的 時候, cable不能識別。經過測試分析發現ISE里的 drive沒有裝上。考慮到這樣一個問題的 岀現可能還會附帶有一些軟仵上的漏洞,重裝了一遍ISE,問題解決。 使用 chipscope的時候,芯片配置不對連接失敗,査閱該電路板的資料,重新配置,問 題解決。在 chipscope里面有些觸發信號找不到,經分析是被優化了,通過簡單修改代碼避 免它被優化后,問題解決。運行 chipscopc后發現 waveform始終沒反應,經過一番分析,認 為吋鐘線的引腳配置有問題,重換個吋鐘信號線IO引腳,問題解決。解決后發現抓取的 波形沒有明顯的高低跳變,經分析可能是參考時鐘選取不對,重選后問題解決。 附錄: 流程圖 開始 NO SCK觸發? 寄存器左移,低 位接收sd信號。 數據接收 開始 NO NO Cs使能? Yes緩存器發 送并移位 NO cs=1)wh wI- ck周期計數器1P=busy置0 Yes NO addr=0? busy置0 sck信號反轉 侍發送數據存入綴 存器,busy置1 數據發送 代碼: module spi mosi(addr, rd, wr,cs, clk, sdi, sdo, sck, spi bps, data) input wirc addr: Input wire rd; Input wire wr Input wire cs, Input wire clk output[siz.c: 1] data Input sdl inout sdo inout sck. nout spl bps reg size: 1] out data= 0; reg sck buffer=0; reg sdo buffer=0 busy=0; reg [size: 1] in buffer=0; reg size: l out buffer=0 re 0 reg [7: 0] clkcount =0 spl bps reg reg[12: 0] clk cnt; reg size: I in data=8b10101001 parameter size=8 parameter para=6400 parameter para half3200 assign data - out da assign sck=sck buffer; assign sdo= sdo buffer assign spi bps=spi bps reg / 分頻模塊 lways(a(posedge clk begin if( (clk cnt >=0)&&(clk cnt<para half)) gin clk cnt<=clk cnt+1b1 spi bps reg<=1'b0 end eIse if((clk cnt>=para half)&&(clk cnt< para)) n clk cnt<=clk cnt+1bl spi bps reg<-1b1 end else clk ent<=13'd0: cnd 100 iiil1l1m1i1 發送接收模塊 always(a (cs or rd or busy) if(busy & cs & rd) begin out data= out bu lter;end∥接收數據存入 out dala else begin out data=8b0: end end al ways(a(posedge spi bps) )eg ∥空狀態 begin if(cs & wr) ∥片選使能且處于寫狀態 begin e(addr 1b0: begin in buffer= in data;busy=1bl;end待發數據存入緩存區, 轉入工作狀態 1bl: begin busy=1b0; end endcase end begin if(cs) begin clkcount= clkcount+1b1 if(clkout>8b10)∥挖制SCK周期 gIn clkcount =0 if( count%2)=0)發送數據 qIn sdo buffer-in buffer[ 8] in buffer= in buffer << I if( count >0&& count<17 在未達到8個sck周期時,每次觸發 條件滿足,信號反轉次 begin sck buffer msck buffer count= count +1 b1 f(count>I7) egin count =0: end end al ways(a(posedge sck buffer egin out buffer s out buffer < I out buffer1=sdi /接收從機發送過來的數據 end endmodule 觸發信號控制部分 module spi mem(spi bps, rd, wr, cS, sdi, addr) Input output oulput Wr output output output g wr re cs reg g ddr rcg assign rd=rd reg assign wrwr reg assign cs-cs reg, assign sdi=sdi rcg; assign addr-addr reg; reg size: 1 cnt set: ze cnt sdi: always(a (posedge spi bps begin f(cnt set<8'd250) begin cnt set<-cnt set+1bl; end eIse begin cnt set<=8d0; end al ways(a(posedge spi bps) gl if(cnt sdi<8'd9) begin cnt sdi<=cnt sdi+1bl; end else begin cnt sdi<=8d0: end end al ways(@(posedge spi bps) begin f(cnt sdis 8'd5) begin sdi reg<=1bl; end else begin sdi reg<=1b0; end al ways a( poscdgc spi bps)∥產生觸發信號便于仿真 g if(cnt set<8d9) begin cs reg <=1'b0 =1b0; rd reg < -Ib0 addr reg <=1bl else il((cnt set>=8'd9)&&(cnt sel<8d24)) cs reg <=lbl addr reg <=1b1 rcg <=1 b0 rd reg <-=1,b0 en else if((cnt set>=8'd24 )&&(cnt set<8'd35)) gin cs rcg <=1b1 addr reg <=1b0; wr reg<=1,b1 rd reg <=1bl end clsc if((ent sct>=8'd35)&&(ent sct<8'd89)) eg ddr reg <=1'b0: wr reg<=1,b1 d reg<-1,b1 else if((cnt set>=8'd89)&&(cnt set<8d105) egIn cs reg <=1b1 addr reg <=1b1; 1b1 rd reg <=1b1 else if(cnt set>-8d105)&&(cnt set<8d115)) cS reg <=1b0 addr reg <=1'b0 wr reg∈1bl; rd reg <=lb0 end clsc if(ent sct>=8d1 15)&&(cnt sct<8'd124) cs reg<=1b1 ddr reg <=lbl wr reg←=1b0, rd rcg <=1,b0 else if((cnt set>=8'd12 4)&&(cnt set<8'd153) begin cs reg <= 1'b0 ddr reg<=1'b0 g rd reg <=1bl cnd else il((ent set>=8d153)&&(ent set<8'd200)) cs reg <=lb0 addr reg<=1bl wr rcg <=1b1 egIn cS rcg <=1b1 addr reg =1b0; wr reg <=1bl; end endmodule 10

資源截圖

代碼片段和文件信息

評論

共有 條評論