계속 업데이트 중
* 벡터의 모든 비트를 초기화 시킬 때
reg [7:0] a = 8'b10100001;
initial
a = a << -1; // a = 8'b00000000
다음과 같은 표현을 사용하기도 함.
-1을 unsigned integer로 변환하여 shift 시키기 때문에 비트 폭이 몇이든 전부 shift시켜서 0으로 padding 가능하다.
* 삼항연산자(조건연산자, 물음표 있는거)는 연속할당문(assign문)에도 사용이 가능하다.
* initial문은 합성되지 않는다.
* reg의 디폴트는 unsigned이며 integer는 signed이다. reg signed와 같이 선언하여 signed도 사용할 수 있다.
* z는 다른 값과 만나면(다른 값과 동시에 할당되면) 무조건 그 값을 따라가는 특징이 있다.
* procedural block은 initial, always문을 의미
* 비동기 reset을 사용할 때 다음과 같은 표현을 사용할 수 있다.
always @(posedge clk or rst)
...
단 이러한 구문은 합성이 안될 수도 있다.
* if - else 문은 하드웨어적으로 mux를 통해 구현
* case문에서 콤마를 이용해 여러 조건을 사용할 수도 있음 (ex) 2, 3 : ...
* 설계를 할 때 래치를 최대한 만들지 않아야 한다. 타이밍 문제라던가 여러 문제가 발생할 수 있기 때문
* feedback loop를 만들 때 무한루프가 걸리지 않도록 주의한다. (타이밍 제어 필요)
//잘못된 예시들
assign op = op + y;
always @(*)
op = op + y;
* sequential logic은 논블락킹을 사용한다.
'EE > Verilog' 카테고리의 다른 글
[Verilog] 태스크(task)와 함수(funtion) (0) | 2023.02.23 |
---|---|
[Verilog] F/F 코드 (0) | 2023.02.13 |
비바도 공부 자료 추천 (0) | 2023.02.02 |
[Verilog] 베릴로그에서의 엔디안 (0) | 2023.02.01 |
[Verilog] 중첩된 블록, 명명된 블록, disable (0) | 2023.01.17 |