Kim Seon Deok
[Verilog] if 문, case 문 본문
- gate level modeling
- concurrent assignment
- behavioral modeling
- structural modeling
gate level modeling과 concurrent assignment는 조합회로를 구현하는 데 사용된다.
behavioral moeling과 structural modeling은 대체로 조합회로와 순차회로를 구현하는 데 사용된다.
behavioral modeling
조합논리 회로와 순차 논리회로의 설계 그리고 모델링된 회로의 simulation을 위한 testbench작성에 사용된다.
(모델링된 소스코드 합성을 거쳐 gate-level netlist로 변환)
- always 구문
- initial 구문
procedural assignment와 if문과 case문 그리고 반복문은 behavioral modeling의 always, initial 구문 내부에서 사용된다.
if 문
if (조건) blocking 또는 nonblocking문 ; else blocking 또는 nonblocking문 ; |
조건식이 참이면 해당 statement문 실행
조건식이 거짓이면 해당 statement문 실행
if문 안에 또 다른 if문 이 중첩될 수 있다.
module dff_sr_async (clk, d, rb, sb, q, qb) ;
input clk, d, rb, sb ; // 클럭, 입력, 리셋, 셋
output q, qb ;
reg q ; //always문 안에 들어가는 변수는 reg로 선언. default값은 x
always @(posedge clk or negedge rb or negedge sb) // clk만 있는 게 아니라 셋, 리셋 있으니까 비동기식
begin // 셋,리셋이negedge이므로 둘다 active low이다.
if(rb == 0) // 해당 조건이 참이면
q <= 0 ; // nonblocking
else if(sb == 0) // 해당 조건이 참이면
q <= 1 ;
else // 해당 조건이 참이면
q <= d ;
end
assign qb = ~q ; // concurrent assignment문
endmodule
case 문
case (조건) case 아이템 : statement or null ; case 아이템 : statement or null ; ...... default : statement or null ; endcase |
case의 조건식의 값과 일치하는 case아이템의 statement가 실행된다.
case문의 조건식과 모든 case아이템의 비트 크기는 큰 쪽에 맞추어져야한다.
모든 case아이템들에 대한 비교에서 일치하는 항이 없는 경우 default 항이 실행된다.
default항이 없다면 이전에 할당받은 값 유지 → 래치동작
하나의 case문에는 default문이 한개만 있어야 한다.
조건식에 상수값이 들어가도 된다.
module mux21_case(a,b,sel,out) ;
input [1:0] a, b ;
input sel ;
output [1:0] out ;
reg [1:0] out ; // always문 안에 들어가는 변수이므로 reg 선언
always @(a or b or sel) begin // a나 b나 sel에서 이벤트가 발생하면
case(sel)
0 : out = a ; // case아이템이 0 이면
1 : out = b ; // case아이템이 1 이면
endcase
end
endmodule
casex, casez
casex 문 : x를 don't care로 취급해 해당 비트를 비교에서 제외한다. don't care 조건으로 ? 기호 사용가능
casez 문 : z를 don't care로 취급해 해당 비트를 비교에서 제외한다. don't care 조건으로 ? 기호 사용가능
reg [7:0] ir;
casez(ir)
8'b1??????? : instruction1(ir) ;
8'b10?????? : instruction2(ir) ;
8'b00010??? : instruction3(ir) ;
8'b000001?? : instruction4(ir) ;
endcase
'Verilog' 카테고리의 다른 글
[Verilog] Structural modeling - module instance (0) | 2022.12.09 |
---|---|
[Verilog] 반복문 (0) | 2022.12.09 |
[Verilog] Behavioral modeling (0) | 2022.12.09 |
[Verilog] Procedural assignment (2) | 2022.12.08 |
[Verilog] Concurrent assignment (0) | 2022.12.08 |