본문 바로가기

전체 글

[RISCV] Toolchain Install RISC-V의 툴체인은 GCC를 비롯한 일련의 S/W 를 말한다. RISC-V 를 사용하기 위해서는 이 툴체인이 설치되어야 하며, 아래가 공식 툴체인이다. https://github.com/riscv/riscv-gnu-toolchain 그리고 물론 LLVM도 최신 버젼에서 riscv를 지원하때문에 , gcc대신에 LLVM으로 사용도 가능하다. 하지만, 현재 인터넷에 널려있는 자료들이 대부분 gnu gcc기준으로 작성되어 있기떄문에, gnu gcc로 어느정도 툴을 익히고 llvm등을 사용하는게 좋을듯 하다. gcc 전체를 만드는 것은 컴파일 하는데 꽤 시간이 오래 걸리기때문에, OS별로 pre-compile 해놓은 버젼도 있다. 잘 안되면 이 버젼을 그냥 가져다 쓰는 것도 나쁘지 않다. 그리고 gcc도 m.. 더보기
[RISCV] Tang nano로 Hello RISC-V 메뉴얼에 있는대로 pico soc를 합성하고 올려보았다. 아래는 스크린샷. Project picotiny를 읽어서 합성하면 되는데 , 안되는 경우 Project-> configuration에서 , 아래 MSPI를 체크하고 합성을 진행한다. 정상 구동되는것 확인한다. tangnano는 이 자체로 uart동작하는 칩도 같이 붙어 있으므로 별도 작업없이 터미널 테스트가 가능하다. Windows에서 power shell을 열어서, 아래와 같은 명령어로 uart가 되는지 확인, 아래 getportname으로 포트번호를 확인한다음에 , putty와 같은 프로그램으로 COM[포트번호] 로 연결 해서 잘 동작하는지 확인한다. [System.IO.Ports.SerialPort]::getportnames() $port= .. 더보기
[RISCV] Chisel chisel은 한글로 하면 끌이라는 도구로 나무나 돌 얼음등을 긁는 도구이다. RISC-V에서의 chisel은 scala 기반의 RTL Generator를 이야기하는 것이고 버클리에서 처음 만든 RISC-V가 이 chisel을 기반으로 생성되었다. 여기에 rocket chip generator라고, 단순히 하나의 model을 만드는것이 아니라 좀더 scalable하게 만들수 있는 구조이다. 이 기반이 되는 scala라는 language인데, 이게 저변은 그렇게 넓지는 않지만, 함수형언어로 완성도 측면에서는 완결성을 가지는 구조이기때문에, 결과물도 formal하게 나오는 것으로 보인다. 그래서 RISC-V에서 여러버젼이 있지만 이 rocket chip을 이용하려면 이 scala를 약간은 핸들링할수 있어야한.. 더보기
[RISCV] Tang nano 9K 알리에서 우연찮게 찾은 키트다. FPGA, 사실 이전에는 들어 보지도 못한 Gowin이라는 대륙 벤더에서 나온 FPGA를 사용한 제품인데, 기본적으로 가성비가 좋음. 이 글쓰면서 알아보니, 래티스반도체 에서 나온분이 2014년에 만든 FPGA벤더이고, 출하량도 생각보다 굉장히 많음. FPGA업계 점유율 1위는 자일링스이고, 2위가 알테라(인텔) ,, 그리고 래티스 , ICE라고 외국애들 보면 취미로 하는 얘들이 래티스의 ICE를 많이 사용하고,, 고윈은 순위권밖이긴하지만, 10위안에 드는 회사로 인듯, 이 고윈 반도체 칩을 사용해서 SiPEED라는 회사가 만들었음, 이 당나노는 업체에서 만든것 외에는 거의 자료가 없음. 그리고 검색하다보니, 이 tang nano의 당은 당나라의 당을 따서 만든듯 하다.... 더보기
Rust, If 문 및 loop문, control flow (제어문) if statement 제어문, if-else 류는 문들은 보통 모든 언어들에 있는 구문이고, 여기서는 rust가 다른 언어들과 조금 다른 점들만 기술한다. if [conditions] ... condition은 boolean식만 들어갈 수 있다. "? : " 와 같은 삼항 연산자 역시 제대로 동작한다, 특이한 점은 condition에 괄호() 가 필요 없다는점. if condition { ... } else { ... } Conditional loop(while) while같은 conditional loop도 동일하다, 조건이 만족하면 loop가 실행되고, 아니면 빠져나가는것, let mut i = 1; while i while true 로 치환된다 일종의 syntax sugar fn main() { .. 더보기
Rust, 튜플 튜플은 데이터가 쌍으로 있는 구조이다. 이것의 구분은 괄호를 사용하며, ("hello", 4) 이런 형태로 가능하다. 튜플의 경우는 array와는 달라서, 각각의 item이 다른 타입을 가져갈 수 있고, 튜플의 index로는 t.0, t.1과 같이 "." 을 이용해야 하고 python과 같이 t[0], t[1]은 허용되지 않는다. 그리고 인수로 constant만 올수 있다. t.i과 같이 변수는 저자리에 올수 없다. fn main() { let human = ("Knight",true, 2500u32); println!("{:?}", human); println!("{} {} {}", human.0, human.1, human.2); let (name, _, hp) = human; println!("{}.. 더보기
Rust, 자료형 Numeric(정수) Rust는 C와 같은 정적언어이다. 하지만, type inference(이하 타입추론)으로 인해서, 문법자체는 C만큼 strict하지는 않고, compiler가 type을 추측해서, 자동으로 컴파일을 하게 된다. python이나 javascript같은 경우는 완전한 동적언어라, 컴파일 단계에서는 type이 맞는지 틀리는지 검사를 하지 않는다. duck type이라고 해서, 막상 실행될때 이게 맞는지 틀리는지 확인이 가능하기때문에, 이것이 개발 속도는 빠르지만, 이 부분에서 잠재적인 오류가 있을 수도 있고, 이를 막기 위해서는 모든 부분을 검사하는 테스트셋을 가져야지 된다는 의미이다. 동적언어의 장점이자 단점이기도 한데, Rust는 정적언어이기때문에, 이 타입 관련 오류들은 컴파일 시간에 잡아낸다. 그게 .. 더보기
Rust , VSCode 환경 설정 Rust에서는 상당히 많은 것들이 기본제공되지만, 이중에서 vscode를 이용한 환경 설정방법을 정리해보겠다. vscode자체도 굉장히 많은 것들이 빨리 변화되므로 일단은 현재 시점에서의 가장 기본으로 설정을 하도록 하겠다. (아래는 2019년 12월 기준, 정상동작하는 것을 확인하였다.) 처음 vscode를 켜고, vscode에서 CTRL+SHIFT+X 를 눌르면 market place로 들어간다. 아래와 같이 rust를 검색, 이중에서, 사람들이 가장 많이 사용하는 rust (rls)를 설치한다. 그리고 설치가 되고 난 이후, hello.rs 파일에서 기본 빌드 작업 구성을 한다. CTRL+SHIFT+P를 눌러서 아래와 같이 기본빌드 작업 구성을 누르면, 이중에서 rust : cargo build o.. 더보기