| 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 ←尖屁股
囧兴←乌龟