| 0 意見 ]

Additional References for Digital Video Processing (EE392J)




References


"Digital Video Processing", M. Tekalp, Prentice Hall, 1995, ISBN 0-13-190075-7. This is an additional recommended text for the course, and covers a number of video signal processing subjects that are not covered by the required text, including motion-compensated filtering, noise reduction, restoration, and superresolution. A list of corrections is available.

"The Art of Digital Video", J. Watkinson, 3rd edition, Focal Press, 2000. Contains a variety of practical information about digital video.

"Video Demystified", K. Jack, 3rd edition, Llh Technology Publishing, 2001. Contains practical, nuts & bolts, information about analog and digital video.

"Motion Analysis and Image Sequence Processing", edited by M.I. Sezan and R.L. Lagendijk, Kluwer Academic Publishers, 1993. Individual chapters cover a variety of topics in motion analysis and video processing.

"Fundamentals of Electronic Imaging Systems", W.F. Schreiber, Springer-Verlag, 3rd edition, 1993. Examines the analysis and design of imaging systems, covers a lot of material that is not available anywhere else.

"Image and Video Compression Standards: Algorithms and Architectures", V. Bhaskaran and K. Konstantinides, Kluwer Academic Publishers, 2nd edition, 1997. Good overview of compression standards, both in terms of the high-level algorithms and efficient hardware architectures -- all under one cover.

"Digital Video: An Introduction to MPEG-2", B.G. Haskell, A. Puri, and A.N. Netravali, Chapman & Hall, 1997. A detailed description of the MPEG-2 video compression standard as well as a good overview of video compression.

"Digital Pictures: Representation and Compression", A. Netravali and B. Haskell, Plenum Press, second edition, 1995. A classic image/video compression text.

Engineering Journals and Conferences that Cover Digital Video Processing


"IEEE Transactions on Image Processing", "IEEE Transactions on Circuits and Systems for Video Technology", "IEEE Transactions on Multimedia", and "Signal Processing: Image Communications".

There have also been a number of special issues that cover video processing in the "Proceedings of the IEEE", "IEEE Transactions on Signal Processing", and "IEEE Journal on Selected Areas of Communications".

In addition, there are a number of conferences that cover digital video processing, including IEEE International Conference on Image Processing (ICIP), IEEE International Conference on Multimedia and Expo (ICME), Visual Communications and Image Processing (VCIP), and IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP).

Background References in Image Processing, Compression, and DSP


"Two-Dimensional Signal and Image Processing", J. Lim, Prentice Hall, 1990. Provides a great introduction to 2-D signal processing and image processing.

"Two-Dimensional Imaging", R. Bracewell, Prentice Hall, 1995. Great coverage of a number of topics in imaging that are not typically covered in an image processing text (complementary coverage to that provided by Lim's book above).

"Vector Quantization and Signal Compression", A. Gersho and R. Gray, Kluwer Academic Publishers, 1992. Does not cover video, but provides a very nice overview of the fundamentals of compression.

"Digital Coding of Waveforms: Principles and Applications to Speech and Video", N. Jayant and P. Noll, Prentice Hall, 1984. A classic compression book.

"Discrete-Time Signal Processing", A.V. Oppenheim and R.W. Schafer, Prentice Hall, 2nd edition, 1999. Excellent first-graduate class introduction to DSP.

| 0 意見 ]

http://inst.eecs.berkeley.edu/~selfpace/

class
http://inst.eecs.berkeley.edu/classes-eecs.html



| 0 意見 ]

http://inst.eecs.berkeley.edu/~cs61c/sp06/handout/fixedpt.html

CS61C Berkeley http://inst.eecs.berkeley.edu/~cs61c/fa11/

Introduction to Fixed Point Number Representation


CS61c Spring 2006  Author: Hayden So  Last Modified: 2/28/06
Introduction: Real numbers in Real world

In real life, we deal with real numbers -- numbers with fractional part. Most modern computer have native (hardware) support for floating point numbers. However, the use of floating point is not necessarily the only way to represent fractional numbers. This article describes the fixed point representation of real numbers. The use of fixed point data type is used widely in digital signal processing (DSP) and game applications, where performance is sometimes more important than precision. As we will see later, fixed point arithmetic is much faster than floating point arithmetic.

It All Starts With an Integer    Recall that a binary number:


1101012
represents the value:

1 * 25 + 1 * 24 + 0 * 23 + 1 * 22 + 0* 21 + 1 * 20
= 32 + 16 + 4 + 1
= 53(oct)

Now, if we divide the number 53 by 2, we know the the result should be 26.5. However, how do we represent it if we only had integer representations?

The Binary Point

The key to represent fractional numbers, like 26.5 above, is the concept of binary point. A binary point is like the decimal point in a decimal system. It acts as a divider between the integer and the fractional part of a number.


In a decimal system, a decimal point denotes the position in a numeral that the coefficient should multiply by 100 = 1. For example, in the numeral 26.5, the coefficient 6 has a weight of 100 = 1. But what happen to the 5 to the right of decimal point? We know from our experience, that it carries a weight of 10-1. We know the numeral "26.5" represents the value "twenty six and a half" because



2 * 101 + 6 * 100 + 5 * 10-1 = 26.5

The very same concept of decimal point can be applied to our binary representation, making a "binary point". As in the decimal system, a binary point represents the coefficient of the term 20 = 1. All digits (or bits) to the left of the binary point carries a weight of 20, 21, 22, and so on. Digits (or bits) on the right of binary point carries a weight of 2-1, 2-2, 2-3, and so on. For example, the number:



11010.12

represents the value:



25 24 23 22 21 20 2-1 2-2 2-3

... 1 1 0 1 0 1 0 ...



= 1 * 24 + 1 * 23 + 0 * 22 + 1 * 21 + 0* 20 + 1 * 2-1



= 16 + 8 + 2 + 0.5



= 26.5



Shifting Is The Key

A careful reader should now realize the bit pattern of 53 and 26.5 is exactly the same. The only difference, is the position of binary point. In the case of 5310, there is "no" binary point. Alternatively, we can say the binary point is located at the far right, at position 0. (Think in decimal, 53 and 53.0 represents the same number.)



25 24 23 22 21 20 Binary Point 2-1 2-2 2-3

1 1 0 1 0 1 . 0 0 0



In the case of 26.510, binary point is located one position to the left of 5310:



25 24 23 22 21 20 Binary Point 2-1 2-2 2-3

0 1 1 0 1 0 . 1 0 0



Now, recall in class, we discuss shifting an integer to the right by 1 bit position is equivalent to dividing the number by 2. In the case of integer, since we don't have a fractional part, we simply cannot represent digit to the right of a binary point, making this shifting process an integer division. However, it is simply a limitation of integer representations of binary number.



In general, mathematically, given a fixed binary point position, shifting the bit pattern of a number to the right by 1 bit always divide the number by 2. Similarly, shifting a number to the left by 1 bit multiplies the number by 2.



Fixed Point Number Representation

The shifting process above is the key to understand fixed point number representation. To represent a real number in computers (or any hardware in general), we can define a fixed point number type simply by implicitly fixing the binary point to be at some position of a numeral. We will then simply adhere to this implicit convention when we represent numbers.



To define a fixed point type conceptually, all we need are two parameters:



•width of the number representation, and

•binary point position within the number

We will use the notation fixed for the rest of this article, where w denotes the number of bits used as a whole (the Width of a number), and b denotes the position of binary point counting from the least significant bit (counting from 0).



For example, fixed<8,3> denotes a 8-bit fixed point number, of which 3 right most bits are fractional. Therefore, the bit pattern:



0 0 0 1 0 1 1 0



represents a real number:



00010.1102

= 1 * 21 + 1 * 2-1 + 1 * 2-1



= 2 + 0.5 + 0.25



= 2.75



Note that on a computer, a bit patter can represents anything. Therefore the same bit pattern, if we "cast" it to another type, such as a fixed<8,5> type, will represents the number:



000.101102

= 1 * 2-1 + 1 * 2-3 + 1 * 2-4



= 0.5 + 0.125 + 0.0625



= 0.6875



If we treat this bit patter as integer, it represents the number:



101102

= 1 * 24 + 1 * 22 + 1 * 21



= 16 + 4 + 2



= 22



Negative Numbers

So far we talked about positive numbers, but we do want to represent negative numbers, don't we? How do we represent fixed point negative numbers then?



In computer, we use 2's complement to represent negative numbers. One of the property of 2's complement numbers is that arithmetic operations of either positive of negative numbers are identical. It includes, addition, subtraction, and not surprisingly, shifting. We can divide negative 2's complement numbers by 2 via a simple 1 bit right shift with sign extension as we can do so with positive numbers.



Recall in the beginning of this article we discuss how fixed point numbers are simply a shifted version of an integer (by setting binary point to a non-zero position). Combining with the observation that shift operation applies to 2's complement negative number as well as positive numbers, we can easily see how we can represent negative number in fixed point: Use 2's complement.



As an illustration, below are all the numbers representable with 4-bits 2's complement:



Bit Pattern Number Represented (n) n / 2

1 1 1 1 -1 -0.5

1 1 1 0 -2 -1

1 1 0 1 -3 -1.5

1 1 0 0 -4 -2

1 0 1 1 -5 -2.5

1 0 1 0 -6 -3

1 0 0 1 -7 -3.5

1 0 0 0 -8 -4

0 1 1 1 7 3.5

0 1 1 0 6 3

0 1 0 1 5 2.5

0 1 0 0 4 2

0 0 1 1 3 1.5

0 0 1 0 2 1

0 0 0 1 1 0.5

0 0 0 0 0 0



Looking at this table, we can then easily realize we can represent the number -2.5 with bit pattern "1011", IF we assume the binary point is at position 1.



Pros and Cons of Fixed Point Number Representation

By now, you should find that fixed point numbers are indeed a close relative to integer representation. The two only differs in the position of binary point. In fact, you might even consider integer representation as a "special case" of fixed point numbers, where the binary point is at position 0. All the arithmetic operations a computer can operate on integer can therefore be applied to fixed point number as well.



Therefore, the benefit of fixed point arithmetic is that they are as straight-forward and efficient as integers arithmetic in computers. We can reuse all the hardware built to for integer arithmetic to perform real numbers arithmetic using fixed point representation. In other word, fixed point arithmetic comes for free on computers.



The disadvantage of fixed point number, is than of course the loss of range and precision when compare with floating point number representations. For example, in a fixed<8,1> representation, our fractional part is only precise to a quantum of 0.5. We cannot represent number like 0.75. We can represent 0.75 with fixed<8,2>, but then we loose range on the integer part.



Using Fixed Point Number in C

C does not have native "type" for fixed point number. However, due to the nature of fixed point representation, we simply don't need one. Recall all arithmetics on fixed point numbers are the same as integer, we can simply reuse the integer type int in C to perform fixed point arithmetic. The position of binary point only matters in cases when we print it on screen or perform arithmetic with different "type" (such as when adding int to fixed<32,6>).



Conclusion

Fixed point is a simple yet very powerful way to represent fractional numbers in computer. By reusing all integer arithmetic circuits of a computer, fixed point arithmetic is orders of magnitude faster than floating point arithmetic. This is the reason why it is being used in many game and DSP applications. On the other hand, it lacks the range and precision that floating point number representation offers. You, as a programmer or circuit designer, must do the tradeoff.





--------------------------------------------------------------------------------

| 0 意見 ]

1-1 TMS320家族介紹


....... [省略].......



在德州儀器未來產品線的規劃(roadmap)中,C6x系列晶片將依據不同的功能性而細分成幾類產品應用,以因應通訊市場的需求。然而,隨著技術的進步 C62x 也將逐步地退出德州儀器主要供應之列,取而代之,以 C64 為核心的晶片將成為主流。C6x 系列分三大族群︰第一族群為高效能的C64x系列,晶片的核心處理器以 C64x 為主,不過隨著TI在這個架構上的改進,核心處理器逐步演進到C64x+(稱為 C64x plus)架構;第二族群為專攻影像應用的 DM64x 系列,DM64x 晶片採用單核心與雙核心兩種 ,雙核心的 DSP 通常以C64x+架構再搭配另一顆 ARM9 的微處理器,晶片的週邊方面增添網路模組以及影像介面,適用於網路多媒體、影像語音的處理,這整套系統稱為達文西平台(DaVinciTM);第三族群為浮點運算的C67x系列。未來,德州儀器在通訊市場將還是以C64x與DM64x晶片為主要的應用。



整理列出 C6000 平台的 DSP 規格,分成高效能與達文西平台兩大類。高效能的核心有 C64 與 C64+ 兩種,達文西的核心同樣有 C64 與 C64+ 兩種,不過還多了雙核心的規格。德州儀器提供多樣化的產品線,讓使用者能夠有多種選擇。



C6000 平台還提供另一種浮點運算的 DSP,然而定點與浮點運算的

DSP 有何不同呢?各有何優缺點呢?就功能性而言,浮點或定點運算DSP都可以執行小數點的計算,不過由於浮點運算的DSP內建浮點計算的指令,所以在運算小數的效能上比起定點的DSP還好。此外,就價格而論,浮點運算DSP在價格上比起同款的定點運算DSP貴,通常在學校研究單位會使用浮點運算的DSP做為初期開發的平台,在工業界考量到量產的因素,會使用定點運算DSP做為產品的核心。值得留意的是,目前德州儀器(2007年)所規劃的浮點DSP的最高運算時脈只到350MHz,比起定點的DSP可高達1GHz,浮點DSP適合於開發產品模組的雛型(prototype)。



從上述的介紹,大致可瞭解德州儀器產品的規劃方向。不過,初學者最大的問題是當一看到這麼複雜的系統,心中浮現出不少問號,不知到底該從何開始著手。筆者以個人的經驗提供初學者參考︰

第一步、安裝好套裝軟體,以及準備好一套DSP的開發平台。這步驟主要的目的讓初學者先熟悉德州儀器的套裝軟體,如何讓開發平台與軟體介面能成功的連接。成功踏出第一步之後,才能展開信號處理之旅。

第二步、研讀欲採用的DSP晶片上有哪些介面,再深入研究介面的架構。通常,在每顆DSP晶片裡面包括了多達十多種大大小小的介面,實際上我們不可能針對每個介面都去仔細研究,通常只有對重要或常用的介面才深入研讀,例如︰DMA/EDMA、McBSP介面最為常用。

第三步、在開發平台上執行德州儀器供教學用的範例程式。初學者研讀了介面的資料之後,可以執行教學範例程式,以加深介面的使用。



....... [省略].......



TCP(Turbo-Decoder Coprocessor):這是Turbo-Code的解碼處理器,內建在DSP晶片裡面。在3G無線通訊標準裡,需要用到Turbo Code編解碼。不過,TCP模組並非存在所有的DSP晶片中,目前C6416與C6455內建Turbo Code的解碼器,詳細的操作參考。



VCP(Viterbi-Decoder Coprocessor):這是Viterbi-Code的解碼處理器,內建在DSP晶片裡面。在IS2000和3GPP無線通訊標準裡,在最新的802.11n標準中,需要用到Viterbi Code編解碼。不過,VCP模組並非存在所有的DSP晶片中,目前C6416、C6418、與C6455內建Viterbi Code的解碼器。VCP與TCP模組都是在DSP晶片裡面獨立於CPU之外,新增一塊處理器專為解碼之用,有自己獨立的記憶體。VCP/TCP溝通的方式和CPU利用一塊FIFO記憶體交換資料,傳輸或者接收資料主要是透過EDMA通道,參考技術文件。



1-2-3 C64x+的核心架構



在C6000家族中,早期設計的C62x系列已漸漸被下一代的C64x所取代,因此德州儀器新一代的DSP處理器以C64x為主要核心架構,雖然該架構延續自C62x,但是提昇了數位信號處理的效能,與過去的架構有下列的不同點︰

¨ 針對晶片內的VelociTI.2架構新增的延伸指令,加速數位信號處理的效能

¨ 增加16位元或8位元資料在乘加運算方面的平行處理

¨ 改善常用指令之間的互斥空間,提昇指令使用的效能

¨ 加倍內部資料傳輸頻寬,以便增加更多的暫存器與加大L-2快取記憶體

¨ C64x的軟體可完全相容於TMS320C62x



隨著德州儀器技術的提昇,針對C64x核心架構進行部分改良,將處理器的核心架構演進到C64x+,而新增與改良的部分如下所列︰

¨ 提供32位元的乘法指令以提供更精確計算

¨ 擴大核心處理器的算術運算,以便能支援FFT與DCT演算法

¨ 改善複數乘法的支援

¨ 加速行列計算的指令,以提昇FIR的計算效能

¨ 新增平行處理的指令

¨ 改良Galois Field的乘法



改良後的C64+核心主要使用在達文西平台上,目前達文西平台的晶片序號為DM64x,主要搶佔影音多媒體的通訊市場,特別是手持式的通訊裝置。DM64x系列的晶片都是採用雙核心的處理器,除了包含C64+的DSP核心做為影像語音處理之外,還包含了ARM9的微處理器做為控制的中心。達文西平台上面包含了雙核心的處理器,以及週邊的介面所組成,為了強化影像介面與網路介面的連接,達文西晶片內新增下列主要的週邊︰



EMAC(Ethernet Media Access Controller):為了增加晶片在網路方面的連接,DM64系列內建乙太網路的MAC控制器,晶片的外部電路只要再接一顆PHY的晶片,硬體工程師在設計電路時可以更簡化。



McASP(Multichannel Audio Serial Port):音訊介面設計在DM64x系列的晶片裡面,可支持多達4組立體音通道透過I2S(Inter-Integrated Sound)格式與CODECs、DAC、ADC裝置連接,相當適合應用於音樂方面的處理,可配合影音的處理。



Video Port:該介面可設定成為影像擷取埠、影像顯示埠、或 TSI(Transport Stream Interface)擷取埠。影像的資料處理必須透過DMA 介面的協助,將影像埠內的資料緩衝器搬運到記憶體內,以便做為影像訊號的處理。



....... [省略].......



當我們安裝 DSP的開發套件時,內附的CSL函式庫也會一併安裝到電腦內,可以在安裝目錄 \CCStudio\C6000\bios\lib 裡面找到以csl為檔名頭的函式庫。此外,安裝C6416 DSK軟體的時候,內附的BSL函式庫也會被安裝進來,存放在 \CCStudio\C6000\dsk6416\lib 裡面,除了dsk6416bsl.lib之外還有這個函式庫的原始碼,供使用者編譯、修改、研究之用。如果是C6713 DSK的話,則存放在 \CCStudio\C6000\dsk6713\lib 裡面。除了CSL和BSL函式庫在開發程式的時候會使用到,還有一個很重要的函式庫稱為run-time library,例如︰memcpy、memset…等常用的函式,相關的函式庫存放在 \CCStudio\C6000\cgtools\lib 目錄下。整理一下函式庫的目錄所在

Run-time 函式庫–\CCStudio\C6000\cgtools\lib\

Chip Support 函式庫–\CCStudio\C6000\bios\lib\

C6416 DSK 函式庫–\CCStudio\C6000\dsk6416\lib\

| 0 意見 ]

ASIC
特殊應用積體電路(Application-specific integrated circuit,ASIC),是指依特定用途而設計的特殊規格邏輯IC。

ASIC是由特定使用者要求和特定電子系統的需要而設計、製造,故出貨少,樣式多。ASIC依其設計方式不同,目前大多使用CPLD(複雜可程式邏輯器件)和FPGA(現場可程式邏輯陣列)實作。它們的共性是都具有用戶現場可程式特性,都支持邊界掃描技術,但兩者在集成度、速度以及編程方式上具有各自的特點。

ASIC可翻譯為專用集成電路,一般它的ROM和RAM都在出廠前經過掩膜MASK。如常用的紅外遙控器發射晶片就是這種晶片。

ASIC的特點是面向特定用戶的需求,品種多、批量少,要求設計和生產周期短,它作為集成電路技術與特定用戶的整機或系統技術緊密結合的產物,與通用集成電路相比具有體積更小、重量更輕、功耗更低、可靠性提高、性能提高、保密性增強、成本降低等優點


FPGA
現場可程式邏輯閘陣列(FPGA, Field Programmable Gate Array),是一個含有可編輯元件的半導體設備,可供使用者現場程式化的邏輯閘陣列元件。



目前以硬體描述語言(Verilog 或 VHDL)所完成的電路設計,可以經過簡單的綜合與佈局,快速的燒錄至 FPGA 上進行測試,是現代 IC 設計驗證的技術主流。這些可編輯元件可以被用來實現一些基本的邏輯閘電路(比如AND、OR、XOR、NOT)或者更複雜一些的組合功能比如解碼器或數學方程式。在大多數的FPGA裡面,這些可編輯的元件里也包含記憶元件例如觸發器(Flip-flop)或者其他更加完整的記憶塊。

系統設計師可以根據需要通過可編輯的連接把FPGA內部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個晶片里。一個出廠後的成品FPGA的邏輯塊和連接可以按照設計者而改變,所以FPGA可以完成所需要的邏輯功能。

FPGA一般來說比ASIC(專用集成晶片)的速度要慢,無法完成複雜的設計,而且消耗更多的電能。但是他們也有很多的優點比如可以快速成品,可以被修改來改正程序中的錯誤和更便宜的造價。廠商也可能會提供便宜的但是編輯能力差的FPGA。因為這些晶片有比較差的可編輯能力,所以這些設計的開發是在普通的FPGA上完成的,然後將設計轉移到一個類似於ASIC的晶片上。在一些技術更新比較快的行業,FPGA幾乎是電子系統中的必要部件,因為在大批量供貨前,必須迅速搶佔市場,這時FPGA方便靈活的優勢就顯得很重要。

與FPGA的比較另外一種方法是用CPLD(複雜可程式邏輯器件備)。
早在1980年代中期,FPGA已經在PLD設備中紮根。CPLD和FPGA包括了一些相對大數量的可以編輯邏輯單元。CPLD邏輯閘的密度在幾千到幾萬個邏輯單元之間,而FPGA通常是在幾萬到幾百萬。


CPLD和FPGA的主要區別是他們的系統結構。
CPLD是一個有點限制性的結構。這個結構由一個或者多個可編輯的結果之和的邏輯組列和一些相對少量的鎖定的暫存器。這樣的結果是缺乏編輯靈活性,但是卻有可以預計的延遲時間和邏輯單元對連接單元高比率的優點。

而FPGA卻是有很多的連接單元,這樣雖然讓它可以更加靈活的編輯,但是結構卻複雜的多。
CPLD和FPGA另外一個區別是大多數的FPGA含有高層次的內置模塊(比如加法器和乘法器)和內置的存儲器。一個因此有關的重要區別是很多新的FPGA支持完全的或者部分的系統內重新配置。允許他們的設計隨著系統升級或者動態重新配置而改變。一些FPGA可以讓設備的一部分重新編輯而其他部分繼續正常運行。



基本組成SRAM - 基於靜態記憶體static memory技術。系統內可程式化和再程式化(re-programmable)。須要外部啟動元件(external boot devices). CMOS。

Antifuse - 可燒錄一次。通常為 CMOS。

PROM(OTP EPROM) - 可程式化唯讀記憶體技術,可燒錄一次。使用塑料封裝,無窗,不能清除內容。

EPROM - 可清除可程式化唯讀記憶體技術,有窗,經紫外線照射可清除內容。

EEPROM - 可電氣清除可程式化唯讀記憶體技術,可用電氣訊號清除內容。

Flash - Flash-erase EEPROM technology.

Fuse - 可燒錄一次。通常為 Bipolar。

VHDL维基百科,自由的百科全书跳转到: 导航, 搜索


此條目或章節需要擴充,請協助改善這篇條目。(2011年11月10日)

更進一步的訊息可能會在討論頁或擴充請求中找到。請在擴充條目後將此模板移除。



VHDL
VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)即超高速集成電路硬體描述語言,在基於CPLD/FPGA和ASIC的數位系統設計中有著廣泛的應用。

VHDL語言誕生於1983年,1987年被美國國防部和IEEE確定為標準的硬體描述語言。自從IEEE發布了VHDL的第一個標準版本IEEE 1076-1987後,各大EDA公司都先後推出了自己支援 VHDL 的 EDA 工具。VHDL 在電子設計行業得到了廣泛的認同。此後IEEE又先後發布了IEEE 1076-1993和IEEE 1076-2000版本。


一個有符號的加法器的VHDL原始碼。目錄 [隐藏]

1 程式語言

2 單體 entity

3 架構 architecture

4 configuration

5 參見





[编辑] 程式語言註:VHDL不區分大小寫; library ieee;--庫聲明,聲明工程中用到的庫,這裡聲明的是IEEE庫 use ieee.std_logic_1164.all;--包聲明,聲明工程中用到的包,這裡聲明的是IEEE的STD_LOGIC_1164包



[编辑] 單體 entity它負責宣告一個硬體的外部輸入與輸出,一個簡單的範例(尖括號內為必填,方括號內為可選):



entity <实体名称> is

port(

a : IN STD_LOGIC;

b : OUT STD_LOGIC;

);

end [实体名称];

[编辑] 架構 architecture它負責實現內部的硬體電路。 architecture <結構體名稱> of <實體名稱> is begin



--此处可编写结构体内部操作

end [結構體名稱];



[编辑] configuration配置用來描述各種層與層的連接關係以及實體與結構體之間的關係,此處不贅述





VHDL編寫觸發器簡例: library ieee; --庫聲明

use ieee.std_logic_1164.all; --包聲明



entity test is --實體定義





port( d : in std_logic; clk : in std_logic; q : out std_logic);

end test;



architecture trigger of test is --結構體定義





signal q_temp:std_logic;

begin





q<=q_temp; process(clk) begin if clk'event and clk='1' then q_temp<=d; end if; end process;

end trigger;



configuration d_trigger of test is--配置,將結構體配置給實體,配置名為d_trigger


Verilog HDL
Verilog HDL是一種硬體描述語言(hardware description language),為了製作數位電路而用來描述ASICs和FPGA的設計之用。Verilog 的設計者想要以 C 程式語言為基礎設計一種語言,可以使工程師比較容易學習。



Verilog 是由en:Gateway Design Automation公司於大約1984年開始發展。Gateway Design Automation公司後來被 Cadence Design Systems於1990年所購併。現在 Cadence 對於 Gateway 公司的 Verilog 和 Verilog-XL 模擬器擁有全部的財產權。

開放標準隨著VHDL的迅速成功,Cadence公司採取了開放標準的路線。Cadence公司將Verilog轉放到公眾開放領域Open Verilog International(OVI)組織(現在以en:Accellera)聞名)。隨後,Verilog被提交到IEEE並成為IEEE 1364-1995標準。我們通常稱這一標準為Verilog-95。

Verilog 2001隨後,人們向IEEE提交了一個改善了用戶覺得原始的Verilog-95標準缺陷的新的標準。這一擴展版本成為了IEEE1364-2001標準,也就是Verilog 2001。



Superlog/System Verilog隨著高級驗證語言象OpenVera,en:Verisity's E 語言的出現,en:Co-Design Automation Inc發明了en:Superlog語言。隨後,en:Co-Design Automation Inc被en:Synopsys收購,Superlog 和 Vera 的基礎被捐獻給en:Accellera。之後,superlog轉換升級為System Verilog。



最近的版本支持模擬和混合信號模型。這些可以歸諸於verilog系列。



System Verilog 已於2005年11月8日成為IEEE標準(IEEE STD 1800),並且被視為最有前途的高級驗證語言之一,同時其在設計方面的潛力也被人們看好。








| 0 意見 ]

Baud 是指電子信號於一秒鍾內最大狀態改變的速率.此名詞在被發明初期,

最主要是用來做為測量電報傳輸速率的單位,目前則常用來做為網路間兩節

點之傳輸速率.



受限於電話線路每秒約僅可負載 600 Baud 之數據機 Baud Rate 的影響,

若欲提高 Modem 的傳輸速率,非得由提高每一 Baud 所能攜帶的位元數量

來著手.



由於通訊技術的發展,每一個 Baud 所能攜帶的位元數量增加,因此,Modem

的傳輸速度才能由以往的 2,400bps, 9,600bps 以至於目前的 28,800bps 與

33,600bps.例如14,400bps 的 Modem,每一 Baud 攜帶 24 個位元.



http://www.ie.fcu.edu.tw/~d8338705/chanko/net/net-a-b.html



我想請問的是,所謂電子信號於一秒鍾內最大狀態改變,指的是什麼??

什麼樣的改變叫做最大狀態的改變??


應該就是所使用的modulation中所能做到的最大改變吧!

老師應該有提到三種modulation 包括 amplitude,frequency


and phase吧!透過這些方法來組成一組有意義的訊號(0,1)

然後透過modem來傳送這些訊息

在 amplitude中 是使用振幅的大小來表示0與1


frequency中 是使用頻率的變化來表示0與1


而所謂最大的改變 應該也就是窮近這些方法

而在所謂的一秒鐘能送出這些訊息組合的最大極限吧!

老師未來應該還會解釋QAM 還有Nyquist and Shannon' theorem

這樣應該有助於了解modem的傳輸與電話線間的關係!



ps:說了那麼多 好像也沒說到重點的樣子

回答問題還真要訓練!


grandfather 說得好!

拿我上課比喻打手勢傳遞訊息為例:

Baud rate 是指打手勢的人每秒做出幾個手勢。

假如每個手勢的變化包括:1. 「左」「右」手之別

2. 「向上」伸出還是「向側邊」伸出

3. 「握拳」還是「打開手掌」

這些變化組合在一個手勢動作裡呈現如下八種組合情形:



1. 「左手」 「向上」 「握拳」

2. 「左手」 「向上」 「打開手掌」

3. 「左手」 「向側邊」「握拳」

4. 「左手」 「向側邊」「打開手掌」

:

:

(餘類推)



假如我們做如下的編碼(Encoding):



1. 「左手」為 0, 「右手」 為 1

2. 「向上」為 0, 「向側邊」 為 1

3. 「握拳」為 0, 「打開手掌」為 1



上述這八種手勢組合就分別可以編碼成:



000, 001, 010, 011, .....



易言之,每個手勢可以傳遞出 3 個 bits 的情報。這也就是

說假如打手勢的人每秒鐘做出 100 個手勢(亦即 Baud rate

為 100),他可以每秒傳遞出 3X100 個 bits (亦即所謂的

300 bps)。



當然我們都知道人是沒辦法在一秒內打出 100 個手勢的,同

樣的,數據機在做調變/解調的過程當中,也有他切換(不管

調頻調幅調相還是前述各項的組合)上的速率限制。 這些限

制也有可能來自於電話線路有限頻寬(300HZ - 3,400HZ)。



Baud rate 有所限制,使得許多的努力都在嘗試使每個 buad

裡盡量有較高的組合變化。 bps 為 baud 的倍數。最壞情況

一個 baud 裡送出兩種不同變化的訊息時, 1 baud = 1 bps

如果一個 baud 裡送出四種不同變化的訊息時, 1 baud =

2 bps,…餘類推。




*********************************************************************

Report of Paper Reading


Bits,Symbols,Bauds,and Bandwidth


  在討論到數據通訊的時候,我曾經想過,究竟所謂的頻寬是每秒可以讓多少位元通過?在解釋頻寬(bandwidth)和位元傳輸率(bit rate)時,我們要先提到其它兩個同樣也非常參數,符號(symbol)和鮑率(baud),而這四個常見的通訊名詞卻經常被誤用和濫用。以下我們首先要提到頻寬的定義。

  頻寬一詞在通訊扮演著非常重要的角色,它的單位是赫茲(Hz),而我們定義介於最高頻到最低頻之間拿來應用的頻段稱為頻寬。然而根據不同的應用,對於頻寬的定義也有所不同,作者在此提出了五種不同對頻寬的定義。第一種是在普通電路、濾波器、衰減、放大器、傳輸線或其他主動、被動電子元件中最常見的,也就是取pass band(或參考頻率)時,訊號平均能量的3-dB值所對應到的兩個頻率之間頻段作為頻寬。比如國際電訊聯盟(CCITT)規定了有名無實的4KHz的聲音頻道,但實際上只分佈在300到3400Hz之間,因為就實際頻寬只有3100Hz,就是根據3-dB的能量規則。在網路裡面數據傳輸的頻寬通常都遵循著3-dB規則,但有一個例外:在北美,聲音頻道的用戶迴路就特別定義在參考頻率1000Hz的10-dB點,也就是大概在200到3200Hz之間,。第二種,則是無限廣播管制局對頻寬卻有非常嚴格的定義,因為要限制廣播頻段必需保持安全邊距不能重覆或干涉到另一個廣播頻段,所以規定必需在頻道的邊界留下0.5%的安全邊距,其餘99%的頻道才能做為訊號傳輸的頻寬。第三種是有界的能量譜密度(bounded power spectral density),也就是在定義的頻寬界線以外的訊號能量必需小到在頻寬中央不會發現,換句話說,只要是在頻寬以外的訊號能量必需小到和頻寬中央的相關性等於0,對應到能量頻譜上大概是在35~50 dB左右。另外,從零值到零值(null-to-null)也是定義頻寬的一種方法,而最後一種,則是定義雜訊的雜訊頻帶寬(noise bandwidth)。

  位元(bit)一詞則是來二進位數字(binary digit),被視為資料的最小單位,只有兩種值0、1,也因此發展出各種來源編碼(source code),譬如ITA#2(CCITT)、由美國國家標準局訂定的ASCII code、還有IBM的8-bits EBCDID(二進位和十進位的交換碼),在這些由一串(5~8bits)連續位元組成的編碼方式中,因為8是2的三次方,所以通常8-bits的碼會比較適合應用在數位訊號處理。當我們在測量資料的傳輸容量時,我們會使用二進位來表示,也就是每秒多少位元通過(bits pre second),也就是我們要討論到的位元率(bit rate)。

  一開始我們說頻寬和傳送位元率的關係是 1 b/Hz,這是最粗略的概算,也就是說當位元的傳輸速率是2400b/s的時候,需要的頻寬也是2400Hz,很顯然並不符合今日的要求。來自貝爾(Bell)實驗室的H.Nyquist和Claude Shannon,為消息理論貢獻良多的兩位先驅者,分別提出了Nyquist Bandwidth和Shannon Theorem。Nyquist Bandwidth講的是,若只考慮在傳送時inter symbol的干擾,那麼只要使inter symbol可以正交,就可以讓訊息可以不受干擾的以二維的方式送出去,也就是說如果一個系統的頻寬是B,那麼最高的訊息傳送率是2B,並且可以保證無錯誤的傳送。另外,Shannon Theorem提出了一個代表頻道容量的式子:C(bps) = WLog2(1+SNR),也就是說,傳送訊息的頻道有一個極限,如果超過了這個極限速率,那麼錯誤率就會到達100%。然而至今主要使我們無法達到Shannon極限的原因就是因為相位的失真,當傳送速率超過某一個點,inter symbol的干擾就為位元錯誤帶來重大的影響。  

  依靠高層次調變技術,將我們要傳送的位元以”打包”(packing)的方式、用不同的調變方法傳送出去,使得資料的傳送量可以遠大於1b/Hz甚至是Nyquist提出的2b/Hz,稱為壓縮(squeezing)。就相位調變來說,雙相位鍵移調變(BPSK)指的是把位元(1、0)用相位0°或180°的方式來傳送,也就是說每次傳送只包含1個位元的資料量。而四相位鍵移調變(QPSK)則是分別將00、01、10、11載在0°、90°、180°、270°的相位上傳送出去,所以每次傳送都包含了2個位元的資料量;除此之外,還有8-ary PSK(就是每次傳送包含3個位元),常用於CCITT的V.27,以及另外一種結合了8-ary PSK和兩種振幅變化的調變方式,使得每傳送一次可以包含4個位元的資料量,用於CCITT的V.29。然而,天下沒有白吃的午餐,使用M-ary的代價相對的要增加SNR,以上提到除了相位的調外還要加上振幅的調變,所以需要比較大的訊號能量。但只有一個例外,就是BPSK和QPSK,因為QPSK實際上是由兩個BPSK相差90°所組成,所以不需要提供額外的訊號能量,另外一個使用M-ary的代價就是錯誤更容易發生,因為用來調變的方法越複雜,而分析出來的error quantization越小,所以錯誤率提高。鮑得(baud) 一詞則是為了要紀念電報之父-Emile Baudot而來,用來表示每秒傳送電碼數的一個單位,譬如說一個2400b/s的數據機,如果以QPSK的方式來調變,那麼它的baud rate就是1200baud,在二進位範圍來說,baud和每秒傳送位元數是一樣的單位,但是在M-ary的系統裡面就完全不一樣了,另外,我們也常常把symbol rate和baud單位搞混,symbol一詞常用在廣播領域,在數位傳送系統裡面,我們說把要傳送的訊號(bit/s)送到前向糾錯(forward error detection FEC)系統裡面去,會得到轉換而成的symbol (symbol/s),而symbol再送入M-aray調變後才是baud,最後才傳出去,因此symbol本質上跟baud是不一樣的,然而所謂前向糾錯(FEC),是一種消弭雜訊效應的技術,廣泛地使用於各種數位資訊系統中,其運作原理在於設計一套特別的編碼方式,使得信號接收端設備可以找出一串數位信號中錯誤的部份,將其更正成原來正確的內容。

  所謂頻寬,關係到的是每秒傳送幾次,而不是每秒傳了幾個位元,比如說二進位基頻方波(binary baseband waveform) RZ和NRZ兩種傳送方式,很明顯RZ傳送相同的位元量卻需要方波變化比較多次,因此頻寬只關係到傳送變化的次數,而不是訊息位元本身。數位傳輸關係到兩種損失,一是群體延遲(group delay),二是振幅的失真(amplitude distortion),在傳送的媒體中我們並不能改變既定的頻寬,然而我們卻可以減少這些損失對頻寬的影響。以下,是在通訊裡我們希望能在每單位頻寬裡面包入越多位元越好的三個領域:1.聲音頻道:在通訊網路裡的頻寬只有3100Hz,而V.34bis的數據機可以提供約33.6kb/s的位元傳輸速率,更甚者如果限制在PCM頻道中,U-2數據機可以達到56Kb/s。2.用戶迴路:在用戶端的下游迴路受限於迴路的距離和狀態,並且有較多種方法可以增加資料傳决的速率,如ISDN或XDSL之類的。3.直線電波的數位微波工程。

  相對於位元打包起來,分散頻譜也是一種數位傳輸的技術,除了可以避免系統互相干擾的風險之外,還可以將發射信號與背景雜訊混合,以避免他人截聽,並且提供數個用戶共同使用一個傳輸波道,Engelson和Hebart曾經提到,相較於AMPS系統,分散頻譜的技術可以使每單位頻寬增加15倍的使用者空間。CDMA就是擴頻技術應用的一個例子,所謂CDMA(碼分多址)是為現代行動通訊網所要求的大容量、高質量、成本低、傳輸速率高、國際漫遊等要求而設計的一種移動通訊技術,它將具有某一定頻寬的訊號擴展到遠大於原頻寬的頻道上,經載波調變傳送出去之後,再由接收端換成原來的窄頻信號,來實現通訊,而CDMA之所以能容納大容量的原理,可以如此舉例:把頻寬想成一個大房子,所有的人都將進入唯一的一個大房子,如果他們都使用不同的語言,那麼相同語言的人對談就可以清楚的聽到對方的聲音除了受到一些來自其他談話的干擾,把房子裡的空氣想像成頻寬的載波,不同語言當成不同的編碼,因此我們可以不斷的增加用戶直到整體噪音限制了所有的對談,只要我們可以控制用戶的訊號強度保持高質量通話,就可以增加更多的用戶。CDMA被美國高通公司開發出來之後,直到1993年TIA(美國通信工業協會)確定CDMA為系統標準,如今在世界各地廣泛使用。

  總而言之,在傳輸媒介上的頻寬是既定無法改變的事實,然而頻寬能支持多少位元速率卻來自很多因素的影響,包括使用何種調變波形、媒介限制所產生的延遲、訊號層次、雜訊、還有調變方式…等等。就在人類正要走入資訊時代的開端時, Shannon堂而皇之的打開了數位資訊革命的大門,C=Blog2(1+SNR) bits/sec,由這個公式,人類可以計算出通訊頻道的容量和限制,石破天驚的發現為數位革命開啟了新頁,他證明了無論通訊頻道在任何雜訊之下,只要你在編碼理論下功夫(Channel Coding),使傳輸信號本身具有自動更正錯誤之智慧,永遠都有可能接收到從發射端而來的正確信號。從此通訊科技驚人的發展著,而其原理都建築在Shannon的理論上,資訊理論激發數位革命,由於在數位形式下資訊才能具有錯誤修正編碼之能力,所以人類就此把所有自然界信號先轉換成數位離散信號,以方便處理和傳輸。

reference: http://www.ndhu.edu.tw/~comput/elearning/others/comm/sld001.htm

http://www.cqinc.com.tw/grandsoft/cm/050/

http://it.enorth.com.cn/system/2002/01/17/000246685.shtml

http://www.ptsn.net.cn/xueyuan/show_knowledge.php?auto_id=11

| 0 意見 ]

来自CSDN博客 http://blog.csdn.net/csalp/archive/2011/05/23/6439727.aspx

 LINUX TC:HTB相关源码

       
HTBhierarchy token buffer)是linux tctraffic control)模块中的排队队列的一种。它的配置比CBQ要简单.同时实现功能也很强大。下面,就来看看,HTBlinux中的源码。
1、 Qdisc_ops的注册

先从module_init函数看起(遵从fudan_abc的建议)
static int __init htb_module_init(void)
{
return register_qdisc(&htb_qdisc_ops);
}
上面的code会调用register_qdisc函数,将htb_qdisc_ops注册到系统中,那么htb_qdisc_ops包含了那些内容:
static struct Qdisc_ops htb_qdisc_ops __read_mostly = {
.cl_ops = &htb_class_ops,
.id = "htb",
.priv_size = sizeof(struct htb_sched),
.enqueue = htb_enqueue,
.dequeue = htb_dequeue,
.peek = qdisc_peek_dequeued,
.drop = htb_drop,
.init = htb_init,
.reset = htb_reset,
.destroy = htb_destroy,
.dump = htb_dump,
.owner = THIS_MODULE,
};
可以看出,htb_qdisc_ops其实就是注册了htb管理queue的函数,最重要的莫过于:enqueue dequeue函数,它们作用如同它们的名字一样。那么到底将htb_qdisc_ops注册到那了呢?
这就要看看register函数了
static struct Qdisc_ops *qdisc_base;
/*
*qdisc_base 就是系统维护所以qdisc所使用的变量,系统中的所有的qdisc都要
*注册到这变量变量中
*struct Qdisc_ops中,包含了成员(struct Qdisc_ops *next
*也就是,所以的qdisc是以链表的形式存在的
*/
int register_qdisc(struct Qdisc_ops *qops)
{
struct Qdisc_ops *q, **qp;
int rc = -EEXIST;
write_lock(&qdisc_mod_lock);
/*
*首先,检测这个qdisc是否已经注册过了,这是通过比较id实现的,
*id的类型是char 数组:char id[IFNAMSIZ];IFNAMESIZ=16
*htbid=”htb”
*/
for (qp = &qdisc_base; (q = *qp) != NULL; qp = &q->next)
if (!strcmp(qops->id, q->id))
goto out;
/*
*然后检测ops中的enqueuedequeuepeek函数,
*如果这些函数都没有被初始化,将使用noop_qdisc_ops函数来初始化
*noop_qdisc_ops也是Qdisc_ops结构,
*它的作用就像是定义了Qdisc_ops的默认值
*/
if (qops->enqueue == NULL)
qops->enqueue = noop_qdisc_ops.enqueue;
if (qops->peek == NULL) {
if (qops->dequeue == NULL)
qops->peek = noop_qdisc_ops.peek;
else
goto out_einval;
}
if (qops->dequeue == NULL)
qops->dequeue = noop_qdisc_ops.dequeue;
/*
*然后检测cl_ops成员。
*cl_ops是结构Qdisc_class_ops
*它定义了用于管理挂载到这个qdisc下的所有class(或者qdisc
*/
if (qops->cl_ops) {
const struct Qdisc_class_ops *cops = qops->cl_ops;
if (!(cops->get && cops->put && cops->walk && cops->leaf))
goto out_einval;
if (cops->tcf_chain && !(cops->bind_tcf && cops->unbind_tcf))
goto out_einval;
}
/*
*最后将新的qops插入到链表的尾部:*qp = qops;
*这样就注册完成了
*/
qops->next = NULL;
*qp = qops;
rc = 0;
out:
write_unlock(&qdisc_mod_lock);
return rc;
out_einval:
rc = -EINVAL;
goto out;
}
EXPORT_SYMBOL(register_qdisc);
Qdisc_class_ops是管理这个tree的,那么看看htbcl_ops有哪些函数:
static const struct Qdisc_class_ops htb_class_ops = {
.graft = htb_graft,
.leaf = htb_leaf,
.qlen_notify = htb_qlen_notify,
.get = htb_get,
.put = htb_put,
.change = htb_change_class,
.delete = htb_delete,
.walk = htb_walk,
.tcf_chain = htb_find_tcf,
.bind_tcf = htb_bind_filter,
.unbind_tcf = htb_unbind_filter,
.dump = htb_dump_class,
.dump_stats = htb_dump_class_stats,
};
我们知道,tc qdisc命令添加qdisc到某个设备后,为了对数据包进行分类,需要使用tc filter 来添加fitler到某个qdisc 当数据包来时,通过fitler来区分数据包,并转发到不同的subqdisc 或者subclass。而绑定fitler都是通过函数:bind_tcf来实现的。






| 0 意見 ]

先进先出(FIFO)队列是最基本的队列。所有的数据包被平等对待,按同样的顺序放入唯一的队列。FIFO 队列也被成为First­come, first­served (FCFS)队列. (See Figure 2.2.1)
如果没有为网卡界面特别指定一个队列规则,FIFO就是缺省的规则。
现在来看看怎样在以太网界面eth0上用tc设置FIFO队列,linux下的命令是

#tc qdisc add dev eth0 root pfifo limit 10
'tc' : 工具
'qdisc' : 告诉tc,我们在配置一个队列规则(queue discipline). 如果是配置一个类或过滤器,这里可以是'class'或'filter'.
'add' : 表示添加。
'dev eth0' : 要添加到的设备或接口。
'root' : 表示根队列。
'pfifo' : 表示我们的队列是pfifo(packet-fifo).
'limit 10' : 最终,pfifo需要仅一个参数。'limit'指定队列可以保持的数据包个数是10。

查看配置用命令:

# tc qdisc show dev eth0

FIFO的优点:
1. 对基于软件的路由器,与更精心设计的队列相比,FIFO占用极低的计算负载。
2. FIFO的行为具可预见性。---数据报不会重新排序,并且最大延迟取决于队列的最大深度。
3. 只要队列深度保持短的,FIFO为网络资源提供一个简单的解决方案。无须为没一跳增加重要的排队延迟经验。

| 0 意見 ]

摘自 Liuw's Thinkpad

Archive for the ‘l7-filter’ tag

流量控制的一个小问题记录

如何让不同的程序走不同的网络(Web浏览器和BT),深层次的问题是如何让不同的协议走不同的网络。
我初步提出的解决办法有两个:一是设置本地代理;二是使用iptables的l7-filter。
代理的实现原理是让代理选择出口,这样只要为两个程序开两个本地代理即可。这解决的是“初步问题”。
用l7-filter是为了解决“深层次问题”。我个人没有使用过l7-filter,我的想法是,只要能把流量标记出来,那么就可以处理。然后学弟说他了解到l7-filter主要是用来做流量控制的,没有这个功能。当时也有其他事情,没有多想。
现在回想起来,做还是可以做的,虽然我没有自己做实验,但是我已经想像到整个流程是怎么样的了。也怪我原来说得不够清楚,只提到了l7-filter。

其实l7-filter只是完成标记流量的功能,真正的流量整形,还是得靠tc。

好吧,那么现在我们可以把深层次的要求看作一个设置QoS的问题,那么问题就很好办了。

流程有两步:

1. iptables及l7-filter为流量设置标记(–set-mark);

2. tc设置QoS参数,把不允许被mark数据流流出的接口对应数据流的速率设置为0(这话挺拗口的)。
具体我就不做了。

找点参考文档放下面吧。

| 0 意見 ]

orz ←这是小孩
OTZ ←这是大人
OTL ←这是完全失落
or2 ←这是屁股特别翘的
or2=3 ←这是放了个屁的
Or2 ←这是头大身体小的翘屁股
Or? ←这也是头大身体小的翘屁股
orZ ←这是下半身肥大
OTz ←这是举重选手吧
○rz ←这是大头
●rz ←这是黑人头先生
Xrz ←这是刚被爆头完
6rz ←这是魔人普乌
On ←这是婴儿
crz ←这是机车骑士
囧rz ←这是念“炯”
崮rz ←这是囧国国王
莔rz ←这是囧国皇后
商rz ←这是戴斗笠的囧
st冏 ←楼上的他老婆吗
sto ←换一边跪
org ←女娲/美人鱼
曾rz ←假面超人
益r2 ←闭起眼睛,很痛苦且咬牙切齿的脸;另一说法为无敌铁金刚
★rz ←武藤游戏
口rz ← 豆腐先生
__Drz ← 爆脑浆
prz ← 长发垂地的orz
@rz ← 呆滞垂地的orz
srQ ← 换一边并舔地的orz
圙rz ← 这是老人家的面
胎rz ← 这个是没眼睛的
囜rz ← 没有眼和口的
国rz ← 这是歪咀的
国rz ← 这是无话可说的
苉rz ← 这是女的
Ora ←衍伸用法,不过脚是跪着状态。
or7 ←尖屁股
囧兴←乌龟

| 0 意見 ]

In fact, susscees has its own function.

恆心是持之以恆的慢工

毅力是堅持到底的決心

勇氣是不被挫折打倒的動力

這三者缺一不可!!

| 0 意見 ]

| 0 意見 ]

台灣的流行音樂..........【台灣流行音樂】
台灣流行音樂有幾大特色:
一、KTV化—必須要簡單、反覆到人人都可以在KTV裡放聲高唱,方能大紅大紫
二、吉他化—許多創作人一開始接觸的樂器即為吉他,而吉他慣用的和絃進行便深深地宰制了國語流行歌曲的和聲架構(其實仍是等於換湯不換藥—旋律與歌詞更改,和絃進行類似)
三、簡單化—根據模仿的原理,國語歌曲在東施效顰時,勢必模仿部份後開始炒作,譬如R&B現象、哈韓哈日現象、擷取前段卻誠意不足地反覆刺激聽眾耳朵,甚至將原作之延伸發展捨去等現象
例A:平井堅之《Gaining Through Losing》V.S. F4《流星雨》—R&B的背景合音、複雜的絃樂編曲、中段R&B橋段全數捨去


例B、Al Jarreau《Morning》V.S. 張惠妹《一夜情》—只留開頭旋律與編曲風味,原曲後段轉調發展及即興全數捨去



台灣音樂創作人來源:
一、古典科班出身:黃韻玲、林隆璇…
二、民歌手︰李宗盛、游鴻明、張宇、陳綺貞…(註︰這裡所指民歌手,並非指參與民歌運動之早期創作者,而是泛指曾駐唱遊走於「民歌西餐廳」之自彈自唱者)
三、玩樂團︰庾澄慶、伍佰、五月天、張雨生、伍思凱、黃品源…
四、音樂製作助理︰陳昇…(許多從事幕後工作如編曲家、錄音師、樂手、經紀者亦為大宗)
前三項之來源還有可能由參加音樂大賽或唱片公司甄選而來,真正自我引薦或被星探發掘的情形,大多是發掘「藝人」的管道,而非發掘「創作人」的管道。
以下還有些國語流行歌曲的音樂分析,它們與原曲的動機、編曲、和絃、曲式,甚至連配器都很相似:
1. 黃舒駿《雁渡寒潭》 V.S. Elton John《Sixty Years On》


2. 周華健《寂寞的眼》 V.S. Dennis DeYoung《Call Me》


3. 黃品源《你怎麼捨得我難過》 V.S. Lionel Richie《Hello》


4. 庾澄慶《讓你媽媽New一下》 V.S. Earth Wind & Fire《Let's Groove》


5. 庾澄慶《整晚的音樂》 V.S. Gloria Eastfan《Rhythm Is Gonna Get You》


6. 張惠妹《一夜情》 V.S. Al Jarreau《Morning》


高明的即為仿效之作,不高明的就叫抄襲。
另一個有趣的例子是形象包裝問題,在塑造偶像時,連外表、選歌風格、舉止、化妝方面,都可能有雷同之處,但這並不一定是蓄意的,而是整體形象訴求所致
例:凡妮莎(Vanesia Carlton)《A Thousand Miles》 V.S. 王力宏《在每一秒裡都想見到你》





| 0 意見 ]

安裝新的skyeye 1.3.3 在 ubuntu 10.10 下
http://blog.csdn.net/matrix_designer/article/details/6403796

-----------------------------------------------------------------------

http://fenxiangdizhi.5d6d.com/thread-54-1-1.html

http://blogimg.chinaunix.net/blog/upfile2/100115000033.pdf

http://ftp.snapgear.org/pub/snapgear/tools/arm-linux/arm-linux-tools-20080623.tar.gz

http://www.uclinux.org/pub/uClinux/dist/uClinux-dist-20101026.tar.bz2

http://downloads.sourceforge.net/project/skyeye/skyeye-testsuits/skyeye-testsuite-1.3.2/skyeye-testsuite-1.3.2_rc1.tar.gz?r=http%3A%2F%2Fen.sourceforge.jp%2Fprojects%2Fsfnet_skyeye%2Fdownloads%2Fskyeye-testsuits%2Fskyeye-testsuite-1.3.2%2Fskyeye-testsuite-1.3.2_rc1.tar.gz%2F&ts=1321612068&use_mirror=nchc

sudo apt-get install libncurses5-dev

sudo apt-get install genromfs编译make;

错误:gui/x.cc:42: fatal error: X11/Xlib.h: 没有那个文件或目录
sudo apt-get install libx11-dev
make;
错误:gui/x.cc:48: fatal error: X11/xpm.h: 没有那个文件或目录
sudo apt-get install libxpm-dev




| 0 意見 ]

http://mypaper.pchome.com.tw/index/search/keyword=%E9%9B%BB%E8%85%A6%E6%A4%85&sfield=4

60×90
暢銷日本大受好評~151小牛皮高級辦公椅獨特彈力腰枕設計,讓您乘坐更舒適放在辦公室氣派豪華!!多功能設計的人體工學椅,多動向的調整方式可調整坐椅高度、頭枕高低與仰角度(可拆式)椅背…(詳全文)
                                                                       
90×60
銷售冠軍口碑最佳 111、131 人體工學電腦網椅辦公、打電腦最佳乘坐工學椅針對人體肌肉屬性所設計的工學椅全網布透氣性佳,全新控制機芯,後仰時扶手跟隨人體一同傾仰。坐墊前後坐深調整…(詳全文)
                                                                                    
70×90
歲月過半百,受過的腰傷,一再的提出抗議,不再能長時間坐在電腦桌前,或維持固定的姿勢。 大賣場買的 電腦椅 ,更是坐不住。 那天和老公去逛HOLA,看到一張椅子,號稱…(詳全文)
                                                                                    

| 0 意見 ]

http://hi.baidu.com/lovingjava/blog/item/85091aee5a2bdaf8cf1b3e7a.html

《一步步写嵌入式操作系统》环境配置2011-05-14 20:26最近在看一本书,叫《一步步写嵌入式操作系统》,感觉写的不错,让我想起以前看过的《Orange's一个操作系统的实现》,这书比那本书简单,毕竟这是写嵌入式的操作系统嘛,但是这本书的售后就不如那本书了,官方网站比《O》可要冷清多了,这就导致开发环境很难配置好,尤其是对于Linux外行来说就更难了。经过一天的琢磨,我总算把环境问题都给解决了,所以要赶紧记录下来以免以后忘了,顺便给其他学习《一步步写嵌入式操作系统》一书的人提供一点帮助。

1.首先从cygwin官网下载setup.exe,然后按照书中的提示安装就行了。(切记安装时选择gcc4和make组件)。建议安装的目录中不要有空格,我的安装目录是H:\cygwin\。(你们可以根据自己的情况选择其他的目录)

2.把从www.leeos.org上下载下来的leeos_tools_for_cygwin.tar.gz复制到H:\cygwin\usr中
3.打开cygwin,输入命令cd /usr
4.输入命令tar zxvf leeos_tools_for_Cygwin.tar.gz将刚才复制过来的压缩包解压到当前目录
5.输入命令echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/bin">>/etc/profile,输入这个命令其实就是设置cygwin的环境变量,不信看一下H:\cygwin\etc中的profile文件,在最下面多了一句话PATH=$PATH:/usr/leeos_tools_for_Cygwin/bin。重启cygwin

6.按照书上说此时就可以用命令arm-elf-gcc来编译C文件了,但是我无论怎么试,总是说permission denied,原来是我们没有权限来运行arm-elf-gcc命令。

我们在H:\ARMOS\usr\leeos_tools_for_cygwin\bin目录下找到了arm-elf-gcc.exe,于是我们在命令行中输入chmod 777 /usr/leeos_tools_for_Cygwin/bin/arm-elf-gcc.exe,此命令就是设置arm-elf-gcc.exe的权限,让我们有权限来运行它。

7.这是再次试着用arm-elf-gcc来编译c文件,会发现有一个错误error trying to exec 'cc1': execvp: No such file or directory,这意味着cygwin找不到cc1命令,

我们搜索一下,发现在H:\ARMOS\usr\leeos_tools_for_cygwin\libexec\gcc\arm-elf\4.4.2目录下有我们想要的cc1.exe,
我们可以用之前用过的方法再设置一下cygwin的环境变量让cygwin能够找到该目录下的cc1.exe,

所以我们输入命令echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/libexec/gcc/arm-elf/4.4.2">>/etc/profile,

此时再看一下H:\cygwin\etc中的profile文件,在最下面又多了一句话PATH=$PATH:/usr/leeos_tools_for_Cygwin/libexec/gcc/arm-elf/4.4.2,现在cygwin就能找到cc1.exe了。再次重启cygwin

8.现在在试一下用arm-elf-gcc来编译c文件,又会出现错误permission denied,这回我们一下就明白原因了,就是我们现在同样没有权限来运行cc1.exe,所以还用刚才的方法设置一下权限,这回输入chmod 777 /usr/leeos_tools_for_Cygwin/libexec/gcc/arm-elf/4.4.2/cc1.exe

9.如果在试着运行arm-elf-gcc来编译c文件的话,同样还会出现类似的permission denied和权限错误,所以我们干脆一下把需要设置的环境变量和权限都设置完。


所以,总结一下步骤
1.下载安装cygwin

2.将下载下来的leeos_tools_for_cygwin.tar.gz放到H:\cygwin\usr中,并用命令cd /usr和tar zxvf leeos_tools_for_Cygwin.tar.gz解压

3.设置环境变量,依次输入以下三条命令
echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/bin">>/etc/profile
echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/libexec/gcc/arm-elf/4.4.2">>/etc/profile
echo "PATH=\$PATH:/usr/leeos_tools_for_Cygwin/arm-elf/bin">>/etc/profile
然后重启cygwin

4.用chmod 777命令把刚才设置的三个目录下的所有exe文件都设置一下权限。(肯定有类似批处理的那种命令可以一下把所有exe文件都设置完,但是我对linux环境不怎么熟悉,所以在这里还是用的最原始的办法一个一个改,还好一共也没几个exe文件)
5.把skyeye.exe复制到H:\cygwin\usr\leeos_tools_for_Cygwin\bin中。这样就算把环境配置完了。呵呵,鼓捣了我一天啊,希望对有同样问题的人有帮助。

belovedtttl 2011-08-12 22:38 | 回复你好,留个qq 659346010 希望可以加我 相互讨论下

 4
Kongcsdn 2011-09-18 13:46 | 回复你好,能不能把那个/etc/profile这个文件给我发一下啊
我的总是提示unexpected end of file.
 5
gccman 2011-09-21 10:47 | 回复顶呱呱,不错,我也碰到同样问题,看了你这文章搞好了。以后的经验教训是碰到这类问题要认真执行下find命令。
 6
lovingjava 2011-10-11 22:17 | 回复回复Kongcsdn:不好意思,一直没有登录百度空间,你现在还需要那个文件吗,如果需要,把邮箱给我,我给你发过去。
 7
Kongcsdn 2011-10-12 20:53 | 回复回复lovingjava:啊,不用了。谢谢!嘿嘿,我自己又重装了一遍,现在好了!还是很感谢lz的热情~
 9
farce 2011-10-27 09:06 | 回复 chmod 777 -R *
(其中的-R是递归处理,*代表所有文件)