麻豆一区二区三区蜜桃免费_中文字幕Va一区二区三区 _国产成人综合久久二区_丰满多毛的大隂户毛茸茸_国产麻豆剧果冻传媒免费老狼_无码人妻精品一区二区三区久久久 _亚洲中文无码精品卡通_蜜臀亚洲AV永久无码精品老司机

新聞資訊
【方輝專欄】ARM嵌入式編譯器(六) 內(nèi)聯(lián)函數(shù)
2022-08-17
摘要: 本文主要對Arm Compiler 6編譯器中內(nèi)聯(lián)函數(shù)進(jìn)行介紹。關(guān)鍵字:Arm Compiler 6、編譯器、內(nèi)聯(lián)函數(shù)如果Arm Compiler 6認(rèn)為內(nèi)聯(lián)此函數(shù)可以提高性能同時不會顯著增加代碼量,就會自動優(yōu)化為內(nèi)聯(lián)函數(shù)。當(dāng)然您也可以使用編譯器選項來控制函數(shù)是否進(jìn)行內(nèi)聯(lián)。內(nèi)聯(lián)選項或?qū)傩哉f明__inline__提示編譯器可以進(jìn)行內(nèi)聯(lián),但是否內(nèi)聯(lián)仍取決于編譯器。__attribute__((always_inline))提示編譯器始終內(nèi)聯(lián)此函數(shù)。__attribute__((noinline))提示編譯器不要內(nèi)聯(lián)此函數(shù)。-fon-inline-functions這個編譯命令選項會禁止編譯器進(jìn)行內(nèi)聯(lián),同時也使得__inline__失效。注1:自動內(nèi)聯(lián)通常只有在優(yōu)化等級為-O2或更高等級時才會進(jìn)行,除非您使用了__attribute__((always_inline)),才會在低優(yōu)化等級中進(jìn)行。注2:Arm Compiler 6編譯器僅在同一個源文件內(nèi)進(jìn)行自動內(nèi)聯(lián)函數(shù)。以下是一個__attribute__((always_inline))的例子:int bar(int a){????a=a*(a+1);????return a;} __attribute__((always_inline)) static int row(int a){????a=a*(a+1);????return a;} int foo (int i){????i=bar(i);????i=i-2;????i=bar(i);????i++;????i=row(i);????i++;????return i;}在以上代碼中,函數(shù)bar和row功能相同,只是row聲明始終內(nèi)聯(lián)。使用-O2進(jìn)行編譯,使用一個含有選項-fon-inline-functions,另一個不含有-fon-inline-functions選項進(jìn)行編譯。編譯命令分別如下:有-fon-inline-functions選項:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s -fon-inline-functions無-fon-inline-functions選項:armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s編譯后反匯編結(jié)果如下:使用-fon-inline-functions代碼不使用-fon-inline-functions代碼foo: @ @foo .fnstart@ BB#0: .save {r11, lr} push {r11, lr} bl bar sub r0, r0, #2 bl bar add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 pop {r11, pc}.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnendfoo: @ @foo .fnstart@ BB#0: add r1, r0, #1 mul r0, r1, r0 sub r1, r0, #2 sub r0, r0, #1 mul r0, r0, r1 add r1, r0, #1 add r0, r0, #2 mul r0, r0, r1 add r0, r0, #1 bx lr.Lfunc_end0: .size foo, .Lfunc_end0-foo .cantunwind .fnend可以看到,使用-fon-inline-functions選項時,就不會對bar進(jìn)行內(nèi)聯(lián),而不使用的時候就會對bar進(jìn)行內(nèi)聯(lián),但對于row始終是進(jìn)行內(nèi)聯(lián)的。+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
創(chuàng)建蒙特卡洛模擬的 4 個簡單步驟
2022-08-17
??20 世紀(jì) 40 年代,研究原子彈的科學(xué)家應(yīng)用 Monte Carlo 模擬計算了一個裂變鈾原子引起另一個裂變反應(yīng)的概率,這是該模擬的首次應(yīng)用,自此以來已經(jīng)取得了很大進(jìn)展。今天我們將介紹如何使用 Minitab 為已知的工程公式和 DOE 方程創(chuàng)建 Monte Carlo 模擬。??由于當(dāng)時鈾供應(yīng)短缺,試驗的試錯空間很小,因此 Monte Carlo 模擬一直專注于根據(jù)模擬數(shù)據(jù)計算可靠的概率。如今,從材料工程到醫(yī)療設(shè)備包裝密封再到煉鋼,模擬數(shù)據(jù)經(jīng)常用于許多場景,例如資源有限的場景,或者收集真實數(shù)據(jù)過于昂貴或不切實際的場景。使用 Engage 或 Workspace 的 Monte Carlo 模擬工具可以:(1)模擬可能結(jié)果的范圍以幫助做出決策(2)預(yù)測財務(wù)結(jié)果或估計項目時間表(3)了解過程或系統(tǒng)中的變異性(4)在過程或系統(tǒng)中發(fā)現(xiàn)問題(5)通過了解成本/效益關(guān)系來管理風(fēng)險開始使用任何 Monte Carlo 模擬的4 個步驟??模擬可能非常復(fù)雜,具體取決于所涉及因子的數(shù)量。但所有 Monte Carlo 模擬基本上都有四個簡單的步驟:??確定傳輸方程要創(chuàng)建 Monte Carlo 模擬,您需要一個包含要探索的業(yè)務(wù)活動、計劃或過程的定量模型。過程的數(shù)學(xué)表達(dá)式稱為“傳輸方程”。這可以是已知的工程或業(yè)務(wù)公式,也可以基于根據(jù)設(shè)計試驗 (DOE) 或回歸分析創(chuàng)建的模型。借助 Minitab Engage 和 Minitab Workspace 等軟件,您能夠創(chuàng)建復(fù)雜的方程,甚至是具有多個可能相互依賴的響應(yīng)的方程。? 定義輸入?yún)?shù)對于傳輸方程中的每個因子,確定其數(shù)據(jù)的分布方式。一些輸入可能遵循正態(tài)分布,而另一些則遵循三角分布或均勻分布。然后,您需要確定每個輸入的分布參數(shù)。例如,需要為遵循正態(tài)分布的輸入指定均值和標(biāo)準(zhǔn)差。如果您不確定數(shù)據(jù)遵循哪種分布,可以使用 Engage 和 Workspace 提供的工具來確定。? 設(shè)置模擬要進(jìn)行有效的模擬,您必須為每個輸入創(chuàng)建一個非常大的隨機(jī)數(shù)據(jù)集(大約包含 100,000 個實例)。這些隨機(jī)數(shù)據(jù)點(diǎn)模擬在很長一段時間內(nèi),對于每個輸入將看到的值。盡管聽起來工作量很大,但這正是 Engage 和 Workspace 的亮點(diǎn)。一旦我們提交輸入和模型,一切都會得到處理。? 分析過程輸出有了模擬數(shù)據(jù),您就可以使用傳輸方程來計算模擬結(jié)果??紤]到輸入中的預(yù)期變異,通過模型運(yùn)行足夠多的模擬輸入數(shù)據(jù)將可靠地指出該過程將在一段時間內(nèi)輸出的內(nèi)容。Monte Carlo 使用已知工程公式的4 個步驟??一家制造公司需要評估所提議產(chǎn)品的設(shè)計,這是一款每分鐘必須泵送 12 毫升流體的小型活塞泵。考慮到活塞直徑 (D)、沖程長度 (L) 和每分鐘沖程數(shù) (RPM) 的自然變異,您想要估計數(shù)千個泵的可能性能。理想情況下,數(shù)千個泵的泵流量將具有不大于 0.2 毫升的標(biāo)準(zhǔn)差。??確定傳輸方程進(jìn)行 Monte Carlo 模擬的第一步是確定傳輸方程。在本例中,您只需使用已知的工程公式來測量泵流量:流量(以毫升為單位)= π(D/2)2 ? L ? RPM? 定義輸入?yún)?shù)現(xiàn)在,必須定義傳輸方程中使用的每個輸入的分布和參數(shù)。泵的活塞直徑和沖程長度是已知的,但必須計算達(dá)到所需 12 毫升/分鐘流速所需的每分鐘沖程數(shù) (RPM)。每個沖程泵送的體積按以下方程計算:π(D/2)2 * L如果 D = 0.8,L = 2.5,則每個沖程排出 1.256 毫升流體。因此,要達(dá)到 12 毫升/分鐘的流速,RPM 為 9.549。根據(jù)貴廠制造的其他泵的性能,您可以假定活塞直徑呈正態(tài)分布,均值為 0.8 厘米,標(biāo)準(zhǔn)差為 0.003 厘米。沖程長度呈正態(tài)分布,均值為 2.5 厘米,標(biāo)準(zhǔn)差為 0.15 厘米。最后,每分鐘沖程數(shù)呈正態(tài)分布,均值為 9.549 RPM,標(biāo)準(zhǔn)差為 0.17 RPM。??在 Engage 或 Workspace 中設(shè)置模擬單擊頂部功能區(qū)中的插入選項卡,然后選擇 Monte Carlo 模擬。我們將它變得非常簡單 — 您只需為每個變量提供名稱,從下拉菜單中選擇一個分布,然后輸入?yún)?shù)。我們將按照上面所述的內(nèi)容進(jìn)行操作。如果您不確定數(shù)據(jù)遵循哪種分布,可以選擇使用數(shù)據(jù)確定。這將提示您上傳數(shù)據(jù)的 .csv 文件,可從以下幾個選項中進(jìn)行選擇:??模擬和分析過程輸出下一步是給出方程。在這里,操作非常簡單,只需為您的輸出提供名稱(我們提供的名稱是 Flow),然后鍵入我們在上面確定的正確傳輸方程。您還可以添加規(guī)格上限和規(guī)格下限以查看模擬的比較情況。然后,在功能區(qū)中,選擇要運(yùn)行的模擬數(shù)量(100,000 是不錯的基準(zhǔn)),然后單擊用來運(yùn)行模擬的按鈕。對于為了撰寫本文而生成的隨機(jī)數(shù)據(jù),基于 100,000 個樣本的平均流速為 11.996。從平均值來看,我們達(dá)到了目標(biāo),但最小值為 8.7817,最大值為 15.7057。這是一個相當(dāng)大的范圍。(所有組件的)傳輸變異導(dǎo)致標(biāo)準(zhǔn)差為 0.756 毫升,這遠(yuǎn)遠(yuǎn)超過目標(biāo)值 0.2 毫升??雌饋磉@種泵的設(shè)計變異太大,需要在投入生產(chǎn)之前進(jìn)一步完善。從這里,我們看到模擬所帶來的好處。如果我們直接投入生產(chǎn),很可能會生產(chǎn)出太多被退貨的泵。借助 Monte Carlo 模擬,我們能夠解決所有這些問題,而不會因制造和測試數(shù)千個原型或過早投入生產(chǎn)而產(chǎn)生費(fèi)用。您可能想了解這些模擬結(jié)果是否站得住腳,不妨自己嘗試一下吧!運(yùn)行不同的模擬將導(dǎo)致輕微的變化,但每次的最終結(jié)果(流速變異量不可接受)都會保持一致。這就是 Monte Carlo 方法的強(qiáng)大之處。另一個可選步驟:參數(shù)優(yōu)化??了解到標(biāo)準(zhǔn)差過高非常有價值,但 Engage 和 Workspace 真正突出的地方在于它們能夠幫助改善狀況。這就是參數(shù)優(yōu)化的用武之地。讓我們看看第一個輸入:活塞直徑。平均值為 0.8,大部分?jǐn)?shù)據(jù)將接近該值,或者在平均值的一兩個標(biāo)準(zhǔn)差內(nèi)。但是,如果活塞直徑越小,流動效率越高,該怎么辦?參數(shù)優(yōu)化有助于我們回答這個問題。為了進(jìn)行參數(shù)優(yōu)化,我們需要為每個輸入指定搜索范圍。在本例中,為簡單起見,我指定的算法搜索范圍是 +/- 3 個標(biāo)準(zhǔn)差。然后,Engage 或 Workspace 將幫助我們?yōu)槊總€輸入找到要實現(xiàn)目標(biāo)(在本例中是減小標(biāo)準(zhǔn)差)的最佳設(shè)置。選擇合適的范圍至關(guān)重要;確保您輸入的整個范圍都可以運(yùn)行;如果找到的最佳解決方案無法在生產(chǎn)環(huán)境中復(fù)制,則毫無用處。如果您在 Minitab Statistical Software 中用過響應(yīng)優(yōu)化器,則原理類似。下面是我們的結(jié)果:基于以上結(jié)果,如果要減小標(biāo)準(zhǔn)差,則應(yīng)當(dāng)減小沖程長度和每分鐘沖程數(shù)。活塞直徑可以保持類似大小。請記住,Monte Carlo 模擬的關(guān)鍵之處在于,能夠在不構(gòu)建單個新原型或進(jìn)行新試驗的情況下找出所有這些結(jié)果。Monte Carlo 使用試驗設(shè)計 (DOE) 響應(yīng)方程??如果您不知道要使用什么方程,或者您正在嘗試模擬獨(dú)特過程的結(jié)果,該怎么辦?此時,我們可以將 Minitab Statistical Software 的設(shè)計試驗功能與 Engage 或 Workspace 的模擬功能相結(jié)合。一家電子制造商已指派您改進(jìn)其電極清潔操作,該操作為電鍍金屬部件做準(zhǔn)備。制造商通過電鍍在原材料上涂上一層不同的金屬,以實現(xiàn)所需的特性。電鍍不會附著在骯臟的表面上,因此該公司有一個連接到自動電鍍機(jī)的連續(xù)流電極清洗系統(tǒng)。傳送帶將每個部件浸入槽中,槽中的電壓通過部件傳送,從而對部件進(jìn)行清潔。如果清潔不充分,會導(dǎo)致平均粗糙度的均方根(簡稱 RMS)值太高以及表面光潔度較差。經(jīng)過正確清潔的部件具有光滑的表面和較低的 RMS。為了優(yōu)化該過程,可以調(diào)整兩個關(guān)鍵輸入:電壓 (Vdc) 和電流密度 (ASF)。對于電極清潔方法,Vdc 的典型工程限值為 3 至 12 伏。電流密度限值為 10 至 150 安培/平方英尺 (ASF)。??確定傳輸方程您不能針對該過程使用教材上的已知公式,但可以在 Minitab 中設(shè)置響應(yīng)曲面 DOE 以確定傳輸方程。響應(yīng)曲面 DOE 通常用于通過為“關(guān)鍵少數(shù)”可控因子尋找最佳設(shè)置來優(yōu)化響應(yīng)。在本例中,響應(yīng)將是部件在清潔后的表面質(zhì)量。要在 Minitab 中創(chuàng)建響應(yīng)曲面試驗,請選擇統(tǒng)計 > DOE > 響應(yīng)曲面 > 創(chuàng)建響應(yīng)曲面設(shè)計。由于我們有兩個因子(電壓 (Vdc) 和電流密度 (ASF)),因此我們將選擇試驗次數(shù)為 13 的雙因子中心復(fù)合設(shè)計。Minitab 創(chuàng)建設(shè)計試驗后,您需要執(zhí)行 13 次試驗、收集數(shù)據(jù)并記錄 13 個清潔后部件的表面粗糙度。通過 Minitab,可輕松分析 DOE 結(jié)果、簡化模型和使用殘差圖檢查假定。使用最終模型和 Minitab 的響應(yīng)優(yōu)化器,可以找到變量的最佳設(shè)置。在本例中,您將電壓設(shè)置為 7.74,將 ASF 設(shè)置為 77.8,所獲得的粗糙度值為 39.4。響應(yīng)曲面 DOE 為 Monte Carlo 模擬生成以下傳輸方程:粗糙度 = 957.8 ? 189.4(Vdc) ? 4.81(ASF) + 12.26(Vdc2) + 0.0309(ASF2)? 定義輸入?yún)?shù)現(xiàn)在,您可以為Monte Carlo模擬輸入設(shè)置參數(shù)定義,并將它們帶入Engage或Workspace 中。請注意,標(biāo)準(zhǔn)差必須已知或基于現(xiàn)有的過程知識進(jìn)行估計。這適用于所有 Monte Carlo 輸入。電壓呈正態(tài)分布,均值為 7.74 Vdc,標(biāo)準(zhǔn)差為 0.14 Vdc。每平方英尺安培數(shù) (ASF) 呈正態(tài)分布,均值為 77.8 ASF,標(biāo)準(zhǔn)差為 3 ASF。??在 Engage 或 Workspace 中設(shè)置模擬這與步驟 3 完全相同。單擊功能區(qū)中的插入 > Monte Carlo 模擬,添加您的輸入并定義其參數(shù),然后輸入您的模型。在本例中,如果您擁有最新版本的 Minitab,則可以單擊鼠標(biāo)右鍵,然后點(diǎn)擊發(fā)送到 Engage 或發(fā)送到 Minitab Workspace。如果您沒有,則可以從 Minitab 輸出中手動復(fù)制它并將其粘貼到 Engage 或 Workspace 的模型字段中。??模擬和分析過程輸出匯總表明,即使基礎(chǔ)輸入呈正態(tài)分布,RMS 粗糙度的分布也不是正態(tài)的。該匯總還顯示所有組件的傳輸變異導(dǎo)致標(biāo)準(zhǔn)差為 0.521,根據(jù)您掌握的過程知識判斷,這是不錯的過程結(jié)果。基于試驗次數(shù)僅為 13 的 DOE,我們可以確定在該過程中將看到的實際情況。同樣,由于這基于模擬數(shù)據(jù),您的答案會略有不同,但通常而言答案應(yīng)該是正確的。如有必要,我們可以查看參數(shù)優(yōu)化以微調(diào)我們的答案并找到最佳解決方案。(文章來源公眾號:Minitab)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
【方輝專欄】ARM嵌入式編譯器(五) 優(yōu)化循環(huán)的4種方法
2022-08-16
摘要: 本文主要對Arm Compiler 6編譯器的優(yōu)化循環(huán)對編寫優(yōu)化代碼的作用進(jìn)行介紹。關(guān)鍵字:Arm Compiler 6、編譯器、優(yōu)化循環(huán) 、循環(huán)展開、pragma、循環(huán)向量化、循環(huán)終止、無限循環(huán)、1. 循環(huán)展開循環(huán)執(zhí)行的時間取決于循環(huán)的次數(shù),循環(huán)中每次檢查是否進(jìn)行循環(huán)的條件會降低循環(huán)的性能。使用循環(huán)展開可以減少檢查條件的判斷次數(shù),但是展開循環(huán)就意味著增加代碼量。例如:在精確的時鐘周期循環(huán)中,可以使用#pragma unroll (n)來展開循環(huán)。“pragma”(編譯指示)僅在選擇優(yōu)化等級為-O2/-O3/-Ofast和-Omax時有效。 編譯指示的相關(guān)用法:#pragma unroll (n)展開n次循環(huán)#pragma unroll_completely展開所有循環(huán)注:雖然給出了循環(huán)展開的編譯指示,但Arm官方不建議使用,這樣會影響編譯器的展開優(yōu)化和其他循環(huán)優(yōu)化。不使用循環(huán)展開的代碼使用循環(huán)展開的代碼int countSetBits1(unsigned int n){ int bits = 0; while (n != 0) { if (n & 1) bits++; n >>= 1; } return bits;}int countSetBits2(unsigned int n){ int bits = 0; #pragma unroll (4) while (n != 0) { if (n & 1) bits++; n >>= 1; } return bits;}將代碼分別復(fù)制到file.c文件中,然后使用以下命令進(jìn)行編譯和反匯編。armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s不使用循環(huán)展開的匯編代碼使用循環(huán)展開的匯編代碼countSetBits1: mov r1, r0 mov r0, #0 cmp r1, #0 bxeq lr mov r2, #0 mov r0, #0.LBB0_1: and r3, r1, #1 cmp r2, r1, asr #1 add r0, r0, r3 lsr r3, r1, #1 mov r1, r3 bne .LBB0_1 bx lrcountSetBits2: mov r1, r0 mov r0, #0 cmp r1, #0 bxeq lr mov r2, #0 mov r0, #0LBB0_1: and r3, r1, #1 cmp r2, r1, asr #1 add r0, r0, r3 beq .LBB0_4@ BB#2: asr r3, r1, #1 cmp r2, r1, asr #2 and r3, r3, #1 add r0, r0, r3 asrne r3, r1, #2 andne r3, r3, #1 addne r0, r0, r3 cmpne r2, r1, asr #3 beq .LBB0_4@ BB#3: asr r3, r1, #3 cmp r2, r1, asr #4 and r3, r3, #1 add r0, r0, r3 asr r3, r1, #4 mov r1, r3 bne .LBB0_1.LBB0_4: bx lr可以看到展開循環(huán)時,代碼執(zhí)行會更快,但代碼量也更大。2. 循環(huán)向量化如果編譯的目標(biāo)含有SIMD單元,那么編譯器就可以使用向量引擎來優(yōu)化代碼的向量部分。在優(yōu)化等級為-O1,可以使用-fvectorize 來啟動優(yōu)化,而在-O2或更高等級時向量優(yōu)化是自動啟用。要使用向量優(yōu)化,在編寫代碼的時候需要將結(jié)構(gòu)體的成員放到同一個循環(huán)中,而不能使用獨(dú)立的循環(huán)。可以進(jìn)行SIMD優(yōu)化的代碼不能進(jìn)行SIMD優(yōu)化的代碼typedef struct tBuffer { int a; int b; int c;} tBuffer;tBuffer buffer[8];void DoubleBuffer1 (void){ int i; for (i=0; i<8; i++) { buffer[i].a *= 2; buffer[i].b *= 2; buffer[i].c *= 2; }}typedef struct tBuffer { int a; int b; int c;} tBuffer;tBuffer buffer[8];void DoubleBuffer2 (void){ int i; for (i=0; i<8; i++) buffer[i].a *= 2; for (i=0; i<8; i++) buffer[i].b *= 2; for (i=0; i<8; i++) buffer[i].c *= 2;}對于每個例子,將代碼分別復(fù)制到file.c文件中,然后使用以下命令進(jìn)行編譯和反匯編。armclang --target=arm-arm-none-eabi -march=armv8-a file.c -O2 -S -o file.s向量優(yōu)化后匯編代碼未進(jìn)行向量優(yōu)化的代碼DoubleBuffer1:.fnstart@ BB#0: movw r0, :lower16:buffer movt r0, :upper16:buffer vld1.64 {d16, d17}, [r0:128] mov r1, r0 vshl.i32 q8, q8, #1 vst1.32 {d16, d17}, [r1:128]! vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #32 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #48 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] add r1, r0, #64 add r0, r0, #80 vld1.64 {d16, d17}, [r1:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r1:128] vld1.64 {d16, d17}, [r0:128] vshl.i32 q8, q8, #1 vst1.64 {d16, d17}, [r0:128] bxlrDoubleBuffer2: .fnstart@ BB#0: movw r0, :lower16:buffer movt r0, :upper16:buffer ldr r1, [r0] lsl r1, r1, #1 str r1, [r0] ldr r1, [r0, #12] lsl r1, r1, #1 str r1, [r0, #12] ldr r1, [r0, #24] lsl r1, r1, #1 str r1, [r0, #24] ldr r1, [r0, #36] lsl r1, r1, #1 str r1, [r0, #36] ldr r1, [r0, #48] lsl r1, r1, #1 str r1, [r0, #48] ldr r1, [r0, #60] lsl r1, r1, #1 str r1, [r0, #60] ldr r1, [r0, #72] lsl r1, r1, #1 str r1, [r0, #72] ldr r1, [r0, #84] lsl r1, r1, #1 str r1, [r0, #84] ldr r1, [r0, #4] lsl r1, r1, #1 str r1, [r0, #4] ldr r1, [r0, #16] lsl r1, r1, #1 ... bx lr在64位運(yùn)行狀態(tài)下要避免編譯器使用SIMD向量優(yōu)化可以在-march或-mcpu后+nosimd;例如:armclang --target=aarch64-arm-none-eabi -march=armv8-a+nosimd -O2 file.c -S -o file.s在32位運(yùn)行狀態(tài)下要避免編譯器使用SIMD向量優(yōu)化,可以通過設(shè)置-mfpu=fp-armv8;例如:armclang --target=aarch32-arm-none-eabi -march=armv8-a -mfpu=fp-armv8 -O2 file.c -S -o file.s3. 循環(huán)終止在寫循環(huán)的時候如果編寫不當(dāng)會使得代碼的運(yùn)行效率降低和代碼量增大。建議使用以下的終止條件:1)使用變量類型為:unsigned int2)使用向下減少的計數(shù)方式,以減到0作為計數(shù)結(jié)束。3)使用簡單的終止條件。單獨(dú)或組合使用以上原則的終止條件,可以獲得更好的代碼大小或效率。例如:這是一個實現(xiàn)n!的計算程序。遞增循環(huán)遞減循環(huán)int fact1(int n){ int i, fact = 1; for (i = 1; i <= n; i++) fact *= i; return (fact);}int fact2(int n){ unsigned int i, fact = 1; for (i = n; i != 0; i--) fact *= i; return (fact);}用以下命令反匯編以下armclang -Os -S --target=arm-arm-none-eabi -march=armv8-a遞增循環(huán)遞減循環(huán)fact1: mov r1, r0 mov r0, #1 cmp r1, #1 bxlt lr mov r2, #0.LBB0_1: add r2, r2, #1 mul r0, r0, r2 cmp r1, r2 bne .LBB0_1 bx lrfact2: mov r1, r0 mov r0, #1 cmp r1, #0 bxeq lr.LBB1_1: mul r0, r0, r1 subs r1, r1, #1 bne .LBB1_1 bx lr對比反匯編代碼可以看出在遞減循環(huán)中用SUBS指令代替了遞增循環(huán)中ADD 和CMP兩條指令。這是因為SUBS指令會自動更新Z標(biāo)志。此外在遞減循環(huán)中變量n不必再循環(huán)的過程實時使用,從而減少了寄存器的數(shù)量。如果終止條件是一個函數(shù),則循環(huán)的每次都調(diào)用該函數(shù),這種情況下遞減的循環(huán)優(yōu)勢就更明顯了。例如:for (...; i < get_limit(); ...);說明:這種遞減循環(huán)計數(shù)的方式也適用于while-do 命令。4. 無限循環(huán)在某些情況下armclang會刪除一些編譯器認(rèn)為沒有影響的無限循環(huán),從而導(dǎo)致最終程序無法正常運(yùn)行。為確保無限循環(huán)的正確編譯執(zhí)行,ARM官方建議在無限循環(huán)中添加__arm volatile的聲明。這個聲明的目的是告訴編譯器刪除這個無限循環(huán)會有影響,不能被優(yōu)化刪除。在無限循環(huán)中,把處理器設(shè)置為低功耗模式是一個不錯的做法,當(dāng)有中斷或事件觸發(fā)時再回到正常模式。下面是一個包含__arm volatile聲明的無限循環(huán)例子:void infinite_loop(void) {while (1)??__asm volatile("wfe");}注:wfe(Wait for Event)是給處理器一個提示,使處理器進(jìn)入低功耗狀態(tài),直到事件或中斷觸發(fā)。來源:《Arm? Compiler for Embedded User Guide Version 6.18》+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
Ansys計劃于2027年實現(xiàn)減少15%碳排放量
2022-08-16
Ansys致力于通過謹(jǐn)慎衡量資源使用情況,減少其現(xiàn)有業(yè)務(wù)對環(huán)境與氣候的影響主要亮點(diǎn)作為仿真軟件領(lǐng)域的領(lǐng)導(dǎo)者,Ansys通過旨在減少資源浪費(fèi)的先進(jìn)仿真技術(shù),幫助用戶實現(xiàn)可持續(xù)發(fā)展目標(biāo)Ansys的環(huán)境戰(zhàn)略側(cè)重于總體減排和基于其全球基礎(chǔ)設(shè)施能源審計結(jié)果的項目實施Ansys計劃通過測量、分析和減少資源使用,來減少其業(yè)務(wù)對環(huán)境和氣候的影響。目標(biāo)是到2027年,與其2019年的基線相比,將scope 1和scope 2范疇的排放量減少15%。Ansys還通過仿真解決方案擴(kuò)大其承諾范圍,幫助用戶最大限度地減少材料浪費(fèi)、提高循環(huán)利用率、加速產(chǎn)品研發(fā)過程,并最大限度地減少物理原型制作。Ansys的環(huán)境戰(zhàn)略側(cè)重于減少總體排放,并繼續(xù)實施能源審計項目,包括加強(qiáng)照明與現(xiàn)場可再生能源。這是其降低排放、減少環(huán)境影響并優(yōu)化運(yùn)營的更廣泛舉措中的一部分。Ansys的環(huán)境戰(zhàn)略側(cè)重于減少總體排放,并繼續(xù)實施能源審計項目,包括加強(qiáng)照明與現(xiàn)場可再生能源,如太陽能電池板(圖為 Ansys 印度浦那廠區(qū))Ansys在繼續(xù)推進(jìn)其產(chǎn)品手印計劃(product handprint initiative)——記錄Ansys如何幫助客戶減少其對地球的影響。每個產(chǎn)品手印或應(yīng)用案例,都反映了Ansys在特定領(lǐng)域的工作成果,包括半導(dǎo)體、能源、數(shù)字孿生和航空航天領(lǐng)域。通過其在線系列紀(jì)錄片 “拯救地球(Earth Rescue)” ,Ansys展示了富有遠(yuǎn)見的客戶為應(yīng)對氣候變化在解決方案創(chuàng)新方面所做的努力。“拯救地球” 系列紀(jì)錄片的新劇集將于今年秋天發(fā)布。Ansys副總裁、法律總顧問兼秘書及ESG項目負(fù)責(zé)人Janet Lee表示:“通過我們的環(huán)境、社會和治理(ESG)計劃,Ansys致力于為投資者、客戶、員工和合作伙伴推動積極的創(chuàng)新發(fā)展。我們ESG計劃的根本理念是,通過產(chǎn)品促進(jìn)可持續(xù)發(fā)展、投資我們的員工、負(fù)責(zé)任地運(yùn)營以及與利益相關(guān)方合作——確保我們能夠在共同建設(shè)更美好未來的過程中,為企業(yè)和社區(qū)帶來長期價值。”(文章來源公眾號:Ansys)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
強(qiáng)力賦能汽車與AIoT,“星辰”處理器助攻本土芯片創(chuàng)新
2022-08-15
隨著人工智能的縱深發(fā)展,物聯(lián)網(wǎng)設(shè)備智能化對處理器的計算性能和計算效率提出了更高需求,而面向工業(yè)和車規(guī)的設(shè)備,則需要高可靠性的計算平臺來滿足安全性的要求。安謀科技自研“星辰”處理器自2019年首次發(fā)布,發(fā)展到今年7月發(fā)布的第二代產(chǎn)品,以其強(qiáng)勁的處理性能和對Arm?生態(tài)的延續(xù),在AIoT、汽車電子等領(lǐng)域被廣泛應(yīng)用,逐步構(gòu)建起豐富的生態(tài)系統(tǒng)。創(chuàng)新不止,“星辰”處理器賦能AIoT和汽車電子“星辰”處理器第一代產(chǎn)品STAR-MC1于2019年9月發(fā)布,次年6月,安謀科技推出了STAR-MC1的升級版本,該版本支持Armv8-M架構(gòu)中所有的特性,支持了可定制指令和協(xié)處理器接口,并進(jìn)一步拓展TrustZone的安全性,滿足了AIoT應(yīng)用對性能、功耗、安全的全面要求?!靶浅健?STAR-MC2處理器概覽2022年7月,安謀科技重磅推出“星辰”處理器第二代產(chǎn)品STAR-MC2?!靶浅健盨TAR-MC2基于最新Armv8.1-M架構(gòu)設(shè)計,是首個本土研發(fā)、支持ASIL-D級別功能安全的嵌入式處理器。相較于上一代產(chǎn)品,它不僅擁有更強(qiáng)的人工智能和數(shù)字信號處理能力以及更高的計算密度和能效比,還重點(diǎn)優(yōu)化了智能物聯(lián)網(wǎng)和車載設(shè)備所需的信息安全和功能安全。特別是在中國新能源智能化汽車產(chǎn)業(yè)大發(fā)展、汽車電氣架構(gòu)變革演化的大背景下,國產(chǎn)車規(guī)級芯片逐漸成為市場寵兒,“星辰”STAR-MC2處理器支持ASIL-D級別的功能安全設(shè)計,可大幅簡化芯片開發(fā)并加速符合車規(guī)級要求的認(rèn)證,助力國內(nèi)芯片廠商加快創(chuàng)新步伐 。目前,“星辰”STAR-MC2處理器已面向客戶正式交付,除了滿足國內(nèi)芯片廠商在智能物聯(lián)網(wǎng)、汽車電子等領(lǐng)域的前沿需求,安謀科技還正與Arm公司探討面向海外市場授權(quán)的計劃。授權(quán)客戶超過60家,“星辰”處理器助攻本土芯片創(chuàng)新推向市場三年以來,“星辰”處理器受到了眾多芯片廠商的廣泛歡迎。繼去年底破億以后,基于“星辰”處理器的芯片出貨已進(jìn)入快速成長期,授權(quán)客戶超過60家,集成項目多達(dá)70余項。搭載“星辰”處理器的通用控制器、互聯(lián)芯片、傳感器控制、汽車芯片、定位導(dǎo)航、存儲等芯片產(chǎn)品,被廣泛地應(yīng)用在智能家居、智慧交通、智能安防等領(lǐng)域,持續(xù)推動本土科技產(chǎn)業(yè)創(chuàng)新。其中,靈動微電子在今年上半年發(fā)布了搭載安謀科技“星辰”STAR-MC1處理器的全新高性能MM32F5微控制器系列。該系列MCU產(chǎn)品在性能、安全性以及連接性等方面均有優(yōu)異表現(xiàn),充分滿足AIoT市場多領(lǐng)域、多層次的豐富應(yīng)用場景需求。思澈科技在SF32LB55x系列MCU產(chǎn)品中采用了基于安謀科技“星辰”STAR-MC1處理器的雙核架構(gòu),不僅實現(xiàn)了240MHz的高性能處理能力,還通過48MHz超低功耗處理器兼顧了低功耗場景,并且集成了功耗和性能俱佳的低功耗藍(lán)牙5.2連接,全面滿足智能穿戴場景需求的同時也豐富了其他市場應(yīng)用。憶芯科技的高性能企業(yè)級SSD主控芯片STAR2000中,“星辰”處理器被用于閃存通道控制,使STAR2000完備地支持各類閃存接口協(xié)議并保證閃存訪問的效率,并在面積、功耗與性能上達(dá)到了出色的平衡。安謀科技立足本土創(chuàng)新,堅持以自研IP技術(shù)的創(chuàng)新發(fā)展與Arm IP相配合,為本土集成電路產(chǎn)業(yè)提供豐富的產(chǎn)品組合和解決方案。未來,包括“星辰”處理器在內(nèi)的自研IP產(chǎn)品矩陣,還將得到進(jìn)一步拓展和豐富,安謀科技將繼續(xù)攜手合作伙伴一起積極推動創(chuàng)新應(yīng)用的加速落地,賦能智能計算生態(tài)的構(gòu)建。聲明:Arm是Arm公司 (或其子公司)的注冊商標(biāo)。(文章來源公眾號:安謀科技)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
【技術(shù)博客】級聯(lián)電路中使用傳遞函數(shù)的蒙特卡羅分析
2022-08-12
作者:Zachariah Peterson專業(yè)電路設(shè)計人員在設(shè)計電路時不僅僅使用并聯(lián)和串聯(lián)的元件。構(gòu)建電路的一種方法是使用具有輸入和輸出端口的電路網(wǎng)絡(luò)。可以通過傳統(tǒng)方式(SPICE、手動等)分析每個網(wǎng)絡(luò)內(nèi)部發(fā)生的情況,但重要的是網(wǎng)絡(luò)將輸入電壓/電流對映射到輸出電壓/電流對。在數(shù)學(xué)上,這可以用傳遞函數(shù)進(jìn)行量化。在進(jìn)行高可靠性設(shè)計時,需要了解的一個重要因素是系統(tǒng)某一部分的方差如何傳播到系統(tǒng)的輸出。但這個因素有時并不直觀。它需要手動進(jìn)行一些數(shù)學(xué)推導(dǎo),或者需要一些仿真來確定系統(tǒng)中電氣行為的變化和波動。在本文中,我將展示如何使用蒙特卡羅仿真數(shù)據(jù)來檢查元件容差如何影響級聯(lián)電路網(wǎng)絡(luò)的電氣行為。數(shù)學(xué)涉及幾個常見的概率論要點(diǎn),但最終結(jié)果和所涉及的過程可以很容易在SPICE和Excel中實現(xiàn)。01理論:級聯(lián)網(wǎng)絡(luò)中的方差接下來我要介紹一個理論,目的是推導(dǎo)出表達(dá)式,該表達(dá)式將級聯(lián)網(wǎng)絡(luò)的輸出電壓變化定義為每個網(wǎng)絡(luò)中各個傳遞函數(shù)的變化。盡管還有溫度或隨機(jī)噪聲等情況,我們假定網(wǎng)絡(luò)傳遞函數(shù)的變異僅由元件容差造成。首先,讓我們來看下面所示的級聯(lián)網(wǎng)絡(luò)。在這個網(wǎng)絡(luò),我們考慮的方案中每個網(wǎng)絡(luò)有2個端口(輸入和輸出)。擴(kuò)展到3個端口稍顯復(fù)雜,但如果其他端口只是固定的功率輸入,我們?nèi)匀豢梢允褂么颂幩镜睦碚摗<壜?lián)中每個網(wǎng)絡(luò)都有一個傳遞函數(shù)H。網(wǎng)絡(luò)輸入和輸出之間的關(guān)系如方程式(1)所示。在這個方程式中,整個網(wǎng)絡(luò)的傳遞函數(shù)是每個網(wǎng)絡(luò)傳遞函數(shù)的乘積:方程式(1):級聯(lián)網(wǎng)絡(luò)傳遞函數(shù)定義。在方程式(1)中,我們的事實依據(jù)是,如上所示的串聯(lián)級聯(lián)網(wǎng)絡(luò)的總傳遞函數(shù)是所有單個傳遞函數(shù)的乘積。這個方程適用于構(gòu)建為二端口網(wǎng)絡(luò)的各種電路?,F(xiàn)在,我們可以檢查給定元件容差值的傳遞函數(shù)中的統(tǒng)計變化。02轉(zhuǎn)移函數(shù)的變量每個網(wǎng)絡(luò)中的元件容差將在每個網(wǎng)絡(luò)中的傳遞函數(shù)中產(chǎn)生一些變化。我們現(xiàn)在要定義傳遞函數(shù)中的方差。方程式(2):每個網(wǎng)絡(luò)的傳遞函數(shù)定義為常數(shù)部分(平均值)和隨機(jī)部分(標(biāo)準(zhǔn)差)。在方程式(2)中,Hi是一個隨機(jī)變量,它與網(wǎng)絡(luò)i(?Hi)傳遞函數(shù)的隨機(jī)變化有關(guān)。為了使該表達(dá)式為真,分布?Hi必須允許這種類型的線性轉(zhuǎn)換。一般來說,高斯分布和均勻分布都是如此,因此這在蒙特卡羅仿真中經(jīng)??紤]的兩種主要情況下都是有效的。我們沒有將?Hi與具有特定等式的元件公差聯(lián)系起來。但是,如果您知道電路網(wǎng)絡(luò)中所有元件的公差,則可以使用蒙特卡羅仿真來確定?Hi。只需為單個網(wǎng)絡(luò) Hi 進(jìn)行仿真,然后運(yùn)行蒙特卡羅仿真以確定傳遞函數(shù) ?Hi 的方差。03輸出電壓的變量現(xiàn)在我們已經(jīng)定義了單個傳遞函數(shù)的隨機(jī)變量,我們可以通過將公式(2)中所示的相同線性變換應(yīng)用到公式(1)中的傳遞函數(shù)的乘積來定義輸出電壓的變量。我將其寫成公式(3):公式(3): 輸出電壓的變量。這里,輸出電壓也有常數(shù)部分(平均值)和隨機(jī)部分(標(biāo)準(zhǔn)差)。換句話說,現(xiàn)在電壓是一個與隨機(jī)變量乘積相關(guān)的隨機(jī)變量。平均輸出電壓是右側(cè)的常數(shù)項:方程式(4):根據(jù)組成級聯(lián)網(wǎng)絡(luò)的傳遞函數(shù)平均值表示的平均輸出電壓。由此可知,傳遞函數(shù)的乘積是整個網(wǎng)絡(luò)傳遞函數(shù)的平均值:方程式(5):整個級聯(lián)網(wǎng)絡(luò)的傳遞函數(shù)平均值以級聯(lián)中各個網(wǎng)絡(luò)的平均傳遞函數(shù)值表示。如果我們展開方程式(3)中的乘積,將得到一個包含多個?Hi 項、Hmean 和輸出電壓方差的乘積的表達(dá)式。在這里,我們將采取近似值,因為任意?Hi項的乘積非常小,可以忽略不計??紤]到常見的元件公差,這是完全可以接受的,即使它們高達(dá) 20%。這里我就省略中間步驟,留給讀者自行運(yùn)算,最終可以得到以下方程式:方程式(6):以傳遞函數(shù)均值和隨機(jī)變化表示的輸出電壓。這看起來不像最終答案,但是方程式(6)確實告訴您在傳遞函數(shù)存在一些差異的情況下,您需要了解有關(guān)輸出電壓隨機(jī)行為的所有信息!在這里,我們根據(jù)隨機(jī)變量的線性組合(?Hi 項集)定義了一個隨機(jī)變量(Vout)。從多元概率論中,我們知道這個和的標(biāo)準(zhǔn)差等于?Hi 項的正交和。換句話說,Vout 的標(biāo)準(zhǔn)偏差為:方程式(7):輸出電壓基于傳遞函數(shù)方差的標(biāo)準(zhǔn)差。在這個方程式中,st.dev運(yùn)算指標(biāo)準(zhǔn)差,Var運(yùn)算指方差。使用方程式(7),我們可以開發(fā)一個仿真過程,將輸出電壓的變化與級聯(lián)網(wǎng)絡(luò)中傳遞函數(shù)的變化聯(lián)系起來。04過程現(xiàn)在我們可以開發(fā)一個根據(jù)傳遞函數(shù)方差來確定輸出電壓方差的過程。您的主要工具將是蒙特卡羅仿真和簡單的統(tǒng)計分析程序,如Excel:1. 將級聯(lián)網(wǎng)絡(luò)電路設(shè)計劃分為單獨(dú)的二端口網(wǎng)絡(luò)。2. 針對#1中的每個網(wǎng)絡(luò)運(yùn)行蒙特卡羅仿真。3. 獲取每個網(wǎng)絡(luò)的數(shù)據(jù)并計算每次蒙特卡羅運(yùn)行的傳遞函數(shù)。4. 計算每個網(wǎng)絡(luò)的傳遞函數(shù)結(jié)果的平均值。5. 計算#3中每個傳遞函數(shù)的標(biāo)準(zhǔn)差,得出每個網(wǎng)絡(luò)的?Hi。6. 使用來自#4、#5和方程式(7)的結(jié)果,得出輸出電壓的變化。根據(jù)您在此過程中使用的數(shù)據(jù)數(shù)量,您可以更進(jìn)一步,得出結(jié)果的置信區(qū)間。示例計算:為什么要在單個傳遞函數(shù)上進(jìn)行如此麻煩的運(yùn)算?讓我們來舉個例子,了解其中原因。假設(shè)您有三個具有不同元件容差(1%、5%和10%)的電路網(wǎng)絡(luò),并且您已經(jīng)完成了上述過程以確定每個網(wǎng)絡(luò)的傳遞函數(shù)的變化。假設(shè)這些元件公差值轉(zhuǎn)化為下圖中顯示的示例方差。使用方程式(7),我們可以預(yù)測這個假設(shè)網(wǎng)絡(luò)的輸出電壓變化:已知元件容差和傳遞函數(shù)變化的輸出電壓計算標(biāo)準(zhǔn)差示例。根據(jù)應(yīng)用,13.63%的容差可能過大。由此,我們可以判斷是否應(yīng)該降低某些元件組的容差?,F(xiàn)在假設(shè)輸出電壓變化對于我們的應(yīng)用來說是不可接受的,我們希望得到更小的變化。我們決定將 5% 的容差和 10% 的容差換成 1% 的容差。無需運(yùn)行任何新的仿真,我們就可以立即知道輸出變化是什么。對于線性電路,將容差降低 10 倍應(yīng)將傳遞函數(shù)方差降低 10 倍,對于其他降低因子,依此類推。然后我們會得到以下結(jié)果:針對較小的元件容差,修改輸出電壓計算的標(biāo)準(zhǔn)差。將輸出電壓從13.63%降低到2.23%,這一折減幅度非常大,而它所需要的只是一個簡單的元件交換。無需添加新電路,無需更改設(shè)計,只需選擇一些備用元件編號即可。這些類型的方差折減步驟正是您在精確仿真應(yīng)用中所需要的?,F(xiàn)在假設(shè)您想改變運(yùn)行頻率。在這種情況下,您可以使用從蒙特卡羅仿真中獲得的傳遞函數(shù)數(shù)據(jù),使用相同的計算來確定在這個新頻率下輸出電壓將如何變化。05總結(jié)與比較通過了解如何增加不同級聯(lián)網(wǎng)絡(luò)中的方差,得出輸出電壓的總方差,您可以執(zhí)行以下任意操作,直接確定輸出電壓將如何變化:將網(wǎng)絡(luò)中的元件換成容差更嚴(yán)格的元件把一個網(wǎng)絡(luò)換成一個完全不同的網(wǎng)絡(luò)在級聯(lián)中添加額外的網(wǎng)絡(luò)上面顯示的擾動方法僅適用于串聯(lián)級聯(lián)濾波器或放大器。如果您有并行網(wǎng)絡(luò),它們的傳遞函數(shù)相加,使上面顯示的方差分析更容易。此外,您可以使用這個想法來推導(dǎo)出串聯(lián)和并聯(lián)網(wǎng)絡(luò)組合的方差表達(dá)式。無論您如何安排電路網(wǎng)絡(luò)以獲得方差表達(dá)式,都適用上述相同的仿真和分析方法。如果您有興趣在Altium Designer ?內(nèi)運(yùn)行蒙特卡羅仿真和轉(zhuǎn)移函數(shù)計算,可以在原理圖編輯器中找到SPICE引擎中內(nèi)置的仿真工具。完成 PCB 并準(zhǔn)備好與合作者或制造商分享您的設(shè)計后,您可以通過 Altium 365? 平臺分享您完成的設(shè)計。設(shè)計和生產(chǎn)先進(jìn)電子產(chǎn)品所需的一切都集成在一個軟件包中。Altium 365僅僅是Altium Designer功能的冰山一角。立即開始免費(fèi)試用Altium Designer + Altium 365吧。(文章來源公眾號:Altium)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
報名 | Meet Qt技術(shù)沙龍南京站 (8月30日,星期二)
2022-08-11
感謝您長期以來對Qt的喜愛!誠邀您和其他專業(yè)Qt用戶參加8月30日(星期二)我們在南京舉辦的Meet Qt技術(shù)沙龍。資深Qt專家將向您介紹產(chǎn)品發(fā)展的最新動向和技術(shù),并與您分享經(jīng)典應(yīng)用案例,全力為您搭建一個干貨分享,靈感碰撞和自由交流的平臺。時間:8月30日(星期二) 13:00 - 17:45地點(diǎn):靠近地鐵河定橋站,請等待本微信公眾號推送的報名成功和參會通知活動議程:> 13:00 - 13:30 簽到> 13:30 - 13:45 Qt公司介紹> 13:45 - 14:15 Qt 6.2 LTS新特性及升級必要性> 14:15 - 14:45 Squish助力自動化跨平臺GUI代碼測試> 14:45 - 15:15 Qt for MCUs 2.2 LTS最新技術(shù)及生態(tài)合作> 15:15 - 15:45 茶歇+Demo演示> 15:45 - 16:30 Qt在汽車數(shù)字座艙的整體解決方案打造統(tǒng)一的3D用戶界面> 16:30 - 17:00 Qt對國產(chǎn)操作系統(tǒng)的支持及相關(guān)應(yīng)用案例> 17:00 - 17:30 Qt Design Studio 3.x全新交互升級、打造高階生產(chǎn)力> 17:30 - 17:45 抽獎問答本次活動報名將于8月25日截止。參會免費(fèi),但因場地有限,不接受現(xiàn)場報名。請掃描下面二維碼報名報名后,Qt工作人員將與您電話確認(rèn)參會資格,并將在活動前一天通過"Qt軟件"微信公眾號確認(rèn)地址等信息。謝謝!(文章來源公眾號:Qt軟件)+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→
【方輝專欄】ARM嵌入式編譯器(四) volatile 關(guān)鍵字對Arm Compiler 6編譯優(yōu)化的影響
2022-08-10
摘要: 本文主要對Arm Compiler 6編譯器的volatile 關(guān)鍵字對優(yōu)化的影響進(jìn)行介紹。關(guān)鍵字:Arm Compiler 6、編譯器、volatile 、優(yōu)化1. volatile關(guān)鍵字的意義當(dāng)一個變量使用volatile關(guān)鍵字進(jìn)行聲明時,意味著這個變量是可能隨時被外部進(jìn)行修改的。(例如操作系統(tǒng)、硬件)使用此聲明可以避免在編譯器優(yōu)化時,假設(shè)沒有被修改或被使用就進(jìn)行優(yōu)化處理。2. volatile關(guān)鍵字的使用volatile用于可能從定義變量的范圍之外修改的變量。例如,如果程序在某些計算中使用全局變量,編譯器會生成代碼以將變量的值加載到寄存器中以執(zhí)行該計算。如果隨后在另一個計算使用相同的全局變量,編譯器可能會直接使用寄存器的值,而不是從內(nèi)存重新加載到寄存器。這樣操作時因為編譯器優(yōu)化時認(rèn)為此變量不會被外部修改,但實際上對于內(nèi)存映射的外設(shè)是不正確的。因為此變量可能會被修改,直接使用上次寄存器值就會導(dǎo)致計算錯誤。讓我們看個實際的例子:不使用volatile聲明變量使用volatile聲明變量int buffer_full;int read_stream(void){ int count = 0; while (!buffer_full) { count++; } return count;}volatile int buffer_full;int read_stream(void){ int count = 0; while (!buffer_full) { count++; } return count;}這兩個例程都在循環(huán)中遞增一個計數(shù)器,直到狀態(tài)標(biāo)志buffer_full為真。buffer_full的狀態(tài)是隨程序流異步改變。左邊的例子沒有將變量聲明buffer_full為volatile,而右邊的進(jìn)行了聲明。下面顯示了兩個程序在編譯之后再進(jìn)行反匯編之后的代碼。使用的編譯命令均為:armclang --target=arm-arm-none-eabi -march=armv8-a -Os -S 反匯編結(jié)果如下表所示:不使用volatile聲明變量使用volatile聲明變量read_stream: movw r0, :lower16:buffer_full movt r0, :upper16:buffer_full ldr r1, [r0] mvn r0, #0.LBB0_1: add r0, r0, #1 cmp r1, #0 beq .LBB0_1 ;infinite loop bx lrread_stream: movw r1, :lower16:buffer_full mvn r0, #0 movt r1, :upper16:buffer_full.LBB1_1: ldr r2, [r1] ; buffer_full add r0, r0, #1 cmp r2, #0 beq .LBB1_1 bx lr在不使用volatile聲明的例子中,buffer_full沒有聲明為外部會改變的變量,因此編譯器假定它的值不能在程序之外被修改,因此優(yōu)化時省略了重新加載過程,就變成了一個無限循環(huán)。在使用volatile聲明的例子中,編譯器假定buffer_full可以在程序外部更改不執(zhí)行優(yōu)化。因此buffer_full的值每次重新加載到r2寄存器中。此時生成的匯編代碼是正確的。3. volatile關(guān)鍵字對編譯器優(yōu)化的影響當(dāng)變量可能隨時被外部進(jìn)行修改時,如果編譯器假定其值不能從定義它的范圍之外修改。因此,編譯器可能會執(zhí)行不必要的優(yōu)化。這個問題可能有以下兩種表現(xiàn)方式:1)輪詢時,代碼可能會陷入死循環(huán)。2)可能會導(dǎo)致刪除故意延時的代碼。來源:《Arm? Compiler for Embedded User Guide Version 6.18》+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++關(guān)于億道電子億道電子技術(shù)有限公司(英文名稱:Emdoor Electronics Technology Co.,Ltd)是國內(nèi)資深的研發(fā)工具軟件提供商,公司成立于 2002 年,面向中國廣大的制造業(yè)客戶提供研發(fā)、設(shè)計、管理過程中使用的各種軟件開發(fā)工具,致力于幫助客戶提高研發(fā)管理效率、縮短產(chǎn)品設(shè)計周期,提升產(chǎn)品可靠性。20 年來,先后與 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立戰(zhàn)略合作伙伴關(guān)系,并作為他們在中國區(qū)的主要分銷合作伙伴服務(wù)了數(shù)千家中國本土客戶,為客戶提供從芯片級開發(fā)工具、EDA 設(shè)計工具、軟件編譯以及測試工具、結(jié)構(gòu)設(shè)計工具、仿真工具、電氣設(shè)計工具、以及嵌入式 GUI 工具等等。億道電子憑借多年的經(jīng)驗積累,真正的幫助客戶實現(xiàn)了讓研發(fā)更簡單、更可靠、更高效的目標(biāo)。歡迎關(guān)注“億道電子”公眾號了解更多研發(fā)工具軟件知識
查看更多→