행위수준 모델링

2020. 10. 26. 05:46·study/Logic Circuit
반응형

행위수준 모델링

  • 조합논리회로와 순차논리회로의 설계, 설계된 회로의 시뮬레이션을 위한 테스트벤치의 작성에 사용
  • always 구문, initial 구문, task, function 내부에 사용

always 구문

always [@(sensitivity_list)] begin
    blocking_or_nonblocking statements;
end

@(sensitivity_list)는 always문의 실행을 제어

  • sensitivity_list (감지신호목록)에 나열된 신호들 중 하나 이상에 변화(event)가 발생했을 때 always 내부에 있는 begin-end 블록의 실행이 트리거 됨
  • begin-end블록은 절차형 문장들로 구성
  • blocking 할당문 또는 nonblocking 할당문에 따라 실행 방식이 달라짐
  • 시뮬레이션이 진행되는 동안 무한히 반복 실행됨

 

always 구문의 sensitivity_list(감지신호목록)

- 조합논리회로 모델링

  • always 구문으로 모델링되는 회로의 입력 신호가 모두 나열되어야 함
  • 일부 신호가 감지신호목록에서 빠지면, 합성 이전의 RTL 시뮬레이션 결과와 합성 후의 시뮬레이션 결과가 다를 수 있음
  • 함축적 감지신호 표현(@*)을 사용 가능

- 순차회로 모델링

  • 동기식 셋/리셋을 갖는경우 : 클록신호만 포함
  • 비동기식 셋/리셋을 갖는경우 : 클록신호, 셋, 리셋신호를 포함
always @ (*)       // equivalent to @( a or b or c or d or f)
    y =  ( a & b ) | ( c & d ) | f :

 

always 구문이 테스트벤치에 사용되는 경우

  • 시뮬레이션 시간의 진행에 관련된 제어가 포함되어야 함
  • 그렇지 않으면 zero-delay 무한 루프가 발생되어 교착상태에 빠지게 되어 시뮬레이션이 진행되지 않음
always clk = ~clk;                 // zero-delay infinite loop  한순간에 계속 바뀌게 되는 무한루프
always #20 clk = ~clk            // 20초 지연마다 값을 바꿔줌

 


 

initial 구문

initial 구문

initial begin
    blocking_or_nonblocking statements ;
end
  • 시뮬레이션이 실행되는 동안 한번만 실행
  • 절차형 문장들로 구성되며, 문장이 나열된 순서대로 실행
  • 논리합성이 지원되지 않으므로 시뮬레이션을 위한 테스트벤치에 사용

 


절차형 할당문

  • reg, integer, time, real, realtime 자료형과 메모리 변수에 값을 갱신
  • 문장이 나열된 순서대로 실행되어 할당문 좌변의 변수 값을 갱신하는 소프트웨어적 특성                                  연속할당 : 피연산자 값에 변화(event)가 발생할 때마다 우변의 식이 평가되고, 그 결과 값이 좌변의 net를 구동하는                하드웨어적 특성
  • Blocking 할당문  >> 할당기호 = 을 사용
  • Nonblocking 할당문 >> 할당기호 <= 을 사용
a=0; b=1;                 nonblocking

a<=b;         // a=0, b=1을 잡아놓은 후 할당하기 때문에
b<=a;         // 결과는 a=1 , b=0  
a=0; b=1;                     blocking

a = b;        // a = 1;
b = a;        // b = a = 1;

shift 레지스터의 예 ) 값을 하나씩 오른쪽으로 넘겨줄 때 nonblocking으로 해야 의도 대로 작동

nonblocking

module_block_vs_nonblock(
     input d,
     input clk,
     output [3:0] q,
     output [3:0] r
     
);

reg [3:0] q;
reg [3:0] r;

always @ (posedge clk) begin                 // blocking   ,  의도 대도 작동 x
     q[3]=d;                                         // q[3] = q[2] = q[1] = q[0]
     q[2]=q[3];
     q[1]=q[2];
     q[0]=q[1];

end

always @ (posedge clk) begin                // nonblocking , 의도대로 작동 o
     r[3]<=d; 
     r[2]<=r[3];
     r[1]<=r[2];
     r[0]<=r[1];

end
endmodule

아래는 위 코드를 실행하기 위한 테스트벤치 파일

module tb_b_nb;

reg d;
reg clk;

wire [3:0] q;
wire [3:0] r;

block_vs_nonblock uut (          // 위에서 만든 블록 가져와서 사용
           .d(d) ,                       // port d에 보낼 신호이름을 d
           .clk(clk) ,
           .q(q) ,
           .r(r) 
);

initial begin
d=0; clk=0; #70;
d=1; #150; d=0; #70; d=1; #70
d=0; #200; d=1; #300;
end

always #50 clk = ~clk;

endmodule

 


 

if조건문

if( expression )
     statement_true;
[else
     statement_false;]
  • 조건식이 참이면, statement_true 부분 실행
  • 조건식이 거짓이면 (0,x,z)이면, statement_false 부분 실행
  • else 부분이 없으면, 변수는 이전에 할당 받은 값을 유지 (latch 동작)
  • if문의 내포(nested) (if문 내부에 또 다른 if 있는경우) >> 들여쓰기 또는 begin - end로 명확하게 표현

 

case문

case (조건식)
     case_item : 문장;
     default : 문장;
endcase
  • case 조건식의 값과 일치하는 case_item의 문장이 실행
  • 각 비트가 0, 1, x, z를 포함하여 정확히 같은 경우에만 일치로 판단
  • case 문의 조건식과 모든 case_item의 비트 크기는 큰 쪽에 맞추어져야함
  • 모든 case_item들에 대한 비교에서 일치되는 항이 없는 경우에는 default항이 실행
  • default항이 없으면 변수는 이전에 할당받은 값을 유지

- don't care를 갖는 case문

  • casez문 : z를 don't-care로 취급하여 해당 비트를 비교에서 제외 > 조건으로 ? 기호 사용 가능
  • casex문:  x를 don't-care로 취급하여 해당 비트를 비교에서 제외

 

 

반복문

  • forever 문 : 문장이 무한히 반복적으로 실reapeat 문 : 지정된 횟수만큼 문장이 반복 실행                                 
  • repeat 문 : 지정된 횟수만큼 문장이 반복 실행                                                                                     >> 반복 횟수를 나타내는 수식이 x or z로 평가되면 반복횟수는 0이 되고 문장은 실행되지 않음
  • while 문 : 조건식의 값이 거짓이 될 때 까지 문장이 반복 실행                                                                    >> 조건식의 초기값이 거짓이면 문장은 실행되지 않음
  • for 문 : 반복 횟수를 제어하는 변수에 의해 문장이 반복 실행
forever statement;
| repeat(조건식) 문장;
| while(조건식) 문장;
| for(varialbe_assign); expression; variable_assign) statement;

 


 

 

 

Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙

Verilog HDL 구문 논리 합성용 구문 assign, if ~ else , case , for , always 대부분의 논리합성 툴에서 게이트 수준 합성을 지원하는 구문들이다. Simulation용 구문 initial , $finish , $fopen 시뮬레이션을 위한 테스

jjikky-code.tistory.com

 

Verilog 연산자

1100 && 0101 : 논리 and (이항 연산자) > 0,x,z가 아닌 정해진 값이면 1 , 1 and 1이 되서 값은 1 1100 & 0101 : 비트단위 and > 위치가 같은 비트 끼리 and 연산 , 결과는 0100 & 1100 : 축약 and (단항 연산자) > 모든

jjikky-code.tistory.com

 

 

Verilog 자료형

Verilog의 논리값 논리값 의미 0 logic zero , or false condition 1 logic one, or true condition x unknown logic value z high - impedance state Verilog HDL의 자료형 Net 자료형 : 소자간의 물리적인 연결을 추상화 논리 게이트나

jjikky-code.tistory.com

 

게이트 수준 Modeling

게이트 및 스위치 프리미티브 predefined 프리미티브 정의나 선언 없이 사용 가능 단일 출력을 가짐 모듈 내에서만 사용 가능 >> initial 과 always 구문 내부에서는 사용 불가 게이트 프리미티브 인스

jjikky-code.tistory.com

 

 

할당문

연속할당문 : net형 객체에 값을 할당 assign문 continous_assign :: = assign [driving_strength][delay] net_assignments; 절차형 할당문 : variable형 객체에 값을 할당 always 블록, initial 블록, task, function 내부의 할당문 b

jjikky-code.tistory.com

 

 

행위수준 모델링

행위수준 모델링 조합논리회로와 순차논리회로의 설계, 설계된 회로의 시뮬레이션을 위한 테스트벤치의 작성에 사용 always 구문, initial 구문, task, function 내부에 사용 always 구문 always [@(sensitivity_

jjikky-code.tistory.com

 

반응형

'study > Logic Circuit' 카테고리의 다른 글

할당문  (0) 2020.10.25
게이트 수준 Modeling  (0) 2020.10.10
Verilog 연산자  (0) 2020.10.10
Verilog 자료형  (0) 2020.10.08
Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙  (0) 2020.10.07
'study/Logic Circuit' 카테고리의 다른 글
  • 할당문
  • 게이트 수준 Modeling
  • Verilog 연산자
  • Verilog 자료형
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • 전체
    오늘
    어제
    • 분류 전체보기
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • 백준 알고리즘
        • CodeUp
        • 코테 이론
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • 개발일지
      • 게임기획
      • Docker
      • IPFS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    빅데이터
    파이썬 딕셔너리
    ipfs add
    verilog할당문
    ifps 네트워크 지연
    파이썬 완전탐색
    안드로이드
    Ipfs
    verilog
    그리디 알고리즘
    NFT IPFS
    코딩테스트
    NFT Marketplace
    Python
    범주형 자료
    파이썬 그리디
    nft
    UI
    git 유용한 명령어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jjikky
행위수준 모델링
상단으로

티스토리툴바