嵌入1-Wire主機
發布時間:2007/8/28 0:00:00 訪問次數:501
引言
1-Wire?主機DS1WM,稱作1WM,創建它是為了便于實現主機CPU通過1-Wire總線與器件進行通信,而無須涉及位時序操作。本應用指南闡述如何將1-Wire主機(1WM)嵌入到用戶ASIC設計之中。本文提到的DS89C200只是一個理論上的微控制器,另外,假定讀者已經具備了1-Wire主機DS1WM和1-Wire協議的一般知識。如欲了解更詳細信息,請參閱[1] Book of Button Standards和[2] DS1WM數據資料。
結構
DS1WM排列象一個頂級的甲胄,連接四個子模塊,構成一個完整的單元。在這個頂級的甲胄中并沒有HDL代碼。四個子模塊分別是:one_wire_interface、one_wire_master 、clk_prescaler和one_wire_io。對于那些不需要時鐘分頻器的應用,如果提供外部1MHZ時鐘源作為clk_1us 時鐘信號,就可以省去預分頻器模塊(如DS1WM數據資料中的τ注釋,輸入時鐘指定在0.8MHz至1.0MHz之間)。
單總線輸入輸出模塊為DATA總線和DQ提供雙向信號。在大多數應用中,DQ信號是一個I/O引腳。如果是這種情況,DQ引腳驅動器必須是一個漏極開路引腳,且具有合適的ESD保護(參見圖1)。另外,如果外圍器件所使用的上拉電壓高于1WM電源電壓,則引腳驅動器還必須承受這樣的超限電壓,且不能使用鉗位二極管。Dallas建議采用輸出阻抗100Ω的驅動器(Q1),以及一個4.7kΩ的外部DQ上拉電阻至芯片VCC。為保證芯片能夠正常工作,芯片VCC必須高于1-Wire從器件的高電平門限VIH。
圖1:DQ驅動(one_wire_io)
程序庫
Verilog源程序的編譯無需外部庫文件,而VHDL源程序則需要IEEE.std_logic_1164和work.std_arith庫文件。
連接下表列出了1 - Wire主機正常工作需要連接的引線。
如果系統沒有地址選通信號,/ADS可以接為低電平,使地址鎖存器直通。/EN信號應由地址譯碼邏輯產生,在外部連接至1-Wire主機模塊。如果1WM是數據總線上唯一的器件,則/EN可以接為低電平。連到CLK上的系統時鐘頻率必須在3.2MHz到128MHz之間。關于詳細的連接操作,請參考 [2]DS1WM11-Wire Master datasheet。
例程
下面是如何采用Verilog語言創建1-Wire主機例程的一個實例。xcpu產生的所有信號都滿足1-Wire主機的時間要求。由于在數據總線上不存在其他可尋址邏輯,所以/EN_就接為低電平。DQ_OUT信號直接連接至一個I/O引腳。
合成
該設計的合成非常簡單明了。建議采用自下而上的方法分別編譯各個子模塊,然后有選擇地在頂層進行編譯。系統時鐘信號和1us時鐘信號必須考慮一定的時序要求,異步控制信號如/WR、/EN、/ADS和MR也需要滿足一定的時序要求,clk_1us可能所需要的額外要求是不要在時鐘信號上插入緩沖器。在大多數情況下需要采用某種時鐘分配方案,如樹型結構時鐘。
資源包括:源代碼、實例合成腳本以及Synopsys設計編譯器一起使用的Makefile文件。為了調用這些資源,有必要創建一個.synopsys_dc.setup文件,以定義目標合成庫文件。除此之外,還需要修改包含環境文件(名為"environment"),以指定器件所采用的目標庫文件,從而指定輸出驅動能力和輸入負載。這些實例腳本是非常粗略的,而實際的腳本和約束文件將由工程師創建,以滿足特定設計的時序要求。有必要提醒一下:1-Wire主機單元中的時序在設計上無法保證完全同步,這是因為DQ輸出同步于CLK信號,而總線時序僅在CPU使用CLK時鐘來產生/RD和/ADS信號時,才同步于CLK。
本例設計是完全獨立的,已經被成功編譯為FPGA和ASIC的目標文件。當面向一個典型的ASIC目標庫文件合成時,本設計使用大約110個觸發器、3個鎖存器和1492個邏輯門。
引言
1-Wire?主機DS1WM,稱作1WM,創建它是為了便于實現主機CPU通過1-Wire總線與器件進行通信,而無須涉及位時序操作。本應用指南闡述如何將1-Wire主機(1WM)嵌入到用戶ASIC設計之中。本文提到的DS89C200只是一個理論上的微控制器,另外,假定讀者已經具備了1-Wire主機DS1WM和1-Wire協議的一般知識。如欲了解更詳細信息,請參閱[1] Book of Button Standards和[2] DS1WM數據資料。
結構
DS1WM排列象一個頂級的甲胄,連接四個子模塊,構成一個完整的單元。在這個頂級的甲胄中并沒有HDL代碼。四個子模塊分別是:one_wire_interface、one_wire_master 、clk_prescaler和one_wire_io。對于那些不需要時鐘分頻器的應用,如果提供外部1MHZ時鐘源作為clk_1us 時鐘信號,就可以省去預分頻器模塊(如DS1WM數據資料中的τ注釋,輸入時鐘指定在0.8MHz至1.0MHz之間)。
單總線輸入輸出模塊為DATA總線和DQ提供雙向信號。在大多數應用中,DQ信號是一個I/O引腳。如果是這種情況,DQ引腳驅動器必須是一個漏極開路引腳,且具有合適的ESD保護(參見圖1)。另外,如果外圍器件所使用的上拉電壓高于1WM電源電壓,則引腳驅動器還必須承受這樣的超限電壓,且不能使用鉗位二極管。Dallas建議采用輸出阻抗100Ω的驅動器(Q1),以及一個4.7kΩ的外部DQ上拉電阻至芯片VCC。為保證芯片能夠正常工作,芯片VCC必須高于1-Wire從器件的高電平門限VIH。
圖1:DQ驅動(one_wire_io)
程序庫
Verilog源程序的編譯無需外部庫文件,而VHDL源程序則需要IEEE.std_logic_1164和work.std_arith庫文件。
連接下表列出了1 - Wire主機正常工作需要連接的引線。
如果系統沒有地址選通信號,/ADS可以接為低電平,使地址鎖存器直通。/EN信號應由地址譯碼邏輯產生,在外部連接至1-Wire主機模塊。如果1WM是數據總線上唯一的器件,則/EN可以接為低電平。連到CLK上的系統時鐘頻率必須在3.2MHz到128MHz之間。關于詳細的連接操作,請參考 [2]DS1WM11-Wire Master datasheet。
例程
下面是如何采用Verilog語言創建1-Wire主機例程的一個實例。xcpu產生的所有信號都滿足1-Wire主機的時間要求。由于在數據總線上不存在其他可尋址邏輯,所以/EN_就接為低電平。DQ_OUT信號直接連接至一個I/O引腳。
合成
該設計的合成非常簡單明了。建議采用自下而上的方法分別編譯各個子模塊,然后有選擇地在頂層進行編譯。系統時鐘信號和1us時鐘信號必須考慮一定的時序要求,異步控制信號如/WR、/EN、/ADS和MR也需要滿足一定的時序要求,clk_1us可能所需要的額外要求是不要在時鐘信號上插入緩沖器。在大多數情況下需要采用某種時鐘分配方案,如樹型結構時鐘。
資源包括:源代碼、實例合成腳本以及Synopsys設計編譯器一起使用的Makefile文件。為了調用這些資源,有必要創建一個.synopsys_dc.setup文件,以定義目標合成庫文件。除此之外,還需要修改包含環境文件(名為"environment"),以指定器件所采用的目標庫文件,從而指定輸出驅動能力和輸入負載。這些實例腳本是非常粗略的,而實際的腳本和約束文件將由工程師創建,以滿足特定設計的時序要求。有必要提醒一下:1-Wire主機單元中的時序在設計上無法保證完全同步,這是因為DQ輸出同步于CLK信號,而總線時序僅在CPU使用CLK時鐘來產生/RD和/ADS信號時,才同步于CLK。
本例設計是完全獨立的,已經被成功編譯為FPGA和ASIC的目標文件。當面向一個典型的ASIC目標庫文件合成時,本設計使用大約110個觸發器、3個鎖存器和1492個邏輯門。
上一篇:電工儀器儀表市場仍在“微調”