본문 바로가기
Computer/기타

[Verilog] Procedures

by 거부기씨 2024. 5. 20.
728x90
반응형

Always blocks

for synthesizing hardware, two types of always blocks are relevant:

  • Combinational: always @(*) 
  • Clocked: always @(posedge clk)

Combinational always block은 assign statements와 같다. procedural block 안의 문법은 바깥과 꽤 다르다. if-then, case 등을 사용할 수 있다.

 

Blocking vs. Non-Blocking Assignment

  • Continuous assignments (assign x = y;). Can only be used when not inside a procedure ("always block").
  • Procedural blocking assignment: (x = y;). Can only be used inside a procedure.
  • Procedural non-blocking assignment: (x <= y;). Can only be used inside a procedure.

Combinational always block에서는 blocking assignment 사용한다. Clocked always block에서는 non-blocking assignment를 사용한다.

 

1. If Statement

always @(*) begin
    if (condition) begin
        out = x;
    end
    else begin
        out = y;
    end
end

 

2. Case Statement

always @(*) begin   
    case (in)
      1'b1: begin 
               out = 1'b1;  // begin-end if >1 statement
            end
      1'b0: out = 1'b0;
      default: out = 1'bx;
    endcase
end

 

Casez Statement

    casez (in[3:0])
        4'bzzz1: ...
        4'bzz10: ...
        4'bz100: ...
        4'b1000: ...
        default: ...
    endcase

 

728x90
반응형

'Computer > 기타' 카테고리의 다른 글

[Flutter] Firebase 연동 오류 해결  (0) 2024.04.24
[Flutter] Flutter를 시작했다  (0) 2024.04.24