« Previous : 1 : 2 : 3 : 4 : Next »

ARM Register 구성 및 mode

1. ARM Register Set과 Mode
     - ARM9, 11의 경우 32-bit 범용 Register가 31개, 상태 Register가 6개 존재합니다.
       Mode는 총 7가지의 Mode(Supervisor, System, User, FIQ, IRQ, Abort, Undefined)를 갖는데,
       System Mode와 User Mode는 같은 Register를 사용하기 때문에 상태 Register가 6개가 됩니다.

     - Cortex A8의 경우는 기존 시스템에서 Monitor Mode가 하나 더 추가되어 해당 Mode를 위한
       Register 3개(SPSR, SP, LR)가 추가되어 총 40개의 Register로 구성됩니다.

사용자 삽입 이미지
2. Program Status Register 구성

사용자 삽입 이미지
     (※DNM(Do Not Modify) 영역은 소프트웨어로 수정해서는 안 되는 영역)

     2.1 Condition code Flag
              N: Negative/Less than   /  Z: Zero   /   C: Carry/Borrow/Extend   /   V: Sticky overflow
     2.2 Q Flag: Set the Sticky Overflow, 특정한 곱셈과 분수 산술 명령에서 ‘1’로 Set
     2.3 IT execution state bits:
              IT[7:5] - 현재의 IT blcok의 기본 조건 코드(base condition code)를 encode,
                           활성화 IT block이 없을 때 b000
              IT[4:0] - 조건적으로 수행될 명령의 수를 encode, 각각의 조건은 base condition code 또는
                           base condition code의 반전 값
              * Processor가 IT 명령을 수행할 때 명령의 조건에 따라 값이 set 되고, IT block을 수행하는
                 동안 IT[4:0]의 값이 shift.

     2.4 Java State bit:(T=1일 때) J=0; Thumb state / J=1; ThumbEE state
     2.5 GE[3:0]: 수행 결과의 각각의 half word 도는 byte에 대해서 크거나 같음을 지시함.
     2.6 E: Load/store Endianness를 제어하는 bit, ‘CFGEND0’ 입력을 사용해서 reset에서 초기화 할 수 있음.
     2.7 A: 자동적으로 ‘1’로 set되고 Imprecise data aborts를 불가능하게 할 때 사용함.
     2.8 Control Bits: I: Interrupt Disable bits   /   F: FIQ Disable bits   /   T: Thumb  동작 mode
             M[4:0]: 동작 모드 값, b10000(User), b10001(FIQ), b10010(IRQ), b10011(SVC), b10111(ABT)
                                            b11011(UND), b11111(SYS), b10110(MON)

3. Exception 우선순위
     (높음) Reset(1) > Precise data Abort(2) > FIQ(3) > IRQ(4) > Prefetch Abort(5)
               > Imprecise data Abort(6) > BKPT, Undefined Instruction, SVC, SMC(7) (낮음)

<참고자료>
  - Cortex-A8 Technical Reference Manual - ARM Information Center(ARM DDI 0344J):
    http://infocenter.arm.com/help/topic/com.arm.doc.ddi0344j/DDI0344J_cortex_a8_r3p2_trm.pdf
  - ARM Developer Suite Version 1.2 Developer Guide(ARM DUI 0056D):
    http://infocenter.arm.com/help/topic/com.arm.doc.dui0056d/DUI0056.pdf
  - ARM Technical Support Knowledge Articles: Use of MRS and MSR instructions
    http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3724.html

크리에이티브 커먼즈 라이센스
Creative Commons License

"Embedded" 카테고리의 다른 글

Posted by downright

2010/02/01 10:39 2010/02/01 10:39

Leave a comment
[로그인][오픈아이디란?]

ARM Assembly 명령어 정리

※ 용어 정의
     Rd: Destination Register   /   Rn: Operand1 Register   /   Rm: Operand2 Register
     <cond>: Execution Condition code
     <S>: S-Suffix - Status Update Suffix - SPSR의 값을 CPSR로 불러와서 Status를 Update
     <!> : ! - Suffix - Writeback Suffix - [,]내의 선처리 연산 수행 후 값을 갱신
     <Operand2>: Operand2가 가질 수 있는 형식
          ㄱ. #Immediate: 32bit  명령에서 Immediate값은 8-bit pattern의 짝수 shift 값 만을 허용
          ㄴ. Rm{, shift연산 #immediate}: Register(Rm)값에 #immediate 값으로 Shift 연산
               
                 § Shift 연산의 종류
               - asr(Arithmetic Shift Right): Immediate의 값 만큼 right shift, 앞에 bit는 Sign Extension
               - lsr(Logical Shift Right): Immediate의 값 만큼 right shift, 앞에 bit는 0으로 채움
               - lsl(Logical Shift Left): Immediate의 값 만큼 left shift, 뒤에 bit는 0으로 채움
               - ror(ROtate Right): Immediate의 값 만큼 rotate right, rotate후 bit 0값은 carry에 저장
               - rrx(Rotate Right eXtend): rrx는 1bit 씩 rotate right, bit 0값은 carry에 저장

1. 데이터 처리 명령(General Data Processing Instruction)

     1.1 산술 연산
Syntax: add<cond><S> Rd, Rn, <Operand2>

          add: Rd := Rn + <Operand2>
          sub: Rd := Rn - <Operand2>
          adc(ADd with Carry), sbc(SuBtract with Carry): Carry를 포함한 add, sub 연산
         
          rsb(Reverse SuBtract): Rd := <Operand2> - Rn
          rsc(Reverse Subract with Carry): Carry를 포함한 역 sub 연산

     1.2 논리 연산
Syntax: and<cond><S> Rd, Rn, <Operand2>

          and: Rd := Rn & <Operand2>
          orr:  Rd := Rn | <Operand2>
          eor: Rd := Rn ^ <Operand2>
          bic: Rd := Rn & !<Operand2>

     1.3 Register 값 저장
Syntax: mov<cond><S> Rd, <Operand2>

          mov: Rd := <Operand2>
          mvn: Rd := !<Operand2>

     1.4 비교
Syntax: cmp<cond><S> Rn, <Operand2>

          cmp: Rn값에서 Opeand2값을 빼서 그 결과를 Status flag에 반영, SUBS와 동일한 명령
          cmn: Rn값에서 Operand2값을 더해서 그 결과를 Status flag에 반영, ADDS와 동일한 명령

          tst: Rn과 Opearand2를 bit and 연산을 수행해서 그 결과를 Status flag에 반영, ANDS와 동일한 명령
          teq: Rn과 Operand2를 bit xor 연산을 수행해서 그 결과를 Status flag에 반영, EORS와 동일한 명령

2. 메모리 접근 명령(Memory Accesss Instruction)

          Syntax: ldr<cond><B> Rd, label
                       ldr<cond><B><T> Rd, [Rn]
                       ldr<cond><B> Rd, [Rn, FlexOffset]<!>         ;Pre-Indexed<Auto-Indexing>
                       ldr<cond><B><T> Rd, [Rn], FlexOffset        ;Post-Indexed

          <B>: B Suffix가 있을 경우 8-bit Unsigned byte 단위로 Access, 없을 경우 32-bit word로 Access
          <T>: T suffix가 있을 경우 Processor가 User mode에서 memory access 처리
          FlexOffset:
               ㄱ.#Immediate: -4095 부터 -4096사이의 상수 값
               ㄴ.{-}Rm{, shift연산}: Rm은 음의 부호를 가질 수 있으며, Rm의 Shift 연산도 가능함

     2.1 Load 또는 Store 명령 예제

          ldr r0, [r1]: r1에 저장된 주소를 이용해서 메모리로부터 r0로 값을 불러옴
          str r0, [r1], #4: r0의 값을 메모리의 r1의 주소에 저장하고 r1을 +4함.
          참고) 부호가 있는 Halfword, Byte로 읽을 때는 SH(Signed Halfword), SB(Signed Byte) <--(ldr only)
                  Unsigned Halfword로 읽거나 저장할 때는 H를 사용.
                  Doubleword의 경우 D 를 사용, 이 때의 Offset은 {-}Rm 만 허용함.

     2.2 Multiple Load 또는 Store 명령

Syntax: ldm<cond><addrmode> Rn<!>, {reglist}<^>

          <addrmode>: address mode에는 총 8가지가 있으며, 4가지는 address의 연상 방식에 따른
                                구분이며 4가지는 stack의 특성에 따른 구분이다.
              - IA(Increment Address after each transfer), - IB(Increment Address after each transfer)
              - DA(Decrement Address after each transfer), - DB(Decrement Address after each transfer)

              - FD(Full descending stack): stack의 주소에 data가 저장이 된 상태이고, 주소가 감소하면서 저장
              - ED(Emtpy descending stack): stack의 주소에 data가 없는 상태이고, 주소가 감소하면서 저장
              - FA(Full ascending stack): stack의 주소에 data가 저장이 된 상태이고, 주소가 증가하면서 저장
              - EA(Emtpy ascending stack): stack의 주소에 data가 없는 상태이고, 주소가 증가하면서 저장

          <!>: ! - Suffix가 있을 경우 마지막 주소(최종으로 이동한 주소)를 Rn에 저장함
          <^>: SPSR의 값을 CPSR에 넣어줌, S-Suffix와 동일한 기능을 수행함.

          ldm: Rn으로 부터 reglist에 지정한 register 수 만큼 값을 불러옴
          stm: reglist에 있는 register의 값들을 Rn에 저장함.

          [주의] Reglist에 지정한 Register의 순서와 상관없이 Register의 번호가 낮은 값이
                    메모리의 낮은 주소에 저장 또는 읽어진다. reglist는 'r1,r2,r3' 또는 'r1-r3'으로 표현
          [자주 사용되는 형식] STMFD sp!, {r4-r7,lr} / LDMFD sp!, {r4-r7,pc}

3. 분기 명령(Branch Instruction)

Syntax
: b<cond> label

     b: label이 있는 주소로 branch(PC값에 label의 주소를 입력)
     bl: 다음 명령의 주소를 lr에 저장하고, b와 같이 label의 주소로 branch

4. 기타 명령어
     4.1 Software Interrupt
Syntax: swi<cond> Immediate_24bit

          swi: 지정한 번호를 갖는 Software Interrupt를 발생시킴, 해당 번호에 맞는 SWI vector로 branch
               (Software Interrupt가 걸리면 프로세서의 모드는 Supervisor로 변경됨)

     4.2 PSR Access
Syntax: mrs<cond> Rd, psr

                    psr에 지정한 값(cpsr 또는 spsr)로 부터 값을 불러와서 Rd에 저장 (Register <- PSR)

Syntax: msr<cond> psr_(field), #Immediate_8bit
msr<cond> psr_fields, Rm      

                    Register(Rm)의 값 또는 8bit Immediate값을 psr(cpsr 또는 spsr)에 저장 (Register -> PSR)
                    (field): f, s, x, c 값이 선택적으로 올 수 있음. 지정한 field 영역에만 값을 저장함.

          [주의] 프로세서가 User 또는 System mode일 때는 SPSR에 엑세스 하지 말아야 한다.
          [자주 사용되는 형식] msr CPSR_c,r0

5. 상태 플래그와 실행 조건 코드(Status Flags & Execution Condition Codes)
     N: 연산 결과가 음의 값을 가질 때 Set '1'
     Z: 연산 결과가 영일 때 Set '1'
     C: 연산 결과가 캐리(Carry)를 가질 때 Set '1'
     V: 연산 결과 오버플로우(Overflow)를 발생시킬 때 Set '1'

사용자 삽입 이미지
<ARM Instructioin Set>
사용자 삽입 이미지
     ① opcode<cond><S> Rd, Rn, #Immediate
     ② opcode<cond><S> Rd, Rn, Rm OP #Imm
     ③ opcode<cond><S> Rd, Rn, Rm OP Rs
          - cmp, cmn 명령에서는 Rd는 무조건 '0' 값을 넣어줘야 함.(SBZ(Should Be Zero))

     ④ opcode<cond> Rd, Rn, #Immediate
     ⑤ opcode<cond> Rd, Rn, Rm OP #Imm
     ⑥ opcode<cond> Rd, <address>
     ⑦ opcode<cond><addrmode> Rm, Register_List^
     ⑧ opcode<cond><addrmode> Rm<!>, Register_List
     ⑨ opcode<cond><addrmode> Rm<!>, Register_List^
          - P='1' Pre, P='0' Post / U='1' Increment, U='0' Decrement / B='1' Byte load, B='0' Word load /
            W='1' Write-back(Auto-Index) W='0' / L='1' opcode는 ldr, L= '0' str /
            I='1' Addr_mode가 모두 Offset field I='0' 앞에 Addr_mode는 '0' 뒤에 Addr_mode는 Rm /
            S='1' Signed, S='0' Unsigned / H='1' Half Word, H='0' Word or Byte

     ⑩ b<cond> #Target Address(24bit Offset) - L의 값이 '1'이면 bl 명령

     ⑪ SWI #SWI Number

     ⑫ mrs<cond><S> Rd, PSR
     ⑬ msr<cond><S> PSR_<Field_Mask>, Rm
     ⑭ msr<cond><S> PSR_f, #Immediate
          - S의 값이 '1'이면 SPSR에서, '0'이면 CPSR.
          - SBO(Should Be One) 영역은 '1'로, SBZ(Should Be Zero) 영역은 '0'의 값을 넣어줘야 함

<ARM Assembly 명령어 정리표>
<참고자료>
  - ARM Developer Suite 1.2 Assembler Guide(ARM DUI 0068B):
    http://infocenter.arm.com/help/topic/com.arm.doc.dui0068b/DUI0068.pdf
  - ARM Asssembly Language Programming: http://www.arm.com/miscPDFs/9658.pdf
  - kkamagui의 프로그래밍 작업실 ARM 어셈블리: http://kkamagui.springnote.com/pages/432792
  - ARM Instruction Quick Finder: http://www.heyrick.co.uk/assembler/qfinder.html
  - ARM Reference - rE Ejected: http://re-eject.gbadev.org/ =>ARM_Reference-rE.Ejected.pdf 자료 출처
크리에이티브 커먼즈 라이센스
Creative Commons License

"Embedded" 카테고리의 다른 글

Posted by downright

2010/01/20 21:27 2010/01/20 21:27

Leave a comment
[로그인][오픈아이디란?]
데이터를 수집하고, 계산을 통해 얻은 결과는 이미 있다는 전제하에
이를 그래프(이미지)로 보다 잘 표현하기 위한 방법을 소개하려고 합니다.
http://downrg.com/249, http://downrg.com/250
위 게시물도 같이 참고하면 도움이 될 것 같습니다.
내용이 비슷할 수 있으나 이번에 올리는 글들은 보다 실용적으로 사용하기 위한
방향으로 정리해보겠습니다.

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

1. Figure 창의 도구(Toolbar)

사용자 삽입 이미지
< Camera 도구를 제외한 모든 도구를 표시한 Figure 화면 >

기본적으로 View->Figure Toolbar가 표시되어 있습니다.
이 도구에는 새로운 figure창을 만든다거나, figure 결과물을 fig 또는 이미지로 저장하기 위한
도구버튼들이 포함되어 있습니다.
도구의 모양만을 보고 기능을 추측할 수는 있지만 그중에 유용한 도구들 몇개만 설명하자면~

먼저 Data Cursor 도구  가 있습니다. Figure에 나타낸 그래프는 기본으로 결과값이 표시되지 않습니다.
따라서 특정 위치의 값을 보려고 할 때 사용하는 도구 입니다.
도구를 선택하고 그래프를 선택 또는 드래그를 하면 해당 위치의 값을 알 수 있습니다.
Alt키를 누른 상태에서 클릭을 할 경우 여러 군데에 데이터 값을 표시 할 수 있습니다.
(마우스 우측 버튼를 누르고 Create New Datatip을 선택하셔도 됩니다.)
반대로 지울 때는 Datatip을 선택하고 delete키를 누르면 됩니다.

그래프를 한 화면에 여러개 표시하게 될 경우 범례가 필요합니다.
 버튼을 선택하면 자동으로 범례를 표시할 수 있습니다.
범례 항목의 이름은 마우스 커서 버튼이 선택된 상태에서
그래프를 선택하고 Display Name을 수정해주면 자동으로 업데이트 됩니다.
(아래 첨부한 < Figure - Property Editor 창 화면 > 그림 참조)

다음으로  버튼은 Plot tool들을 보이거나 감추는 도구입니다.
버튼을 클릭하게 되면 지정한 툴들이 보여지게 되고, 반대로 옆에 버튼을 누르면
모든 tool들이 숨김 상태가 됩니다.

기본 도구(Figure Toolbar)에서 마우스 커서 버튼을 누르고 그래프를 선택한다음
마우스 우측 버튼을 누르게 되면 아래와 같은 화면을 볼 수 있습니다.

사용자 삽입 이미지

그래프의 색을 변경할 수도 있고, 선의 굵기, 선의 모양,
마커의 모양이나 크기등을 고칠 수 있습니다.
하지만 이렇게 적용한 값은 m-file로 작성한 코드가 아니기 때문에
같은 그래프를 다시 plot할 때 속성이 지워집니다.

따라서 자신이 설정한 값들을 나중에 다시 사용하기 위해서는
이 값들 code로 작성할 필요가 있습니다.
이 때는 Show M-Code 버튼을 눌러서 자신이 정한
속성에 대한 코드를 볼 수 있습니다.

Show Property Editor 기능을 이용하면 위에 나온 속성들을 별도의 창을 통해
설정할 수 있습니다. 데이터의 형태에 따라서 Plot type을 바로 수정할 수도 있습니다.
그래프 함수의 속성등을 전부 알고 있기는 어렵기 때문에 Property editor를 통해
속성들을 적용시키고 위에서 말한 Show M-Code를 통해
code를 작성하는 것도 편리한 방법이라고 생각됩니다.

사용자 삽입 이미지
< Figure - Property Editor 창 화면 >

<참고> Figure 함수와 관련된 Property
m-file내에서 여러 plot을 다른 창에 표시하려고 할 때 figure 함수를 사용하게 됩니다.
그냥 figure라고 입력하여도 새로운 창이 생성되지만, 보다 보기 좋게 하기 위해서는
추가적인 코드가 필요합니다. 창의 이름을 설정하고, 창의 번호 표시, 위치 등을 설정할 수 있습니다.
figure('Name','창이름','Numbertitle','On 또는 Off','Position',[left, bottom, width, height])


2. 그래프와 관련된 함수 목록 정리
  ㄱ. 2-D 그래프 함수 종류

     - Line Graphs: plot, plotyy, loglog, semilogx, semilogy, stairs, contour, ezplot, ezplot, ezcontour
     - Bar Graphs: bar, barh, hist, pareto, errorbar, stem
     - Area Graphs: area, pie, fill, contourf, image, pcolor, ezcontourf,
     - Direction Graphs: feather, quiver, comet
     - Radial Graphs: polar, rose, compass, ezpolar
     - Scatter Graphs: scatter, spy, plotmatrix

사용자 삽입 이미지
  ㄴ. 3-D 그래프 함수 종류
     - Line Graphs: plot3, contour3, contourslice, explot3, waterfall
     - Mesh Graphs and Bar Graphs: mesh, meshc, meshz, ezmesh, stem3, bar3, bar3h
     - Area Graphs and Constructive Objects: pie3, fill3, patch, cylinder, ellipsoid, sphere
     - Surface Graphs: surf, surfl, surfc, ezsurf, ezsurfc,
     - Direction Graphs: quiver3, comet3, streamslice
     - Volumetric Graphs: scatter3, coneplot, streamline, streamribbon, streamtube

사용자 삽입 이미지
* 자료출처: MATLAB User Guide

---------------------------------------------------------------------------
다음에 정리하려고 하는 내용은 그래프의 데이터 값을 보다
알아보기 쉽게 하기 위한 Annotating과 관련된 기능들과 함수들을 정리할 예정입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2009/12/18 21:35 2009/12/18 21:35

Leave a comment
[로그인][오픈아이디란?]

PCSpim - MIPS Simulator

사용자 삽입 이미지
< 사용방법 >
1. asm 또는 s 확장자로 MIPS 코드를 작성합니다.
2. PCSpim에서 File -> Open 으로 파일을 불러옵니다.
3. Simulator -> Go를 누르고 시작 주소를 입력해주면 실행됩니다.
4. Simulator에서 Step 기능을 이용하여 실행시킬 수도 있습니다.

*PCSpim - http://pages.cs.wisc.edu/~larus/spim.html
*MIPS/SPIM Reference Card - http://refcards.com/docs/waetzigj/mips/mipsref.pdf
크리에이티브 커먼즈 라이센스
Creative Commons License

"Embedded" 카테고리의 다른 글

Posted by downright

2009/09/22 14:32 2009/09/22 14:32

Leave a comment
[로그인][오픈아이디란?]

PSpice Simulation 결과 캡쳐 Tip

회로를 다 그린 후에 Simulation 결과를 문서나 그림으로 저장하는 것에 관해서
간단한 Tip을 알려드리려고 합니다.

기본 설정을 사용한다는 가정하에 Simulation 결과 화면을 보면 검은색 배경에
흰색 글씨로 결과가 나오게 됩니다.
이 화면을 직접 캡쳐할 경우 배경이 검정색이기 때문에 인쇄할 경우 가독성이 낮습니다.

사용자 삽입 이미지사용자 삽입 이미지

< 바로 캡쳐한 경우와 캡쳐 결과물을 색반전 한 경우 >


일부 사용자들은 캡쳐 후 색반전을 통해 바꾸기도 합니다.
이 경우 글자나 그리드가 진한 검정색으로 나오지 않고,
그래프의 색이 잘 쓰이지 않는 색으로 변하게 됩니다.

Window -> Copy to Clipboard 메뉴를 통해 캡쳐하여 문서에 넣는 방법을 추천드립니다.
이렇게 할 경우 배경색이 자동으로 변환되는 결과를 얻을 수 있습니다.

여기에서 중요한 것이 한가지 있습니다.
설정을 아래와 같이 체크를 해주셔야 합니다.
배경색을 투명하게 해주고, 그리드는 흰색을 검정색으로 바꿔줘야 합니다.

사용자 삽입 이미지
또 한가지~ 어떻게 보면 핵심이 될 수 있고, 간과할 수 있는 부분이기도 합니다.
붙여넣게 될 프로그램은 MS 계열의 프로그램(word, excel, powerpoint...)이어야 합니다.
한글이나 다른 프로그램을 사용할 경우 그래프의 색이 같이 검정색이 되어 흑백이미지가 됩니다.

사용자 삽입 이미지사용자 삽입 이미지

< Word에 붙여넣기 한 후 캡쳐, 한글에 붙여넣기 한 후 캡쳐 >


같은 캡쳐 결과를 워드에 넣은 경우와 한글에 넣은 경우의 차이를 캡쳐해보았습니다.
Word에 넣은 결과를 위에 색반전한 결과와 비교해보면,
그리드와 글자가 진한 검정색인 것을 알 수 있습니다.
그리고 그래프에 사용된 색이 그대로 유지되어 보기에도 더 좋은 것 같습니다.

이와 같이 차이가 나는 것은 ms계열의 붙여넣기 기능이 다른 프로그램과 다르기 때문입니다.
비슷한 예를 들면 포토샵에서 작업하던 이미지를 복사해서 한글로 붙여넣을 경우
이미지로 완전히 변환이 되어 들어가지만, word에 넣을 경우 더블클릭시
바로 포토샵과 연결되는 것을 볼 수 있습니다.

"나는 워드에 넣고 다시 한글에 넣는 것이 귀찮다."
"아예 검정색 결과물을 흰색으로 바꿀수는 없을 까?"
위와 같은 질문을 할 수도 있기에 한 가지 방법을 더 알려드리겠습니다.

Orcad가 설치된 폴더로 이동한 후에 pspice 폴더에 들어갑니다.
폴더안에 pspice.ini파일을 메모장으로 열고,
"[PROBE DISPLAY COLORS]" 이 항목 내에서
BACKGROUND = BRIGHTWHITE
FOREGROUND = BLACK
위와 같이 고쳐주시면 흰색으로 바뀐 결과를 바로 볼 수 있습니다.

사실 저도 처음에 word를 이용한 방법을 쓰기전에 이 방법을 찾았었고,
실제로 그렇게 사용해봤지만, 컴퓨터에서 그래프를 볼 때는 흰색보다는 검정색이
눈에 피로감을 덜 주는 것 같아서...현재는 word를 사용하고 있습니다.

<추가 팁> 캡쳐를 할 때 창의 크기를 자신이 원하는 크기와 비슷하게 조절 후 해야 가독성이 좋습니다.
그래프의 경우 크기가 변하여도 큰 문제가 되지 않지만, 글자의 경우 큰 그림을 강제로 줄이게 되면
알아볼 수 없습니다. 따라서 창의 크기를 먼저 조절한 후에 캡쳐하시기 바랍니다.

크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2009/06/30 12:09 2009/06/30 12:09

Leave a comment
[로그인][오픈아이디란?]

7-segment FND Symbol Library

사용자 삽입 이미지
FND(Flexible Numeric Display)에서 ASR은 Anode type으로
숫자 표현을 위한 data 입력이 GND값을 가지며, VCC를 공통으로 사용한다.
반대로 CSR은 Cathode type으로 data 입력에 VCC값이 들어가며, GND가 공통이다.

위에서 5163과 5263은 각 digit에 대해서 별도의 data 입력을
가지고 있지만 4401의 경우 data 입력을 4개의 digit가 공유해서 사용하고 있다.
따라서 주파수를 이용하여 COM1~4를 순차적으로 ON시켜서
점멸하도록 구성하면 동시에 켜진 것 처럼 보일 수 있다.

크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2009/05/28 01:01 2009/05/28 01:01

Leave a comment
[로그인][오픈아이디란?]

AVR과 CLCD를 이용한 디지털시계


사용자 삽입 이미지
ATmega128을 이용하여 구동시켜 보았습니다.
CLCD의 연결은 PORT A를 이용해서 4bit mode로 동작합니다.
CLCD의 동작이 제대로 되지 않을 경우 clcd.h의 시간 지연값들을
더 늘려보시기 바랍니다.
(자세한 내용은 "AVR을 이용한 CLCD 출력" 참조)

Timer는 64분주비를 이용하여 4us마다 증가합니다.
따라서 1ms 초를 세기 위해 TCNT0는 Timer Interrupt가 걸릴때
6부터 시작하게 하였습니다. (256-6) * 4us = 1ms
Interrupt 마다 time_count값을 증가키셔 1000이 되면 초 값을 증가시킵니다.
마찬가지 과정을 거쳐 시, 분, 초를 증가시킵니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

"Embedded" 카테고리의 다른 글

Posted by downright

2009/05/15 19:35 2009/05/15 19:35

Leave a comment
[로그인][오픈아이디란?]

AVR을 이용한 CLCD 출력

< 4bit mode를 사용하여 CLCD 구동하기 >
PORTA.7~4 - data_bit , PORTA.3 - not used
PORTA.2 - Enable, PORTA.1 - RW, PORTA.0 - RS
* Processor: ATmega128, Compiler: WinAVR, Simulation: AVR Simulator IDE


사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License

"Embedded" 카테고리의 다른 글

Posted by downright

2009/04/27 20:18 2009/04/27 20:18

Leave a comment
[로그인][오픈아이디란?]

Carry Look-ahead Adder Design

Carry Look-ahead Adder(캐리 예측 덧셈기)
 전가산기를 이용한 Ripple Carry Adder는 많은 bit의 연산을 하려고 할 때
지연되는 시간이 길어지는 단점을 갖는다.
 CLA(Carry Look-ahead Adder)의 경우는 carry의 발생을 bit입력시
바로 계산하여 시간의 지연 없이 바로 덧셈연산을 수행할 수 있는 장점을 갖는다.
 * 참고: http://en.wikipedia.org/wiki/Carry_lookahead_adder

< RTL(Register Transfer Level) Schematic >

사용자 삽입 이미지
사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License

"HDL" 카테고리의 다른 글

Posted by downright

2009/04/10 19:44 2009/04/10 19:44

Leave a comment
[로그인][오픈아이디란?]

Source Follower Design

< 설계 조건 >
* VDD=1.8V, Power budget = 1.8mW    * Voltage gain = 0.9
* Min. allowable output = 0.3V(VDS2≥0.3V 일 때 M2는 saturation)
* λ = 0.1 V-1   * L = 0.5 um   * VTH = 0.4 V   *μnCox=200 uA/V2

< 설계 과정 >
① 전류 결정(I): 소비전력을 1.8mW이내로 하기 위해서 전류는 1.8mW/1.8 = 1 mA 이내의 값을 가져야 한다.
                      I = 1mA로 결정 -> Ro = 1/(λ*I) = 10 / 1 = 10㏀

② 이득에 의한 gm1, Vov1 계산
       전압이득(Av)=gmro / (2+gmro) = 0.9 -> gmro = 18 -> gm = 1.8mA/V
       Vov1 = 2I / gm1 = 2 / 1.8 = 1.111V

③ 출력 전압 결정
       MOSFET의 saturation 동작을 위해 M2의 Vds2는 Vov2(0.3V)보다 커야하고,
       M1의 Vds1은 1.111V보다 커야 한다. 따라서 Vout은 0.3V 이상 0.698V 이하의 값을 가져야 한다.
       Vout는 최대의 swing을 위해 0.5V로 지정.

④ W1, W2 계산: (계산과정 생략-MOSFET의 Early effect를 고려한 전류식에 대입) W1= 3.5848㎛, W2 = 52.91㎛

⑤ Bias 전압 Vin과 Vb 결정
       Vb는 Vov2 = 0.3V, Vth=0.4V에 의해 0.7V로 결정.
       Vin도 마찬가지로 Vov는 1.111V와 Vout(Vs1)은 0.5V, Vth=0.4V에 의해 2.041V.

< Simulation 결과 >
사용자 삽입 이미지
< DC Bias Simulation Result >

사용자 삽입 이미지
< Time Domain - 1mV Sin Input >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2009/03/28 20:25 2009/03/28 20:25

Leave a comment
[로그인][오픈아이디란?]

2's compliment & Absolute Unit


2의 보수를 만드는 Unit의 경우 부호가 없는 8bit의 데이터를 입력받은 후
1의 보수를 취하기 위해 ~ 연산을 수행하였다.
그 뒤에 1을 더하여 2의 보수를 구하고 그 결과를 16bit로 확장하기 위해 { 비트1, 비트2 }로 묶었다.

절대값을 취하는 Unit의 경우 입력받은 데이터는 10bit의 signed number이다.
따라서 입력한 bit가 양수인지 음수인지 파악하기 위해 최상위 비트(MSB)값에 대한 조건문을 추가한다.
그 값이 참일 경우 음수임을 의미하므로, 1을 빼고 1의 보수를 취해서 양수로 만들어준다.
MSB가 0인 경우 양수이므로, 입력받은 데이터를 그대로 출력한다.

사용자 삽입 이미지

< 2's Complement Unit Simulation Result >

사용자 삽입 이미지
< Absolute Unit >
< Test Bench >

more..

크리에이티브 커먼즈 라이센스
Creative Commons License

"HDL" 카테고리의 다른 글

Posted by downright

2009/03/27 18:30 2009/03/27 18:30

Leave a comment
[로그인][오픈아이디란?]

4-Bit Ripple Carry Adder


반가산기 모듈을 이용해서 전가산기를 만들었다.(2개의 반가산기와 OR gate를 결합)
전가산기 4개를 직렬로 구성하여 4bit Ripple Carry Adder를 만들게 된다.
아래 그림은 Test Bech를 이용한 Simulation결과이다.

사용자 삽입 이미지

크리에이티브 커먼즈 라이센스
Creative Commons License

"HDL" 카테고리의 다른 글

Posted by downright

2009/03/20 18:58 2009/03/20 18:58

Leave a comment
[로그인][오픈아이디란?]

Sketching a Root Locus

1. - Root Locus는 Pole에서 출발해서 Zero에서 끝난다.
    - Pole의 수가 Zero의 수보다 많은 경우 나머지는 발산한다.
       (Parameter K는 0부터 무한대 까지의 값을 갖는다.)

2. - Phase Condition을 만족하는 Root Locus를 Real Axis에 그린다.
    - Real Axis위에 위치하지 않은 Pole과 Zero를 고려하지 않는 이유는 켤레 복소수이기 때문에
       둘의 Phase를 더하면 360도 이기 때문이다.
    - Real Axis에서 Root Locus를 찾는 요령은 Testing Point를 기준으로 오른쪽에 위치한
      Zero와 Pole의 개수의 합이 홀수이면 된다. 그 이유는 왼쪽에 위치한 Pole과 Zero는 Phase가 '0'도이기
      때문에 오른쪽에 있는 Zero와 Pole만 고려하면 되고, 그 개수가 홀수 일 때 180도이다.
   
3. - 발산하는 Pole의 점근선의 중심 위치와 각도를 계산해서 점근선을 그린다.
    - 점근선 각도와 중심 (n은 분모의 차수, m은 분자의 차수)
                            ,

4. - 하나의 Pole을 기준으로 출발각(Angle of departure)과 도착각(Angle of arrival)을 계산하여
      Pole의 이동 방향을 계산한다. 아래 식의 q는 기존 Pole에서 상대적으로 떨어진 거리를 의미한다.(1=제자리)
    - 출발각(도착각)을 알고 싶은 pole을 향해 다른 pole과 zero에서 벡터를 그리고 그 벡터가 이루는 각을 구한다.
     

5. - Pole이 LHP에서 RHP를 지나 Imaginary Axis를 지나는 점은 Routh's test를 이용해서
      K값을 찾고 그 때의 Imaginary 값을 구한다.

6. - Breakaway(or Breakin point): 전달함수의 분자를 a(s), 분모를 b(s)라고 했을 때 Ka(s)=-b(s)가 된다.
      (위와 같이 식이 나오는 이유는 Unit Feedback에서 특성 방정식이 1+Ka(s)/b(s)=0 이기 때문이다.)
      K에 대한 식(-b(s)/a(s))을 s에 대해서 미분한 값이 '0'이 되는 경우가 Breakaway 또는 Breakin point이다.
    - 특히 이 점은 s에 대해서 K의 값이 Max(Breakaway) 또는 Min(Breakin) 값에 해당한다.
    - 수식으로 표현하면 아래와 같다.
         

예제>
      
 

1. Pole의 위치는 0, -2, -1±2i, Zero는 없음. 따라서 4개의 Pole은 모두 발산할 것이다.

2. Real Axis 상에 있지 않은 -1±2i의 위상의 합은 360도 이므로, 무시하고 0과 -2 Pole을 기준으로
   Phase Condition을 만족시키는 영역이 Root Locus이다. 찾는 방법은 Test Point를 기준으로 우측에
   위치한 Pole과 Zero의 수의 합이 홀수개 이면 위상의 합이 180도 이다. 따라서 -2부터 0 구간이다.(아래 그림)

3. 점근선의 각도는 m이 0이고, n은 4이므로 ±45도, ±135도이다. 점근선의 중심은 α=(-2-1+2i-1-2i)/4=-1이다.

사용자 삽입 이미지
4. -1+2i에서의 출발각을 계산하면, Zero가 없으므로 -1+2i와 다른 Pole사이의 각을 구하면 된다.(l=0, q=1)
    0에서 그은 벡터가 이루는 각은 atan(2/-1), -2에서 이루는 각은 atan(2/1), -1-2i와 이루는 각은 90도 이다.
    같은 방식으로 출발각과 도착각을 계산할 수 있다.
   

5. Routh's Test를 이용해서 K를 구하면 16.25가 나오고, ω=±j1.58이 구해진다.(계산 과정 생략)

6. Beakaway Point(또는 Breakin Point)는 위의 공식에 의해 얻어지고, 그 값은 -1, -1±i1.22 이다.(계산 과정 생략)
사용자 삽입 이미지
사용자 삽입 이미지
< 최종 Root Locus >


*참고: Feedback Control of Dynamic Systems 5E

크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2008/11/11 12:27 2008/11/11 12:27

Leave a comment
[로그인][오픈아이디란?]

Digital/Analog Converter(DAC)

사용자 삽입 이미지
< D/A Converter >

7490 - Decade and Binary Counter
7404 - Hex Inverter, 7405 - Hex Inverter(Open drain)

사용자 삽입 이미지
< 출력 파형 >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/11/07 13:18 2008/11/07 13:18

Leave a comment
[로그인][오픈아이디란?]

2-Bit RAM Circuit

사용자 삽입 이미지
< 2 Bit RAM Circuit >

OE0, OE1 - Output Enable Bit 0, Bit 1
IN0, IN1 - Input Bit 0, Bit 1
WR0 - Write '0', WR1 - Write '1'

사용자 삽입 이미지
- Bit 0 Input Setting(0s ~ 60us), Bit 1 Input Setting(60us ~ 90us)
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/11/01 02:03 2008/11/01 02:03

Leave a comment
[로그인][오픈아이디란?]

Pulse를 지정된 수 만큼 발생

사용자 삽입 이미지

< Front Panel >

Offset 값은 상수로 2.5로 지정하였고, 진폭을 2.5로 해서 0, 5V 신호를 만들어주었다.
주파수에 대한 Sampling은 실제 주파수에 10배 이상으로 해야 원하는 파형의 모습을
관찰할 수 있고, Sample 수도 적절히 조절해야 한다.


사용자 삽입 이미지

< Block Diagram >

Trigger된 신호를 이용해서 Count를 할 경우 Pulse의 Peak값 단위로
값이 증가하기 때문에 최종 계산에서 나눗셈 연산을 필요로 할 것이다.
아니면 위와같이 Trigger된 경우 '참' 신호가 나오는 '데이터 이용 가능' 출력을
int형으로 변환해서 펄스의 수를 측정할 수도 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by downright

2008/10/29 16:35 2008/10/29 16:35

Leave a comment
[로그인][오픈아이디란?]

Decoder와 Encoder

사용자 삽입 이미지
사용자 삽입 이미지
< 2단 2진 카운터 회로 및 출력 파형 >

사용자 삽입 이미지
사용자 삽입 이미지
< 3진 카운터 회로 및 출력 파형 >

사용자 삽입 이미지
사용자 삽입 이미지
< Decimal to Excess-3 Encoder 회로 및 출력 파형 >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/10/23 22:10 2008/10/23 22:10

Leave a comment
[로그인][오픈아이디란?]

LTIVIEW - LTI Viewer GUI

LTIVIEW opens an empty LTI Viewer.
The LTI Viewer is an interactive graphical user interface (GUI) for analyzing the time and frequency
responses of linear systems and comparing such systems.
See LTIMODELS for details on how to model linear systems in the Control System Toolbox.

LTIVIEW(PLOTTYPE,SYS1,SYS2,...,SYSN) further specifies which responses to plot in the LTI Viewer. PLOTTYPE may be any of the following strings (or a combination thereof):
         1) 'step'           Step response
         2) 'impulse'        Impulse response
         3) 'lsim'           Linear simulation plot
         4) 'initial'        Initial condition plot
         5) 'bode'           Bode diagram
         6) 'bodemag'        Bode Magnitude diagram
         7) 'nyquist'        Nyquist plot
         8) 'nichols'        Nichols plot
         9) 'sigma'          Singular value plot
        10) 'pzmap'          Pole/Zero map
        11) 'iopzmap'        I/O Pole/Zero map

<example>

t=tf(1,[1,2,8]) %s^2 + 2 s + 8
ltiview(t)

사용자 삽입 이미지
1. 화면 구성 설정 : 'Edit -> Plot Configurations'
   - 화면 구성을 어떻게 나눌 것인지 설정하고, 각 부분에서 보일 항목을 선택

2. LTI Viewer 설정 : 'Edit -> Viewer Preferences' - 단위, 폰트나 색상, Simulation 구간 등 설정

3. 특성 보기 : 각 Plot 에서 마우스 우측 버튼을 누르고, 'Characteristics' 선택 후 아래 내용중 표시할 내용 지정
                   ('Peak Response', 'Settling time', 'Rise time', 'Steady state' 등...)
크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2008/10/16 19:53 2008/10/16 19:53

Leave a comment
[로그인][오픈아이디란?]

Counter Simulation

사용자 삽입 이미지
< 6bit Shift Register >

사용자 삽입 이미지
< Q0와 Q1을 '1'로 Preset 한 후 Shift Right 확인 >

==========================================================================
사용자 삽입 이미지
< Count Up/Down Counter >

사용자 삽입 이미지
< UD 값이 '1'이면 Count-Up, '0'이면 Count-Down >

==========================================================================

사용자 삽입 이미지
< Asynchronous Decimal Counter >
사용자 삽입 이미지
< Synchronous Decimal Counter >

사용자 삽입 이미지
< Decimal Counter Simulation >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/10/11 02:33 2008/10/11 02:33

Leave a comment
[로그인][오픈아이디란?]

Effect of Zeros and Poles

* Transfer Function
,
wn=2, jeta=1/2

1. Additonal Zeros



2. Additonal Poles


크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2008/10/04 14:41 2008/10/04 14:41

Comments List

  1. 하언수 2008/10/08 00:40 # M/D Reply Permalink

    오 이거 완전 맘에 드는거네용

Leave a comment
[로그인][오픈아이디란?]

Fourier series of Sawtooth wave

사용자 삽입 이미지
사용자 삽입 이미지
크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2008/10/03 20:43 2008/10/03 20:43

Leave a comment
[로그인][오픈아이디란?]

Latch & Flip-Flop Simulation

사용자 삽입 이미지
< R-S Latch 회로 >

사용자 삽입 이미지
< R-S Latch 출력 파형 >

위 출력에서 주의깊게 봐야할 부분은 처음 부분으로,
R과 S가 모두 '0'이면 Q와 QN 모두 '1'이 된다는 사실이다.
그리고, '00'에서 '11'로 바뀌게 되면 metastable 상태가 된다.
========================================================================================

사용자 삽입 이미지
< R-S Flip-flop with Clock Input 회로 >

사용자 삽입 이미지
< R-S Flip-flop with Clock Input 출력 파형 >

CLK은 DigClock 소자를 사용하고, 기타 다른 입력은 Stim1을 사용
========================================================================================

사용자 삽입 이미지
< Master-slave Clocked J-K Flip-flop 회로 >

사용자 삽입 이미지
< Master-slave Clocked J-K Flip-flop 출력 파형 >

* 참고: http://en.wikipedia.org/wiki/Latch_(electronics) 
       http://en.wikipedia.org/wiki/Flip-flop_(electronics)
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/10/02 21:00 2008/10/02 21:00

Leave a comment
[로그인][오픈아이디란?]

Multiplexer and DeMultiplexer

사용자 삽입 이미지
< Gate로 구현된 4x1 Multiplexer >

사용자 삽입 이미지
< 74HC153 : Dual 4-input Multiplexer >

사용자 삽입 이미지
< 출력 파형 >

==================================================================================
사용자 삽입 이미지
< Gate로 구현된 1x4 DeMultiplexer >

사용자 삽입 이미지
< 출력 파형 >

사용자 삽입 이미지
< 74HC139 : Dual 2 to 4 line DeMultiplexer >

사용자 삽입 이미지
< 출력 파형 >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Pspice" 카테고리의 다른 글

Posted by downright

2008/09/27 20:05 2008/09/27 20:05

Leave a comment
[로그인][오픈아이디란?]

NI ELVIS Traditional - Base Block

 National Instruments Educational Laboratory VirtualInstrumentation Suite

사용자 삽입 이미지
< ELVIS Ⅱ 제품 사진 >

사용자 삽입 이미지
< 기본 사용 가능한 Block들 >

사용자 삽입 이미지
< Oscilloscope >

사용자 삽입 이미지
< Bode Analyzer >

사용자 삽입 이미지
< Impedance Analyzer >

사용자 삽입 이미지
< Function Generator >

p.s. NI사의 ELVIS 제품은 현재 ver2까지 나와있는데,
지금 보는 화면은 Traditional. 즉, 1버젼에 관련된 이미지입니다.
장비에 대한 정보는 아래 홈페이지를 참고하시기 바랍니다.
(가격은 313만원이라고 하네요.)
http://sine.ni.com/nips/cds/view/p/lang/ko/nid/13137
크리에이티브 커먼즈 라이센스
Creative Commons License

Posted by downright

2008/09/25 21:41 2008/09/25 21:41

Leave a comment
[로그인][오픈아이디란?]

Dirac delta Function Approximation

DIRAC(X) is zero for all X, except X == 0 where it is infinite.
     DIRAC(X) is not a function in the strict sense, but rather a distribution with
     int(dirac(x-a)*f(x),-inf,inf) = f(a) and diff(heaviside(x),x) = dirac(x).

Dirac.m
function Y = dirac(X)
Y = zeros(size(X));
Y(X == 0) = Inf;

< Approximate Dirac delta Function >
사용자 삽입 이미지
< Matabl Promgram Source >

< Figure >
크리에이티브 커먼즈 라이센스
Creative Commons License

"Matlab" 카테고리의 다른 글

Posted by downright

2008/09/21 23:32 2008/09/21 23:32

Leave a comment
[로그인][오픈아이디란?]
« Previous : 1 : 2 : 3 : 4 : Next »