IT Devel

IPv6 EUI-64bit address 생성하기 - IPv6

Network

(원본글 https://supportforums.cisco.com/document/100566/understanding-ipv6-eui-64-bit-address)


MAC 어드레스로 Interface-ID를 생성해 내는 방식에 관한 것이다.

약간 변경된 것이 있다는 책의 내용을 보고 웹 서칭..

만드는 방법은 아래 그림과 같다.



문제는 맨 왼쪽 바이트의 2번째 비트이다.

이 비트가 로컬이냐 글로벌(?)이냐를 나타내는 비트.

이전 EUI-64의 경우 '1'이 로컬, '0'이 글로벌(영어로 univeral이네 ^^)이었는데,

Modified EUI-64에서는 이를 뒤집었다고.

The reason for inverting can be found in RFC4291 section 2.5.1.


일단, 우리는 최신껏만 기억하는게 좋을 듯.


Once the above is done, we have a fully functional EUI-64 format address. 

원본글에서 누구나 생각할 수 있는 질문이 있어 옮겨둠..

그럼 라우터에서는 이 비트를 활용하고 있는냐? 현재는 아무것도 하지 않는다는 내용.

Another doubt or frequently asked question is, are IPv6 devices (routers etc) today doing anything to that universal/local bit? Currently, nothing is being done be the U/L bit 1 or 0. However, per RFC4291 2.5.1 (The use of the universal/local bit in the Modified EUI-64 format identifier is to allow development of future technology that can take advantage of interface identifiers with universal scope), this may change in the future as the technology evolves. 

끝.



AMBA bus 에서 Byte access를 위한 코드조각

ARM(SoC,FPGA)

AMBA bus를 사용하는 경우, 바이트별 접근을 위해 판단하는 시그널 생성 코드 

(참고용, 책임 못짐 ^^)


// Generate byte access from AHB bus

assign byte0_access = (HSIZE[1] | ((HADDR[1]==1'b0) & HSIZE[0]) | (HADDR[1:0]==2'b00));

assign byte1_access = (HSIZE[1] | ((HADDR[1]==1'b0) & HSIZE[0]) | (HADDR[1:0]==2'b01));

assign byte2_access = (HSIZE[1] | ((HADDR[1]==1'b1) & HSIZE[0]) | (HADDR[1:0]==2'b10));

assign byte3_access = (HSIZE[1] | ((HADDR[1]==1'b1) & HSIZE[0]) | (HADDR[1:0]==2'b11));


설명을 하면 쉽지.

HSIZE[1] = '1'인 경우라면 32비트 access 이니 전부 '1'

HSIZE[1] = '0', HSIZE[0] = '1' 인 경우라면 16비트, 따라서 HADDR[1]을 보고 상위16, 하위 16비트씩 '1'

나머지의 경우, 바이트 접근이니 HADDR[1:0] 를 보고 각 바이트별 '1'


쉽다. =).

Realtek PHY RTL8201BL - MDC/MDIO 파형, 데이터시트

Network

Realtek PHY chip - 데이터시트

자주 찾는데, 보관용으로 하나 포스팅


MDC/MDIO 파형을 볼려구 했는데, 일단 그림도 캡쳐해 두고

파형을 보면 간단한 동작은 간단히 구현 가능~~ 




겸사겸사 간단한 설명도 스크랩


RTL8201BL


Single-Port 10/100M Fast Ethernet PHYceiver
 
General Description

The RTL8201BL is a single-port PHYceiver with an MII (Media Independent Interface). It implements all 10/100M Ethernet Physical-layer functions including the Physical Coding Sublayer (PCS), Physical Medium Attachment (PMA), Twisted Pair Physical Medium Dependent Sublayer (TP-PMD), 10Base-Tx Encoder/Decoder and Twisted Pair Media Access Unit (TPMAU). A PECL interface is supported to connect with an external 100Base-FX fiber optical transceiver. The chip is fabricated with an advanced CMOS process to meet low voltage and low power requirements.



RTL8201BL.PDF



Xilinx ISE 에서 ngc 파일 사용하기

ARM(SoC,FPGA)

쉽다. 

특정 IP나 module에 대한 합성된 ngc 파일을 가지고 있다면, ISE project에 간단하게 넣어서 사용할 수 있다. 

더 간단할 수 있는데 툴이 약간 신경을 덜 써주는 것 같기도 하다. (그냥 ngc 파일만 add project 하면 되련만 ㅎ)


인터넷을 검색하면 아래의 글이 나온다. 여기가 정답인듯

How-do-I-use-a-NGC-file-toanother-ISE-project

그래도 간단히 정리해 보면,


그 다음 프로젝트 폴더에 해당 ngc파일을 복사해 둔다. (다른 폴더에 해도 된다. 그럼 아래 그림에서 해당 Path를 지정해 주면 된다.)


1. 일단 ngc 모듈의 이름을 동일하게 가진 빈파일을 하나 만들어야 한다. 여기서는 Black box로 표현하고 있다. 예제를 간단히 만들면


module ngcIPmodule (

DI,

DOUT

); // synthesis black_box


input DI;

output DOUT;


endmodule

(from XST User Guide "http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_2/xst.pdf" page no: 200 explains the BOX_TYPE constraint.)


이렇게 아무런 내용이 없는 껍데기를 만들어야 Synthesis 과정을 무사 통과할 수 있다.


2. 그런 다음, Process Properties 창을 띄우고 (마우스 오른쪽 버튼을 활용하면 쉽게 ^^)

아래 "-sd" 옵션에 ngc 파일이 있는 위치를 지정해 준다.

프로젝트 폴더에 넣었으면 이 과정을 생략해도 자동으로 ngc 파일을 물고 온다.


3. 그럼 ISE 가 Mapping 하는 과정에서 ngc 파일을 위에서 만든 빈 껍데기 대신 사용해서 원하는 결과를 만들어 준다.


끝.



Xilinx ucf 파일에서 Pin mapping 하기

ARM(SoC,FPGA)

원하는 FPGA핀으로 시그널을 정의해서 뽑아 보려면, ucf 파일을 건드려야 한다.

물론 친절하게 GUI로 띄워서 클릭으로 선택할 수도 있지만, 기본적인 것은 알아야~~


예제로 보는 것이 가장 쉽다. 추상적인 내용은 보기도 이해도 어렵다.


# ==== Clock Source ==== 

NET "clock" LOC = "C9" | IOSTANDARD = LVCMOS33

NET "clock" PERIOD = 5ns HIGH 40%; 


# ==== Slide Switches (SW) ==== 

NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ; # SW1

(from http://www.ce.rit.edu/studentresources/reference_materials/561/Spartan3E_FPGA_User%20Guide.pdf

Spartan3E_FPGA_User Guide.pdf


어려운 것은 없다. 

단, 시그널 명은 합성하는 top의 시그널 명과 일치 시켜야 한다.

LOC는 핀 이름을 잘 보고 원하는 것을 정확하게 쓰면 되고


예제IOSTANDARD = LVTTL or LVCMOS33 이렇게 쓰고 있는데 그냥 통째로 이 구문을 안쓰고 돌리는 것이 대부분일 것이다. 붙이는 칩들이 옛날 칩을 쓰는 것이 아니라면

즉, NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ; # SW1 <- 이렇게 사용하자.


마지막 파워온시에 기본 값을 줄 수 있는 

PULLUP or PULLDOWN은 유용할 듯 하다.


그리고, ucf 본연의 의무는 핀 할당도 있지만 여러가지 constraint를 주는 것이 목적이다.

결국 타이밍 정보를 여기에 정의해서 사용해야 한다.

복잡하니 이것은 다음에~~

Xilinx NGC netlist file 읽기

ARM(SoC,FPGA)

.ngc 파일에서 vhdl, verilog top 파일 만들기


ISE를 쓰는 경우, ngc파일을 가지고 있어 사용하는 경우 top파일이 필요하기도 하다.

간단하게 ngc에서 top 파일 만드는 방법

http://www.fpgadeveloper.com/2011/08/how-to-read-an-ngc-netlist-file.html


  1. To convert the netlist into VHDL type “netgen -ofmt vhdl filename.ngc“. Netgen will create a filename.vhd file.
  2. To convert the netlist into Verilog type “netgen -ofmt verilog filename.ngc“. Netgen will create a filename.v file.


VHDL literal - 표현, 선언 예

ARM(SoC,FPGA)


reference : http://www.ics.uci.edu/~jmoorkan/vhdlref/literals.html


상수

constant FREEZE : integer := 32;
constant TEMP : real := 32.0;
constant FLAG :bit_vector(0 to 7) := "11111111";
constant MSG : string := "Hello";

숫자 표현

BIT_8_BUS <= B"1111_1111";
BIT_9_BUS <= O"353";
BIT_16_BUS <= X"AA55";

문자열로 상태정의해서 사용하기

type MY_LOGIC is ('X','0','1','Z');
type T_STATE is (IDLE, READ, END_CYC);
signal CLK : MY_LOGIC := '0';
signal STATE : T_STATE := IDLE;

배열

type NIBBLE is array (3 downto 0) of std_ulogic;
type MEM is array (0 to 7) of NIBBLE;
-- an array "array of array" type
variable MEM8X4 : MEM;
...
-- accessing the whole array:
MEM8X4 := ("0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111");
-- accessing a "word"
MEM8X4(5) := "0110";
-- accessing a single bit
MEM8X4(6) (0) := '0';


Xilinx memory 초기화 파일 생성하기

ARM(SoC,FPGA)

Xilinx ISE를 통해 memory를 만들어 쓰다 보면, 초기화파일을 지정할 수 있도록 되어 있다.

(그냥 소스레벨에서 배열로 선언하고, $readmemh 로 불러들여도, FPGA에 구울때 보면 초기값이 간단하게 들어오긴 하던데 ^^ 무튼)


그 파일 확장자가 .coe 파일이다. 

생소하다. 구글링을 통해 찾자.


This is the Bin2Coe project ("bin2coe")

This project was registered on SourceForge.net on Apr 17, 2011, and is described by the project team as follows:

Small utility in C to convert from a binary image file to a .COE file used by Xilinx to load memory contents


링크에 들어가서 exe 파일을 받으면, 컴파일된 binary code를 code 파일로 변경해 주는 유틸이다. 아니면 첨부해둔 exe만 받어도..

Bin2Coe.exe



사용법은 간단 

Bin2Coe.exe code.bin code.coe 1024


맨 마지막 숫자는 depth. 즉 메모리 크기이다. 단위는 32비트가 기본이다.

예제처럼 하면 32비트짜리 1024개의 memory cell에 대한 초기값들이 쭉 생성된다.

물론 code.bin은 실제로 컴파일 된 결과를 써야겠지..


이정도로 정리 끝..