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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于SOPC的車輛總線控制器設計方案

          基于SOPC的車輛總線控制器設計方案

          作者: 時間:2016-12-16 來源:網(wǎng)絡 收藏



            3 SOPC片上系統(tǒng)MVB控制器設計

          3.1 總線訪問IP核與NiosII的系統(tǒng)集成

          利用QuartersII的SOPC Builder工具,集成了1個32位NiosII軟核處理器、4 KB的片內RAM、MVB總線訪問IP核(包括編碼器和解碼器)以及LCD控制模塊,在Altera的CycloneII FPGA上構成了一個能實現(xiàn)MVB一類網(wǎng)絡節(jié)點功能的片上系統(tǒng),如圖8所示。圖9為SOPCBuilder中各個功能模塊的凋用情況。


          3.2 NiosII處理器上的軟件設計

          基于上述SOPC系統(tǒng),設計了一個基本的MVB節(jié)點,以實現(xiàn)過程數(shù)據(jù)傳輸。該節(jié)點將Oxl4地址設置為源端口。當主幀輪詢0x14地址時,本節(jié)點將此端口里的數(shù)據(jù)打包成從幀發(fā)送到總線上面,以刷新0x14地址的宿端口。

          MVB模塊頭文件altera_avalon_mvb.h的設計,包括總線訪問IP核寄存器讀寫的宏定義。

          在主函數(shù)里置MVB總線接收允許位,循環(huán)等待接收MVB主控制器發(fā)過來的主幀。節(jié)點在接收到主幀之后,程序進入中斷處理程序。在巾斷程序里提取接收到的主幀里的端口地址,并與自身預設的端幾地址碼進行比較。如果地址碼相符,則節(jié)點將本端口的數(shù)據(jù)通過MVB發(fā)送器發(fā)到總線上,實現(xiàn)端口數(shù)據(jù)刷新操作。
          主循環(huán)代碼節(jié)選:


            4 仿真與實測波形

          4.1 仿真波形

          在本實驗中,對實驗室設計的MVB板卡進行了功能仿真和FPGA驗證.通過對過程數(shù)據(jù)的發(fā)送與接收驗證了所搭建的MVB系統(tǒng)。對MVB總線控制器發(fā)送過程的主從幀仿真結果如圖10所示。發(fā)送的主從幀數(shù)據(jù)都為0x0055,包含1個幀頭及8位CRC校驗數(shù)據(jù)。


          4.2 實測波形

          編好程序后,再編譯一遍QuartersII工程文件,將得到的.pof文什下載至FPGA內。上電后用示波器測輸出引腳,便可觀察到MVB從幀波形,實測波形如圖11所示。對照IEC-61375協(xié)議標準,可以判斷出該渡形為符合標準的正確波形,并且源端口節(jié)點上收到了正確的數(shù)據(jù),從而證明該過程數(shù)據(jù)端口成功刷新。


            結語

          目前,MVB控制器實現(xiàn)了實驗室環(huán)境中過程變量的正確接收和發(fā)送。本總線訪問IP核實現(xiàn)的功能與MVBC相當,但是由于采用了先進的SOPC設計技術,其體系結構大大簡化,設計難度也大大降低,在通用性方面有了很大的提高。

          上一頁 1 2 下一頁

          評論


          技術專區(qū)

          關閉
          看屁屁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); })();