[mbed] 라이브러리 버그 수정해보기 - Publish 방법

생각보단 쉽다. 자신이 만든 라이브러리 라면 더 쉽겠지만,

다른 사람이 만든 라이브러리의 버그를 과감히 수정해 보는 경험을 해보자. (물론 라이브러리 관리자에게 허가를 받아야 하지만)

일단, 간단하게 해본 경험을 적어보았다.

아래 http://medium.com 을 통해 적은 글을 클릭해서 보자. 

그대로 긁어 오려니, CSS가 너무 안맞네. 수정하기는 귀찮고 링크로 대신한다.


from : https://medium.com/@bjnhur/be-a-contributor-of-mbed-library-82a1b75fc754

Ethernet Library for W5500 WIZnet ) 예제로 모두에게 오픈되어 있는 #mbed에 흔적을 남겨보자. 누군가에게 도움이 되지 않아도..되길 바라지만


Be a Contributor of mbed library



저작자 표시 비영리 변경 금지
신고

[정리] Verilog 배열관련

참고 : http://blog.naver.com/beahey/90192889480


배열 선언은

reg [7:0] a[3];

이렇게 한다. 앞쪽의 "[7:0]"는 배열을 표현보다는 버스의 비트를 나타내고,

배열을 뒤쪽의 "[3]" 으로 보고 이해하는 것이 쉽다.

즉 위의 예는 8비트짜리 배열 3개을 가지고 있다는 의미


또한 중요한 것은 포트로 뽑아낼 수가 없다는 엄청 불편한 진실..

즉 module의 input/output으로 쓰기 곤란하다는..

구체적인 예는 위 참고 사이트 참조


짤은 "Array" ㅋ


array
array by OiMax 저작자 표시


저작자 표시 비영리 변경 금지
신고

mbed 소개자료

ARM 에서 밀고 있는 무료 온라인 컴파일 환경

사이트 주소는 http://mbed.org 이다.

요즘 플랫폼도 많고, 사용자도 많아진 듯.


NXP, ST, Freescale 어떤 칩을 쓰던 쉽게 컴파일하고 테스트할 수 있는 환경이다.

난 간단한 "Hello World" 수준의 프로그램밖엔 못해봤지만.

많이 자동화 되어 있고, 라이브러리도 많이 있다.


한글자료로 찾아보니 거의 하나밖에는 없네..

그래도 복사해서 소개


출처 : http://wiki.vctec.co.kr/devboard/mbed


하위 페이지 나열


저작자 표시 비영리 변경 금지
신고

Keil Overview 자료

그냥 발표자료이다. 쭉 처음부터 읽어보면 된다.

Keil uvision으로 간단히 프로그램 만들고, 디버깅하는 것들, 유용한 기능들에 대한 설명이 쭉 되어 있다.

출처 : Keil Overview - MIT


keiloverview.pdf



비슷한 자료지만, 기왕 찾은 것 하나더 첨부

"Development Tools for ARM-Powered Devices" - MDK-ARM, 디버그 종류에 따른 기능도 간단히 비교해주고  EVB 그림도 하나 나오고 ^^, 단 2009년 자료라는 것..


출처 : http://www.emcu.it/KEIL/mdk_4.00_full.pdf


mdk_4.00_full.pdf


ㅋㅋ 짤은 십여년전에 배운 컴파일러책~~~

Compilers
Compilers by mrjoro 저작자 표시비영리


저작자 표시 비영리 변경 금지
신고

Keil µVision - Multiple Targets & Groups

프로그램을 작성하다 보면, 

하나의 프로젝트지만 (즉, 거의 비슷한 소스를 사용하는데,) 특정부분때문에 여러 프로젝트로 나누어야 하는 경우가 생긴다.


예를 들면, 공통 라이브러리를 사용하는데 MCU가 달라서 다른 Startup code를 써야 한다면

제일 쉽게는 각각 별도의 프로젝트로 만들고 코딩을 하면 된다.


그래도 일목요연하게 하나의 그룹처럼 보이게 하려면..

Keil을 쓰는 경우라면, UV4, UV5등을 사용하는 경우라면 "Targets" 이라는 용어를 사용하고 있더라~ 


Keil의 help 사이트에서 예를 가져와 보자.


출처 : http://www.keil.com/uvision/ide_prj_targets.asp


그림으로 가져왔다.

위의 그림의 왼쪽과 오른쪽 처럼 Target MCU가 다른 경우로 나누어서 예를 들고 있다.

그림에 잘 보면 왼쪽에 빨간색 네모 박스가 3개 있는 것이 다른 설정에 의해서 별개로 쓰이고 있다는 것을 나타내는 듯 하다.


머 이렇게 하더라도, 별개의 프로젝트와 동일하게 각각 설정이 가능하고 결과도 따로 생성되므로

별개의 프로젝트로 하나, 이렇게 하나 큰 차이는 없다.


다만, 묶여진 프로젝트들이 같은 선상에 있다는 프로젝트로 표시될 뿐..이상 끝

=)






저작자 표시 비영리 변경 금지
신고

'소소한개발팁' 카테고리의 다른 글

mbed 소개자료  (0) 2014.06.27
Keil Overview 자료  (0) 2014.06.27
Keil µVision - Multiple Targets & Groups  (0) 2014.06.27
북마크 - 데비안 7 위지 설치하기  (0) 2014.06.19
데비안(리눅스) 자바 설치  (0) 2014.06.18
윈도우에서 리눅스 원격접속  (0) 2014.06.18

ARM SoC - AHB Default Slave..빈공간에 놓여진 모듈

ARM SoC 개발 중


버스나 Decoder에 보면 default slave 가 있다. 머냐..

메모리 맵상에 할당되지 않은 주소(빈공간)를 접근하는 경우 활성화 되는 모듈이다.

이름 그대로 디폴트..역할은 단순하다.


HREADYOUT은 물론 잘 띄워줘야 하고, 읽기든 쓰기든 끝이 나게 하려면 꼭 띄워줘야하고

또 하나, HRESP에 에러를 띄워주는 것. 왜냐면 여기는 빈공간이니까~~


http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3445.html

General: What is a default slave?

Applies to: AHB

Answer

If the memory map of a system does not define the full 4 gigabyte address space then a default slave is required, which is selected when an access is attempted to the empty areas of the memory map. The default slave should use an OKAY response for IDLE/BUSY transfers and an ERROR response sequence for NONSEQ/SEQ transfers.

구체적이다~~. 

IDLE/BUSY transfer에는 OKAY

NONSEQ/SEQ transfer에는 ERROR

를 알려줘라.


끝.




저작자 표시 비영리 변경 금지
신고

[verilog] `timescale 1ns/10ps 의미

이것도 검색으로 펌질, 여타 설명이 필요없는 간결한 자료

`timescale 1ns/10ps

앞에 숫자는 해당 파일내에서 쓰이는 숫자들의 단위를 나타냄..즉 #2 이렇게 쓰여있다면 2ns를 나타냄

뒤의 숫자는 시뮬레이터에서 많이 쓰일 것 같은데 코딩에서는 별 효과가..무튼 소수점을 허용하려면 어디까지 해야할까를 나타내야 하는데 그 때 쓰이는 최소 단위

설명은 아래 참고.


[출처] [verilog] timescale에 대하여|작성자 j0hnch01

assign #5 foo = tiger ;

이 문장을 가만히 보면 단위가 없습니다.  '5'의 의미는 무었일까요?
...

여기서 '5'는 5ns가 될 수도 있지만, 5us5ms 심지어는 5sec가 될 수도 있습니다. 이 문장 자체 만으로는 알 수 없습니다.
...
이 때 등장하는 것이 바로 `timescale 문입니다.
보통 Verilog 코드의 맨 위에 아래와 같이 선언합니다.
`timescale 1ns/10ps
여기서 슬래쉬('/')의 앞에 있는 '1ns'가 바로 단위입니다. 이 값을 '1ns'라고 선언하면 그 파일 내의 모든 시간 단위는 1ns가 되기 때문에, 위의 assign문에서도 '5'는 5ns가 되는 것입니다.


그렇다면 슬래쉬('/')의 뒤에 있는 '10ps'는 무었일까요? 바로 해상도(precision)입니다.

5ns 보다 좀 더 정밀하게 적은 다음 예문 들을 보겠습니다.

1. assign #5.5    foo = tiger ;
2. assign #5.55   foo = tiger ;
3. assign #5.555  foo = tiger ;
4. assign #5.5555 foo = tiger ;

좀 전에서 보았듯이 단위가 1ns이므로, 위의 예에서 1번은 5.5ns 딜레이가 먹습니다. 그리고, 2번은 5.55ns 가 딜레이 되죠. 그러면 3번은 5.555ns, 4번은 5.5555ns의 딜레이가 먹어야 맞겠지만 사실은 그렇지 않습니다. 해상도(precision) 10ps이기 때문에 3번과 4번은 위에서 기술한 대로 딜레이가 먹지 않습니다.

만약, 4번의 해상도가 필요하다면 timescale문을 다음과 같이 기술해야 할 것입니다.
`timescale 1ns/100fs

여기서 fs는 [펨토세컨드]로써 ps[피코세컨드]의 일천분의 일인 단위 입니다.
그러면 timescale을 설정하기 위해 고려해야 할 사항은 무었일 까요? 제 경험에 비추어서 추천을 드려 보겠습니다.

1. 프로젝트에서 사용하시는 모든 소스코드의 `timescale을 통일하십시요!

grep -r --include="*.v" "timescale" * 
 이 명령을 하면, 모든 서브 디렉토리에서 *.v 파일을 찾아 grep 명령으로 "timescale" 구문이 있는 줄을 화면상에 표시해 줍니다.

2. 대략 `timescale 1ns/10ps가 무난합니다.

  (1) 요즘의 FPGA나 ASIC의 성능을 고려하면 시간 단위는 1ns가 적당해 보입니다.
  (2) 간혹 해상도(precision)를 1ns로 하는 경우도 있고, 혹은 1fs로 하는 경우도 보았습니다.
      -> 해상도를 1ns로 하면 코드내에서 절대로 소수점 시간을 사용하면 안됩니다.
         소숫점 사용했다는 자체가 해상도를 위반한 것이기 때문입니다.
      -> 해상도를 1fs등으로 너무 낮추면 시뮬레이션 시간이 기하 급수적으로 늘어 납니다.
         시뮬레이터의 입장에서 생각해 보면, 다루어야 할 시간의 데이터가 무지하게 커져서 계산 시간이 늘어 날 것 같기는 합니다.

결론: '모든' verilog 소스코드의 맨 윗줄에 `timescale 1ns/10ps 라고 적으세요.

물론, 제 추천이니까 상황이 다르거나 더 좋은 방법이 있으시다면, 최종 결정은 디자이너의 몫일 것입니다.
언제부터인가 시뮬레이션 시간이 이상하게 오래 걸린다고 생각되신다면, 위의 grep 명령어를 써서 지금 프로젝트의 timescale 값들을 한 번 확인해 보는 것도 좋은 방법 일 것 같습니다.
이해를 돕는 연습문제(?)를 하나 내어 봅니다.
`timescale 10ns/10ps라면 assign #5 foo = tiger ;에서 딜레이는 얼만큼 먹을 까요?
답: 50ns 입니다.


저작자 표시 비영리 변경 금지
신고

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

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'


쉽다. =).

저작자 표시 비영리 변경 금지
신고

Xilinx ISE 에서 ngc 파일 사용하기

쉽다. 

특정 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 파일을 위에서 만든 빈 껍데기 대신 사용해서 원하는 결과를 만들어 준다.


끝.



저작자 표시 비영리 변경 금지
신고

VHDL literal - 표현, 선언 예


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';


저작자 표시 비영리 변경 금지
신고
◀ PREV 12 NEXT ▶