Wednesday, December 18, 2013

Shortcut for common usage

 

To Manually Create Shortcuts

Environment Variables

%windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables

device manager

devmgmt.msc

RunDll32.exe devmgr.dll DeviceManager_Execute

%windir%\System32\rundll32.exe shell32.dll,Control_RunDLL hdwwiz.cpl

Monday, November 25, 2013

SourceInsight [H]

 

讓Source Insight顯示完整路徑名稱

Reference

[1]http://joseph0425.blogspot.tw/2007/03/source-insight.html

Putty [Q]garbled

無緣無故出現了一堆亂碼,測試了許久才找出問題。

有時候莫名其妙的問題真的會讓人束手無策。

原來其實是設定上有所不同,因為Serial Port同步問題是他最重要的部分。

這次是Parity的問題[1],這個設定主要是做資料確認。

有三個選項 odd, even和none。

簡單來說就是如果設定odd傳送出去的資料就必須為奇數,會透過Parity bit來做調整補償。

image

Reference

[1]http://en.wikipedia.org/wiki/Parity_bit

Sunday, November 17, 2013

ANSI escape code

printf是寫C語言程式Debug的主要方式,
但有時候列印出來時資料過長或是顯示相似,
其實這些都會造成閱讀時的困難。
其實,列印時可以用顏色來區分。
SGR (Select Graphic Rendition) parameterst
常看到的定義如下:
#define DBGLOG_NONE    "\x1b[00m"
#define DBGLOG_GREEN   "\x1b[32m"
#define DBGLOG_CYAN    "\x1b[36m"
#define DBGLOG_PURPLE  "\x1b[35m"
#define DBGLOG_RED     "\x1b[31m"
#define DBGLOG_YELLOW  "\x1b[33m"
依照DBGLOG_GREEN為例子,
\x1b[ 是啟用CSI的意思,
至於30代表所引值可以參考[1]以m做結尾。
此外,to get bold red, use \x1b[31;1m.
簡單來說就是執行31和1的索引值,對照表格可以得到bold red的顏色。
這樣就可以讓printf增加一些色彩。

Reference
[1]http://en.wikipedia.org/wiki/ANSI_escape_code#Colors
[2]http://stackoverflow.com/questions/3219393/stdlib-and-colored-output-in-c

Thursday, November 14, 2013

計算機 Calculator

現在只能說工具軟體真的是越來越多功能,但想想其實有時候真的是畫蛇添足。

往往便利的工具只會造成使用者有了錯誤的迷思,或許不斷重複無趣的工作需要好的工具。

但在開發過程中,不好的工具才會讓工程師有更好的思考邏輯吧。

說了一大篇,其實只是想要分享一下我們常見的window的附屬工具"計算機"。

常常看到有個「MC、MR、M-、M+」

這有甚麼用呢?我看了很多說明,[1]是我看過最好的說明,就節錄有用的部分。

M+:記憶當前數字,「加入」累加數字當中。

M-:記憶當前數字,以負數的形式「加入」累加數字當中。

               換句話說,就是把總數扣除當前數字的意思。

MC:Memory Clean的意思,也就是將目前記憶的數字「歸零」。

MR:Memory Recall的意思,將當前計算出來的數字呈現出來。

MS:無視目前記憶多少數字,直接以當前數字取代記憶中的數字。

MU(Mark up or Mark down)、GT(General Total)、CE(Current Empty)

原文網址: 計算機「MC、MR、M-、M+」做啥用?民眾:20年來都不知 | ETtoday生活新聞 | ETtoday 新聞雲 http://www.ettoday.net/news/20120530/51013.htm#ixzz2kgGi8Iwa
Follow us: @ETtodaynet on Twitter | ETtoday on Facebook

Reference

[1]http://www.ettoday.net/news/20120530/51013.htm

Monday, November 11, 2013

Mail Term

常常跟國外的人寫信時,會看到一些很簡短的縮寫,這裡做一些整理。

CC : Carbon Copy

FYI : For Your Information

ASAP : As Soon As Possible

Mac Setting

How to change default browser?

 

Reference 

[1] http://www.wikihow.com/Change-the-Default-Web-Browser-in-Mac-OS-X

Thursday, November 7, 2013

Pipelined

這在設計組合語言(Assembly Code)是一個另一項觀念,通常我們C語言去撰寫程式再透過Compilar編譯成我們所需要的Machine Code,Compilar都將這些觀念給包裝起來了。

主要的概念精神在於instruction彼此之間在控制硬體時會相互影響。

以RISC pipeline最基本的五個間段為

IF –> ID –> EX –> MEM –> WB

Instruction fetch

Decode

Execute

Memory access

Write Back

這彼此之間會因為硬體設計不同而有所互相影響,

例如Data Hazard問題,在一段時間內不該使用同一個資源,這樣資料同步會出現問題。

簡單來說,第一秒下指令Write寫入資料D到位置A,馬上又在下一秒使用Read去A位置拿資料,但D的值要等到第三秒才能完整的寫入到A位置,此時錯誤的使用Read, Write會得到不預期的錯誤資料。

設計不當會造成下述三個問題,之後有機會再細部陳述這些問題。

Structure Hazards

Data Hazards

Control Hazards

Reference

http://en.wikipedia.org/wiki/Classic_RISC_pipeline

http://www.cs.iastate.edu/~prabhu/Tutorial/PIPELINE/hazards.html

Sinusoid (sine wave)

這裡稍微整理一下思緒,自己對於公式的了解,以及該如何在程式上撰寫。
首先,這裡用C語言來做個驗證,之前是用過Matlab不過時間有點久遠,卻忘了做下筆記。
C語言有提供sin()函式,範圍值 1 ~ -1符合sinusoid的條件。
函式的argument則是填入弳度量(radian measure),跟我們知道的角度(phrase)有些不同。
轉換公式為
弳度量 = 角度量(phrase) * pi / 180
pi = 3.14159285
我們都知道角度量範圍值 0 ~ 360度,之後就是一個循環,這是一個以正旋波為主軸的表示方式。
但場景如果轉換成以時間單位為主軸那該如何表示呢?
就把角度量用時間來區分開來,所以公式就變成
(t(now) * 360 / t) * (pi / 180) 簡化一下,t(now) * 2 * pi / t =  2 * pi * f * t(now)
於是就成為了我們常見的[1]
2 * pi * f * t = wt

Reference
[1]http://en.wikipedia.org/wiki/Sine_wave
http://tw.knowledge.yahoo.com/question/question?qid=1510101414866

Microsoft Visual Studio 2005

程式暫停(主要是讓設計可以觀察結果,或是等待下個操作)
在一般的command prompt可以加入這行指令。
system(“pause”);
在MVS環境下,Ctrl + F5就可以得到相同效果。
Reference
http://stackoverflow.com/questions/193469/how-to-make-visual-studio-pause-after-executing-a-console-app-in-debug-mode

Wednesday, November 6, 2013

Notepad++

 

HEX editor in plug in module

dB (Decibel)

 

簡單來說這是能量的比值表示法[1]。

關鍵詞會鎖定在gain/attenuation

amplitude跟power差一個次方。

常見3dB(2), 6dB(4), 20dB(100)

 

我們都知道C語言math.h[8]當中會有log(), log2(), log10()函式可以使用,

而這些函式是如何設計實現呢?

或換言之,在嵌入式系統中,我們該如何在有限的資源裡轉換dB值呢?

這都是一門技術。

這裡先簡單帶過之後有時間再做詳細介紹。

主要是透過Taylor expansion[4]和logarithm rule[3],透過一些誤差犧牲而換取有效的得到轉換值所產生的。

自然函數能利用Taylor expansion來呈現,若要轉換基底就透過一些對數規則[3]做轉換。

透過觀察[4]我們能知道Taylor expansion對於自然對數的呈現,若N級數很大的情況下在-1 ~ 1之間較為精準,若級數較小時-0.5 ~ 0.5較為精確。

 

Reference

[1]http://en.wikipedia.org/wiki/Decibel

http://en.wikipedia.org/wiki/Logarithm

[3]http://www.rapidtables.com/math/algebra/Logarithm.htm

[4]http://en.wikipedia.org/wiki/Taylor_series

http://en.wikipedia.org/wiki/Common_logarithm

[6]http://mathworld.wolfram.com/NaturalLogarithm.html

http://en.wikipedia.org/wiki/Natural_logarithm_of_2

[8]http://www.codecogs.com/library/computing/c/math.h/log.php

http://stackoverflow.com/questions/15967240/fastest-implementation-of-log2int-and-log2float

http://stackoverflow.com/questions/9411823/fast-log2float-x-implementation-c

Sunday, November 3, 2013

gcc for Window

GCC是一套好用的編譯器,想要設計簡單的程式用這就對了~~
Download mingw-get and simply issue:
mingw-get install gcc.

See the Getting Started page.
Reference

http://stackoverflow.com/questions/6394755/how-to-install-gcc-on-windows-7-machine

Wednesday, October 23, 2013

硬體製造測試流程

 

ATE(Auto Test Equipments), known as Device Under Test(DUT), Unit Under Test(UUT)

分兩個階段

  1. die
  2. package

System Level Test(SLT)

 

Reference

http://en.wikipedia.org/wiki/Automatic_test_equipment

http://en.wikipedia.org/wiki/System_testing

音響測試

white noise

雜音涵蓋全頻域猶如白色一樣。

pink noise

白色+紅色 = 粉紅

紅色頻率 = 電器產品

Reference:

http://en.wikipedia.org/wiki/Pink_noise

Tuesday, October 22, 2013

Bluetooth for Car Stereo of vw polo

最近想要用手機與自己的愛車VW polo的原廠音響做連線,看看可不可以免持聽筒或是音樂的傳播,但聽到只出張嘴巴的sales說原配沒有這樣的支援,除非要貼錢換更好的台製音響才能有這樣的功能。

於是就開始了一連串的研究,首先,如果有跟我一樣是VW的車主,可以參考下面的網址。

http://my.vw.com/2013-passat/technology/bluetooth-faqs

簡單來說,把音響打開,bluetooth也打開搜尋連線,應該會有類似的裝置名稱(EL-540-CON2)跑出,應該每台車子有不同的名稱,接下來把密碼"0000"打進去。就OK了~~只是第一次連線會比較久一點,設定好之後就可以使用免持聽筒的功能囉。

這時候,大家一定在想如果可以使用免持聽通那是不是就可以傳音樂了呢?

答案是可能要看音響的規格,依我的來說只有支援Hands-Free Profile (HFP)。

所以說並沒有正規的方式傳遞音樂,如果硬是要傳也是可以,但音質就大大折扣。

如果有支援Advanced Audio Distribution Profile (A2DP)那就可聽比較好的音樂囉。

至於,Audio/Video Remote Control Profile (AVRCP)是用來控制設備的協定。

因為我是用iphone的手機,所以要找到用來破壞協定方式傳定音樂的相關軟體,難呀。

有也是要付費

A2DPblocker

或是破解手機,

Bluetooth Mono SBSettings Toggle

但其他系統的APP應該就比較容易些。

這邊有兩個軟體給各位參考一下。

BTMono

BTHeadSet

Reference

http://en.wikipedia.org/wiki/Bluetooth_profile

Number Representing

Fix-point arithmetic

Floating point unit(FPU)

    • Formant
      1. sign
      2. mantissa
      3. exponent
    • IEEE754

Reference

http://en.wikipedia.org/wiki/Fixed-point_arithmetic

http://en.wikipedia.org/wiki/Floating_point

Monday, October 21, 2013

Data Segment

 

The computer program memory is organized into the following:

  1. Data Segment (Data + BSS + Heap)
    1. data
      • global, static variable had initialized
      • read-write area
      • read-only area for const (.rodata)
    2. BBS
      • uninitialized data
    3. Heap
      • malloc
  2. Stack
    • call function
  3. Code segment

 

Reference:

http://en.wikipedia.org/wiki/Data_segment

Friday, May 17, 2013

UEFI – Phrase SEC

 

SEC是UEFI最早啟動的階段,也就是當按下Power-on後的第一件工作,

其中有三個主要的工作,分別為

1)與其他硬體確認開機BIOS的安全性,Core Root of Trust Module(CRTM)。

這必須要透過第三方硬體支援來確認BIOS本身的安全性,接者BIOS本身還會有機制繼續驗證下去,就有如一環接者一環,chain of trust。

2)決定CPU Operation Mode。

CPU因為相容性的問題,都會先用16bit width做處理,此階段可以先將16bit轉換成可支援的32bit, 64bit…,來提升開機速度。

3)暫時記憶體的設立。

在這項工作中,SEC會找尋適合的記憶體,來取代位於南僑所控制的ROM記憶體,來增加執行速度。因此,會利用SRAM, CPU Cache等等來載入初始的BFV,其容量都必須大於4KB<1><2>。

Reference

<1>http://www.techbang.com/posts/4359

<2>http://en.wikipedia.org/wiki/Real_mode

Thursday, May 9, 2013

State Machine ? Function Point !!!

不管中文或是英文都有很多文章在介紹這兩個理論的概念,在這裡是想用這兩種概念將程式寫的更容易維護和設計。

State Machine(SM)第一次看到這個名詞是我在研讀HMM的時後(有機會將這有趣的數學分享給大家),簡單來說就是狀態之間的轉移,數學上是以"機率"作為轉移依據,而在程式上是以"條件式"來決定。條件式在C語言裡不外乎使用 if / switch,

先來簡單的狀態序列<2>,配上常見的寫法我想會是~~

image

if (S=1) S = 2; do event S1

elseif (S=2) x = 3; do evnet S2

elseif (S=3) do event S3

或是用switch case…,想要讓狀態機多活一下,很直覺得就給它加個do while。這樣就大功告成了!?

小小狀態機或許這樣應該足夠了,但現在隨著硬體技術隨著<1>Moore定律的規範下不斷進步,其實軟體這裡也不會閒著,狀態機也是龐大的可怕,那這樣的寫法好maintain嗎? 我想這部分可以等到各位在工作時可以驗證一下,這裡是討論程式概念。

要怎麼做才直接且容易維護呢? 首先我們仔細想想,上述概念的寫法應該是這樣的SM。

image

首先,我想引用<3><4>來解釋SM table的設計,這方法可以用來紀錄下一個狀態位置。

CurrentState = SMTable[CurrentState ] ;

很好,有了這個機制我們的架構就變成這樣了!

image

這是俗稱的多此一舉,脫褲子放屁? 問題出在哪呢? 因為每個狀態有屬於自己的函式要處理,如果能跟著CurrentState這index改變,那就兩全其美了。所以就有function point<5-7>存在的必要性。

此外,要寫好貼切的function point,我想宣告的問題可是非常重要,如#define, typedef, 宣告型態<8>...

這是我簡單寫一個上面所形容的狀態機(source code)分享給各位,希望能讓各位產生一絲絲的共鳴。

<Reference>

<1>http://en.wikipedia.org/wiki/Moore's_law

<2>http://www.swarthmore.edu/NatSci/echeeve1/Class/e15/E15Lab2/CStateMachines/CStateMachines.html

<3>http://www.conman.org/projects/essays/states.html

<4>http://johnsantic.com/comp/state.html

<5>http://stackoverflow.com/questions/1591361/understanding-typedefs-for-function-pointers-in-c-examples-hints-and-tips-ple

<6>http://stackoverflow.com/questions/133214/is-there-a-typical-state-machine-implementation-pattern

<7>http://www.newty.de/fpt/intro.html#what

<8>http://www.devx.com/tips/Tip/13829

Monday, May 6, 2013

UEFI Coding Tips in SourceInsight

 

我想有在寫大型程式的工程師應該是有聽過SourceInsight(SI)這套軟體吧!!

今天我遇到一個小小問題,也找到問題點就分享給大家~~

使用SI的優勢是在於UEFI定義了很多的結構,我們在使用結構SI都會動態跑出關鍵的變數名稱,這方便設計者不用特地去記一些變數名稱。

不過,在我們設一個程式時會傳入EFI_SYSTEM_TABLE變數,

EFI_STATUS
sample(
  IN EFI_HANDLE                                 ImageHandle,
  IN EFI_SYSTEM_TABLE                      *SystemTable
  )

在之前都會先宣告EFI_APPLICATION_ENTRY_POINT(sample)或EFI DRIVER ENTRY POINT(sample),然而此次的宣告就導致SI無法判別此變數,原因是在於這兩個宣告是指向空集合。

此時,我會將宣告暫時註解起來以方便使用變數*SystemTable,其實<1>中也提到,這宣告對於模擬機器有很大的影響,但對於實際的硬體上並無差別,只是為了可讀性及好的習慣所以才多了這一行指令。

<Reference>

<1>http://biosengineer.blogspot.tw/2010/07/efidriverentrypoint.html

“Hello World” in UEFI (2)

 

"哈囉"時間就這樣愉快的過去了嗎?

雖然常常聽到一句俗語"好奇心害死一隻貓"。

但我的好奇心時常作祟,就會很想了解萬事的根本。

於是,開始反問自己一些問題。

“Hello World” 是怎麼秀出來的呢?

Print (L"Hello World\r\n");

這段指令就好像我們C語言常見的printf一樣,只是UEFI提供了print這個函式,而放在(protocol\print)的資料夾內。

但我卻想要用UEFI的概念寫出一樣的功能,該如何做呢?

因為我想這會是一個好時機更了解整個UEFI的概念。其實,UEFI提供了一個protocol handle服務Console Support,它可以幫助我們簡單的完成這項功能,概念顯得更貼近UEFI的架構。這指令為

SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World\n\r");

protocol handle的名字為Txtout,可能會因為定義不同而有不同的名子。不過也可以從公定的GUID確切的找到這個protocol。

#define EFI_SIMPLE_TEXT_OUT_PROTOCOL_GUID \
  { 0x387477c2, 0x69c7, 0x11d2, 0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b }

Shell>guid –b

image

image

至於這protocol怎麼去控制硬體,這就會是一個很大的工程,這之中會跟組語有些關聯。遇到大問題這時還是要學會取捨,把大方向抓住,了解目前我們需要了解的就夠了。

Thursday, May 2, 2013

UEFI Build Code Tips

 

我們在Build Code的時候會產生幾個檔案,這些檔案會被壓縮到UEFI系統裡去。

  1. xxx.efi (EFI系統內的執行檔)
  2. xxx.dll (Dynamic-Link Library(如果觀念和win系統一樣的話,這應該就是動態連結庫)
  3. xxx.lib (Library)
  4. xxx.pdb (Program DeBug(我猜,這應該是Debug所需要的資料庫)
  5. xxx.exp

它們都存放在下方路徑中,當然這跟Compiler的路徑設定有關。

  • D:\Firmware\Platform\IntelSsg\Nt32\Build\IA32

[Tips]若程式之間並無關聯性,若不需要某項程式就來這砍掉,也不用大費周章的使用nmake clear。

Reference

<1>http://bbs.dianyuan.com/bbs/u/39/1141988403.pdf

<2>http://en.wikipedia.org/wiki/Dynamic-link_library

<3>http://en.wikipedia.org/wiki/Library_(computer_science)

UEFI Boot Services vs Runtime Services

 

      在之前的文章中有提到UEFI的系統大概可以區分兩個階段,起初是Boot Service再來就是Runtime Service(RS)如紅框所涵蓋的程序都可以稱為RS。

image

區分這兩個Service最重要的一項轉類點函數為

  • ExitBootServices()

讓我們稍微的Trace一下Code來感覺一下。

%%% In My Case (Maybe Different source code has signification procedure for costumer) %%%

發現ExitBootServices()會處在universal\acpi\acpifpdtsupport\acpifpdtsupport.c檔案中,

acpifpdtsupport(ACPI Firmware Performance Data Table Support)

經過一番波折後發現,acpifpdtsupport.inf檔案會發現有inclulde AcpiFPDTSupport.dxs

透過.dxs(Dependency eXpreSsion)找出了觸發的條件為

  1. EFI_BOOT_SCRIPT_SAVE_PROTOCOL_GUID
  2. EFI_ACPI_SUPPORT_GUID
  3. EFI_CPU_ARCH_PROTOCOL_GUID

以上三項Protocols啟動後便會觸發

  • InitailizeAcpiFPDTSupport()

 

透過上敘的過程中會發現.inf和.dxs對於UEFI的重要性。

The relationship of the devices and drivers in UEFI

Shell> devices

透過這個指令可以觀察目前UEFI內有幾個硬體被控制著。也提供不少的訊息給設計者,如

TYPE是說明此設備是

[R] Root Controller

[B] Bus Controller

[D] Device Controller

image

#P(Parent) 和#C(Child)為繼承關係,我們也可以用下一個指令來觀察。

Shell>devtree

很清楚發現若

#P = - 為主要的設備起始端。

#C = Number 代表此設備將會給其他設備所使用。

image

再來我們把重點放在驅動程式上面,一個Device可以備好幾個Drivers所使用,我們可從

#D(Driver)來觀察,但重點來了~~~我們要如何得知是哪些Drivers所使用。

image

Shell> dh –d <CTRL>

這指令就可以好好觀察每個控制元的內容。

image

Wednesday, May 1, 2013

UEFI Handle Database

 

Handle的類型主要可以區分為這三種

  • executable image (drivers, application) – Agent Handles
  • devices (network controller, hard drive partitions) – Controller Handles
  • services (decompression, EBC virtual machine) – Service Handles

image

一個完整的Handle Database可以是很多個Handles所組成。

image

而一個Handle的架構為GUID,Protocol Interface,Private Data。

image

在Shelll中我們可以觀察handles的狀況。

Shell> dh –b

image

Reference

<1> Beyond BIOS Second Version

<2> Shell Command Menual

Monday, April 29, 2013

“Hello World” in UEFI

 

又到了研究者最喜歡的"哈囉"時間,這只是確認開發環境是否正常。因為開發環境常常應該連結位置環境變數等等因素而導致無法正確建立,所以才要用簡單的程式來讓問題更簡單。

由於每個編譯環境會因公司,版本而有所不同,而導致設定方式有所不同。所以就不細節加入Step by Step的說明,其實只要照著Spec走應該是沒有太大問題。不過我想分享的就是在編譯過程中都必須加入.inf檔,我想是為了要讓EFI這系統留給空間位置給你所設計出來的Module,之所以為甚麼要額外的檔案,不用compiler來幫忙取代手工打字,這謎團可能等之後更加了解過後再加以分析。

image

有了Source Code和.inf,再來就是靠Makefile來編出我們所要的Image就大功告成了。

image

最後大家看到的畫面應該是長這樣吧!!如果在正常下應該會有紅色框框的訊息,或多或少有的會有fs1,fs2...,這部分我想是系統儲存.efi檔案的地方吧。

image

Reference

<1>http://www.intel.com/content/dam/doc/guide/uefi-driver-compiling-using-uefi-development-kit-guide.pdf

UEFI Overview from Rookie

 

而UEFI(Unified Extensible Firmware Interface)演進過程簡單來說就是2005從Intel所釋出的EFI而衍生而來,主要是希望能夠取代 BIOS的呆版功能和一些限制,就有如<3>所提到IA32架搆的CPU只能訪問1MB的基本內存,影響了程序員的創造性。同時,各種板卡上的BIOS在映射到系統內存中的時候,受到128Kbytes的大小***。這使得一台計算機不能安裝太多的板卡,否則他們的BIOS的容量將很容易突破128Kbytes。

Intel Platform Innovation Framework for EFI,讓整個EFI流程非常明確,在設計上真可以說是如虎添翼,當然一好必有一弊,這樣的一套規範相對編譯出來的Machine Code一定很肥大。在硬體層面來說,需要的硬體資源相對需要提昇許多,但已研發角度來說,可說是大幅減少撰寫時間,我想這省下可是在這一大筆的專業人事成本上,這取捨之間,以長遠的角度來看或許UEFI有它存在的必要性。

image

在大略的掃過UEFI的架構後,它真的可以說是迷你型的OS。如上圖所示,一個EFI image涵蓋了Driver和Application,此外也有類似排程的Event功能, 想想這三個功能就有點OS的味道了。

image

UEFI Architecture提供一個Handle database的機制來供給UEFI System Table使用。

UEFI System Table

  • UEFI Boot Services
  • UEFI Runtime Services(RS)
  • Protocol Services

Protocol負責提供功能函式給主要的兩個程序(UEFI Boot和UEFI Runtime)所使用。

image

UEFI主要是用Framework的概念下去設計,目的是為了區分工作內容,讓設計者能夠更明確的排除問題且加速發展速度。而它主要區分六大步驟,分別為SEC(Security),PEI(Pre-EFI Initialization),DXE(Driver Execution Envronment),BDS(Boot Device Seletction/ BD Service),TSL(Transient System Load),RT(Run Time)。

我們可以在Shell下這段指令,讓我們能更加了解概念。Shell phase已經是透過BDS所選擇出的小型OS,使用者可以透過console來控制或查詢整個UEFI系統狀況。

Shell> dp –d

image_thumb1

Reference

<1>http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

<2>http://blog.yam.com/wttmama/article/33619399

<3>http://stenlyho.blogspot.tw/2008/10/efi.html

<4>http://www.intel.com/content/www/us/en/architecture-and-technology/unified-extensible-firmware-interface/efi-homepage-general-technology.html

Thursday, April 25, 2013

BIOS Overview from Rookie

 

最近為了能夠快速進入BIOS領域,一直看相關的資料來加強自己,慢慢的了解整個電腦核心系統的架構,也想透過這些架構來幫BIOS在我心中好好定位一下,首先我們先從大方下手在一一細分。

何謂電腦(PC, Hardware, Platform, Motherboard…)?

現在我將它定義為硬體設備,至於硬體製成那又是遠遠的一回事。

何謂系統(OS, System, Kernel…)?

一堆來自世界各地的硬體通通擺在一起,那主機殼就好像地球一樣,每個硬體說著屬於自己的思考和語言,總該有個人(Xmerican??)跳出來維護世界的和平吧?

何謂軟體(Softeare, APP)?

它是一個很好的翻譯機讓使用者避開那些繁雜的命令。例如你若只想知道1+1=2,應該不會想知道暫存器之間如何變化吧。現在APP已經在21世紀火紅起來,我想它應該是最好解釋軟體的統稱。

那我該把BIOS放哪呢?

image

就我目前的認知裡,它就是系統與硬體之間溝通協調的橋樑。上圖就是我將人類使用電腦的流程概念圖。當然這只是想要將許多事件大概合理的區分,但往往一旦你深入圖中任何區塊之中,該如何界定你所在的位置,那就像用Google Map想要定位出百分百的位置一樣,不是不可能但需要一些運氣。

<Reference>

<1>http://en.wikipedia.org/wiki/BIOS

Wednesday, April 24, 2013

ACPI Overview from Rookie

 

目前對於BIOS一知半解的我,在短短的幾天搜尋許多資料,我想將初步的概念分享出來,不但可以整目前理思緒,且能在深入主題後分辨到底是否與當初認知有所差異。

ACPI(Advenced Configuration Power Interface)取代APM(Advanced Power Management)

提供給OSPM(Operation System Power Managerment)準則(standard interface)用函數來控制,主要規範的範圍我分為四大區塊

1)Power Management(System, Device, Processor)

2)Event(Plug and Play, System Event)

3)Environment Management(Battery, Thermal)

4)Communication(Embedde Controller, SMBus Controllor)

而OSPM就是只要tuning出好的QoS(Quality of Service)給使用者,但要達成這樣的最佳化效果那ACPI則要成為絕對領域,其他相關的配角(Hardware, Firmware, non-OS Softeare)不能涉及到以上四到區塊。讓OSPM做好大哥的角色,不過,OSPM也有失去控制權的時候,那就是在Thermal出現異常的狀況,ACPI會啟動Active and Passive Cooling interfaces的機制來保護硬體。

它到底如何作業呢?

Reference

<1>Advanced Configuration and Power Interface  Specification 5.0

<2>http://en.wikipedia.org/wiki/Advanced_Configuration_and_Power_Interface

<3>http://biosengineer.blogspot.tw/2007/11/acpi-spec-overview.html

<4>http://fred-zone.blogspot.tw/2008/10/bios-acpi-description-table.html

Sunday, January 20, 2013

Register Transfer Level Design with Verilog (1) [ebook]

設計程式之所以有趣不外乎是它的千變萬化,同樣的結果卻有不同的寫法。

但這些不同寫法當中也並沒有分誰對誰錯,也沒有制定標準來規範何事該用何解。

這也就是我們設計者的珍貴!!

Screen Shot 2013-01-20 at 9.58.41 PM





[1] Primitive Instantiations

在Verilog中最基本的邏輯閘便稱為Primitive,使用最基本的primitive為基礎來設計別稱Primitive Instantiations。

Screen Shot 2013-01-20 at 3.56.46 PM




[2] Assign Statements

透過Primitive gates在利用assign將結果牽線別有更多變的結果。

Screen Shot 2013-01-20 at 4.05.52 PM



[3] Conditional Expression

顧名思義,就是條件式的表示方法!這也是能將硬邦邦的硬體注入多變思想的刀刃。

Screen Shot 2013-01-20 at 4.04.09 PM



[4] Procedural Blocks

至於這套程序則是非常高接的處理程序,往往是很多Conditional Expression所組成。

Screen Shot 2013-01-20 at 4.04.28 PM




所有教課書不往往儘說這些道理,但這些確有哪些不同呢?其實在我的見解就如下

[1]就是利用最基本的邏輯閘組成所需的系統。

[2]的概念就與數學相似,利用運算元來表示系統。

[3]條件是就有如黑盒子概念,拿數位邏輯的概念來說,就是將系統使用Boolean Expressions來呈現,輸入與輸出的關係就有如條件班達成。

[4]則是透過程序流程來分析結果,當然所耗的資源都不盡相同。

Reference

<1>Verilog Digital System Design - RT Level Synthesis, Testbench and Verification

Thursday, January 17, 2013

Processors in embedded systems [Web]

Embedded Processor分為以下兩大類

Microprocessors (μP) 

是用來整合控制周圍系統的晶片,如記憶體。

這項技術從1968年由CADC開始,接者,Gilbert Hyatt, TMS 1000, Intel 4004, Pico/General instrument, For-Phase System AL1

有了巨人的肩膀,亂世群雄的時代就此展開,8-bit, 16-bit, 32-bit, 64-bit, Multicore

其中也將設計結構作為兩種區分,<5>會有所解釋!

RISC(Reduce Instruction Set Computer)

   MIPS(Microprocessor Without Interlocked Pipeline Stage)

CISC(Complex Instruction Set Computer)

   一個指令可以取代很多RISC的指令。

Microcontrollers (μC, MCU)

已經將許多周邊晶片給整合在一起,為了能夠降低成本和功率的考量下所設計出來的。

Program memory in the form of NOR flash or OTP ROM is also often included on chip, as well as a typically small amount of RAM. 

 

但各有其中之優勢,所以兩者都還存在着。

 

Reference 

<1>http://en.wikipedia.org/wiki/Embedded_system#Processors_in_embedded_systems

<2>http://en.wikipedia.org/wiki/Microprocessor

<3>http://en.wikipedia.org/wiki/MIPS_architecture

<4>http://en.wikipedia.org/wiki/Reduced_instruction_set_computing

<5>http://en.wikipedia.org/wiki/Instruction_set_architecture

<6>http://en.wikipedia.org/wiki/Complex_instruction_set_computing

<7>http://en.wikipedia.org/wiki/Microcontroller

Wednesday, January 16, 2013

How to design an FPGA from scratch [Web]

閱讀到一篇真的對新手很有幫助的一篇文章。

作者 Sven Andersson可以說是一位ASICs的先驅,

他的BLOG當中真的有很多值得拿來分析的文章。

今天先來介紹一下,他給剛踏入這塊領域的新手有什麼建議呢?

FPGA design checklist 粒粒扣扣14項:

或許還沒有接觸過的人會想為什麼要有這幾項?我就加入我的想法分享給各位囉,當然我也整理了一下順序!

 

「1」Make sure you have plenty of time to spare.

其實這一點放在第一點不為過,因為要設計好的FPGA程式真的需要很多時間,如果只想花少時間就想做好它。

那真得有些挑戰,就像Library來說,可能C語言來做數學運算可以找個函示來用,但FPGA要設計出來可是需要鬼斧神工的技術呢!!

「2」Find a decent computer.

正所謂 工欲善其事,必先利其器。就是這個道理。

「3」If you can afford it, add a big display.

螢幕越大看的視窗越多,FPGA設計是需要有很多視窗來觀看其設計和模擬。

「4」Decide which operating system to use.

這一點其實跟第「5-8」有很大的關係,因為作業系統的不同,

工具軟體的資源就有所不同,當然Windows系統所擁有的工具軟體是最多的。

「5」Select an FPGA vendor.

「6」Download the FPGA design software.

「7」Choosing a logic simulator.

「8」Choosing a synthesis tool.

 

「9」Pick out a suitable development board.

能用的實驗板很多,但各有所優缺點,這就要看設計者如何取捨。

「10」Select an embedded processor to use.

這部分就比較專業一些,簡單來說挑一個比較熱門一點的比較容易上手,不熱門的也有它的優勢但就看設計者如何取捨。

我這也做了點小整理

「11」Consider using a virtual machine (VM).

我想~~還是為了節省模擬與合成的時間吧!在我的文章中也有提到BUG是個夢魘啊!!!

「12」Add the latest service packs.

就把所有軟體更新吧!!!更新有更新的好,但也有可能更新後就不知道怎麼用了~呵呵

「13」Learn C programming.

這就不在話下了~應該的!!

「14」Read my tutorial (grin) .

 

Referance

<1>http://eetimes.com/design/programmable-logic/4015129/How-to-design-an-FPGA-from-scratch?CID=EMBEDIT

<2>http://en.wikipedia.org/wiki/Embedded_system#Processors_in_embedded_systems

<3>http://en.wikipedia.org/wiki/Application-specific_integrated_circuit

 

 

The art of FPGA construction FPGA的建構藝術 (3) 實體呈現


0108esdSmith03sm

 

 

 

 

 

 

 

等到程式碼都完成了,該如何驗證呢?

這是每個設計者都想知道,簡單來說就是找到Compile給它按下去就行了~~

而在FPGA會有兩種方式,一種是模擬,另一種則是合成。

依我經驗為例,能透過模擬就模擬,畢竟要合成出實際的電路在燒入到硬體內,真的是一大工程呢。

至於FPGA它的合成作業是如何達成呢?

就如圖示所表示,有三大階段,

[1] 將程式碼或圖像設計轉換成RTL。

[*2] 再將RTL的邏輯電路加以最佳化,除減少時間程序外也能減少成本。

[3] 再將最後的電路合成出你所要硬體的對應表(Netlist)。

 

這樣就大功告成啦~~

Monday, January 14, 2013

The art of FPGA construction FPGA的建構藝術 (2) 程式碼編排

基本上,一個程式會有四大架構,

文章內是提到是VHDL的格式,但我想也是用於Verilog當中。

[1] Optional Heading Section

    檔頭部分,通常會寫一些重要的資訊,以及如何使用這套模組(Module)。

好讓第一次使用的人能夠快速上手,給用過的人能夠重新回想,還有一些歷史更改記錄。

[2] Library Declaration 

    宣告用了哪寫資料庫,可以提醒人記得匯入哪些資料到專案中。

[3] Entity Declaration

    其實,Module就是黑盒子的觀念一樣,你把輸入給黑盒子裡面做什麼不重要,

但要得到你想要的輸出,這樣才能達到簡化的目標。因此,輸入及輸出的訊號對Module來說可是很重要的。

為了能夠有效的整理利用就把它們放在此區塊吧。

[4] Architecture Section

    接著,最後的區塊就是給設計者設計的地方囉!!

0108esdSmithL02sm

 

 

 

 

 

 

 

 

 

 

 

 

 

下面有五個小訣竅可以幫助減少錯誤。

[1] 常常註解你的程式碼!!!

你覺得你記得住?等到一年後拿來看再說吧~

[2] 用空白鍵或Tab鍵來增加可讀性。

[3] 變數名稱的命名方式。

    (1) 命名盡量短而好記。舉例來說,

         active low chip enable  

    X active_low_chip_enable

    O CEn_n

    (2) 用“_”來加以敘述變數用途。舉例來說,

        負緣觸發的訊號,可以在變數名稱後面多加個n, _n, _b, *來提醒自己。

[4] 盡量止少使用Function。

[*5] Synchronize signals to change on a clock edge

       正負觸發的問題常常會影響訊號同步的問題。

 

繼續…看下去

 

Reference : 

http://www.embedded.com/design/configurable-systems/4007481/3/The-art-of-FPGA-construction

http://www.embedded.com/design/configurable-systems/4007481/4/The-art-of-FPGA-construction

 


The art of FPGA construction FPGA的建構藝術 (1) 基本概念

Working with FPGA isn't intimidating when you know the basic techniques and options.

很簡單的開宗明義,如果懂得去瞭解FPGA的基礎,那就什麼都不害怕了!!

但該如何去瞭解呢?在這部落格裡我想分享我的想法及思維,當然不是最完善的敘述。

但如果想討論的人歡迎一起研究!!

由於功力太淺無法直接憑空分享,所以我都借由文章來產生共鳴。今天的文章為~

http://www.embedded.com/design/configurable-systems/4007481/1/The-art-of-FPGA-construction

 

The key to good communication is having an understanding of the development process. A solid understanding will help you comprehend and extract relevant information for status reports, define schedule tasks, and allocate appropriate resources and time.There have been many times when my FPGA knowledge has allowed me to detect and correct errors, such as wrong part numbers or misuse of terms and terminology found in requirements and other documents.

其實寫FPGA是一個非常龐大的程式碼,有可能是一堆人完成的,所以溝通協調是非常重要的。

就算是一個人也會忘記當初所寫的,所以好的程式排版註解都是很重要的,可以提高效能和準確度。

不然暗藏臭蟲都毫無所知無從著手啊!!!


0108esdSmith01

 

 

 

 

 

 

 

 

 

 

 

 

 

圖示簡單地告訴我們設計FPGA有兩種概念的方式,

HDL的程式碼和Schematic Capture,

代表性的工具軟體分別為

Viewlogic's ViewDraw and HDL's EASE

CodeWright and Scriptum

其中HDL也有兩種設計概念,Structural and behavioral。

Structural就與Schematic Capture的概念雷同,利用圖像的方式拉移來完成。

Behavioural則是用寫程式碼來完成,知名的程式語言為VHDL, Verilog,也有Altera自己的語言AHDL等等~~


Continue

Tuesday, January 8, 2013

Parallels Desktop Suspending

要啓動虛擬伺服器卻卡在這個畫面進不去。

Screen Shot 2013-01-08 at 11.50.01 PM

 

 

 

 

 

 

 

 

 

 

 

 

 

請試試看以下做法,

Resolution

On the Host computer, open the Activity Monitor application from Finder -> Applications -> Utilities and find the following process:

In Parallels Desktop 5,6 and 7

prl_vm_app


In Parallels Desktop 


Parallels VM

 

Highlight this process, click 'Quit Process' and choose 'Force Quit' Option.

 

細節請參考。

http://kb.parallels.com/6338

Register Transfer Level Design with Verilog (1) [ebook]

設計程式之所以有趣不外乎是它的千變萬化,同樣的結果卻有不同的寫法。 但這些不同寫法當中也並沒有分誰對誰錯,也沒有制定標準來規範何事該用何解。 這也就是我們設計者的珍貴!! [1] Primitive Instantiations 在Verilog中最基本的邏輯...