IBIS 模型在做類似板級SI 仿真得到廣泛應用。在做仿真的初級階段,經常對于ibis 模型的描述有些疑問,只知道把模型拿來轉換為軟件所支持的格式或者直接使用,而對于IBIS 模型里面的數據描述什么都不算很明白,因此下面的一些描述是整理出來的一點對于ibis 的基本理解。在此引用很多presention來描述ibis 內容(有的照抄過來,阿彌陀佛,不要說抄襲,只不過習慣信手拈來說明一些問題),僅此向如muranyi 等ibis 先驅者致敬。本文難免有些錯誤或者考慮不周,隨時歡迎進行討論并對其進行修改!IBIS 模型的一些基本概念IBIS 這個詞是Input/Output buffer information specification 的縮寫。本文是基于IBIS ver3.2 所撰寫出來(www.eigroup.org/IBIS/可下載到各種版本spec),ver4.2增加很多新特性,由于在目前設計中沒用到不予以討論。。。在業界經常會把spice 模型描述為transistor model 是因為它描述很多電路細節問題。而把ibis 模型描述為behavioral model 是因為它并不象spice 模型那樣描述電路的構成,IBIS 模型描述的只不過是電路的一種外在表現,象個黑匣子一樣,輸入什么然后就得到輸出結果,而不需要了解里面驅動或者接收的電路構成。因此有所謂的garbage in, garbage out,ibis 模型的仿真精度依賴于模型的準確度以及考慮的worse case,因此無論你的模型如何精確而考慮的worse case 不周全或者你考慮的worse case 如何周全而模型不精確,都是得不到較好的仿真精度。
上傳時間: 2013-10-16
上傳用戶:zhouli
注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-08
上傳用戶:dingdingcandy
TimeQuest就一定要搞定完整版,學習TimeQuest很好的資料
標簽: TimeQuest
上傳時間: 2013-12-17
上傳用戶:fujiura
PCB設計問題集錦 問:PCB圖中各種字符往往容易疊加在一起,或者相距很近,當板子布得很密時,情況更加嚴重。當我用Verify Design進行檢查時,會產生錯誤,但這種錯誤可以忽略。往往這種錯誤很多,有幾百個,將其他更重要的錯誤淹沒了,如何使Verify Design會略掉這種錯誤,或者在眾多的錯誤中快速找到重要的錯誤。 答:可以在顏色顯示中將文字去掉,不顯示后再檢查;并記錄錯誤數目。但一定要檢查是否真正屬于不需要的文字。 問: What’s mean of below warning:(6230,8330 L1) Latium Rule not checked: COMPONENT U26 component rule.答:這是有關制造方面的一個檢查,您沒有相關設定,所以可以不檢查。 問: 怎樣導出jop文件?答:應該是JOB文件吧?低版本的powerPCB與PADS使用JOB文件。現在只能輸出ASC文件,方法如下STEP:FILE/EXPORT/選擇一個asc名稱/選擇Select ALL/在Format下選擇合適的版本/在Unit下選Current比較好/點擊OK/完成然后在低版本的powerPCB與PADS產品中Import保存的ASC文件,再保存為JOB文件。 問: 怎樣導入reu文件?答:在ECO與Design 工具盒中都可以進行,分別打開ECO與Design 工具盒,點擊右邊第2個圖標就可以。 問: 為什么我在pad stacks中再設一個via:1(如附件)和默認的standardvi(如附件)在布線時V選擇1,怎么布線時按add via不能添加進去這是怎么回事,因為有時要使用兩種不同的過孔。答:PowerPCB中有多個VIA時需要在Design Rule下根據信號分別設置VIA的使用條件,如電源類只能用Standard VIA等等,這樣操作時就比較方便。詳細設置方法在PowerPCB軟件通中有介紹。 問:為什么我把On-line DRC設置為prevent..移動元時就會彈出(圖2),而你們教程中也是這樣設置怎么不會呢?答:首先這不是錯誤,出現的原因是在數據中沒有BOARD OUTLINE.您可以設置一個,但是不使用它作為CAM輸出數據. 問:我用ctrl+c復制線時怎設置原點進行復制,ctrl+v粘帖時總是以最下面一點和最左邊那一點為原點 答: 復制布線時與上面的MOVE MODE設置沒有任何關系,需要在右鍵菜單中選擇,這在PowerPCB軟件通教程中有專門介紹. 問:用(圖4)進行修改線時拉起時怎總是往左邊拉起(圖5),不知有什么辦法可以輕易想拉起左就左,右就右。答: 具體條件不明,請檢查一下您的DESIGN GRID,是否太大了. 問: 好不容易拉起右邊但是用(圖6)修改線怎么改怎么下面都會有一條不能和在一起,而你教程里都會好好的(圖8)答:這可能還是與您的GRID 設置有關,不過沒有問題,您可以將不需要的那段線刪除.最重要的是需要找到布線的感覺,每個軟件都不相同,所以需要多練習。 問: 尊敬的老師:您好!這個圖已經畫好了,但我只對(如圖1)一種的完全間距進行檢查,怎么錯誤就那么多,不知怎么改進。請老師指點。這個圖在附件中請老師幫看一下,如果還有什么問題請指出來,本人在改進。謝!!!!!答:請注意您的DRC SETUP窗口下的設置是錯誤的,現在選中的SAME NET是對相同NET進行檢查,應該選擇NET TO ALL.而不是SAME NET有關各項參數的含義請仔細閱讀第5部教程. 問: U101元件已建好,但元件框的拐角處不知是否正確,請幫忙CHECK 答:元件框等可以通過修改編輯來完成。問: U102和U103元件沒建完全,在自動建元件參數中有幾個不明白:如:SOIC--》silk screen欄下spacing from pin與outdent from first pin對應U102和U103元件應寫什么數值,還有這兩個元件SILK怎么自動設置,以及SILK內有個圓圈怎么才能畫得與該元件參數一致。 答:Spacing from pin指從PIN到SILK的Y方向的距離,outdent from first pin是第一PIN與SILK端點間的距離.請根據元件資料自己計算。
上傳時間: 2014-01-03
上傳用戶:Divine
J-LIN仿真器操作步驟,J-LIN仿真器操作步驟。
上傳時間: 2013-10-31
上傳用戶:1966640071
注:1.這篇文章斷斷續續寫了很久,畫圖技術也不精,難免錯漏,大家湊合看.有問題可以留言. 2.論壇排版把我的代碼縮進全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脈寬調制波,通過調整輸出信號占空比,從而達到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。 二、Arduino 軟件模擬PWM Arduino PWM 調壓原理:PWM 有好幾種方法。而Arduino 因為電源和實現難度限制,一般 使用周期恒定,占空比變化的單極性PWM。 通過調整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。 如圖所示,假設PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實現難點在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環可以看出,完成一個PWM 周期,共循環255 次。 假設bright=100 時候,在第0~100 次循環中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平; 然后第100 到255 次循環里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。 那么說,如果bright=100 的話,就有100 次循環是高電平,155 次循環是低電平。 如果忽略指令執行時間的話,這次的PWM 波形占空比為100/255,如果調整bright 的值, 就能改變接在D13 的LED 的亮度。 這里設置了每次for 循環之后,將bright 加一,并且當bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應該是大家想的比較多的想法。 然后介紹一個簡單一點的。思維風格完全不同。不過對于驅動一個LED 來說,效果與上面 的程序一樣。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,這段代碼少了一個For 循環。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。 三、多引腳PWM Arduino 本身已有PWM 引腳并且運行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實用意義。我們軟件模擬的價值在于:他能將任意的數字IO 口變成PWM 引腳。 當一片Arduino 要同時控制多個PWM,并且沒有其他重任務的時候,就要用軟件PWM 了。 多引腳PWM 有一種下面的方式: int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設置 int StartPWMPin = 0, EndPWMPin = 13; //設置D0~D13為PWM 引腳 int PWMResolution = 255; //設置PWM 占空比分辨率 void setup() { //定義所有IO 端輸出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //隨便定義個初始亮度,便于觀察 brights[ i ] = random(0, 255); } } void loop() { //這for 循環是為14盞燈做漸亮的。每次Arduino loop()循環, //brights 自增一次。直到brights=255時候,將brights 置零重新計數。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是計數一個PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳 { if(i < brights[j])\ 所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
上傳時間: 2013-10-23
上傳用戶:mqien
C51編寫對SST 之FLASH操作源代碼,用單片機實現對SST39VF040的操作
上傳時間: 2015-01-04
上傳用戶:84425894
看看就知道了
標簽:
上傳時間: 2014-01-11
上傳用戶:lmeeworm
看看就知道了
標簽:
上傳時間: 2015-01-07
上傳用戶:hxy200501
對文件產生md5摘要.文件是否被修改一看就知。
上傳時間: 2013-12-18
上傳用戶:咔樂塢