본문 바로가기
728x90
반응형

전체 글122

[Statement] 2. case문 4 to 1 mux 회로 large mux에 case 문이 많이 쓰임 가독성이 좋아서. always @(*) begin case (addr) 2'b00 : begin q = a; end 2'b01 : begin q = b; end 2'b10 : begin q = c; end default : begin q = d; end endcase end 고려할 점. blocking assignment를 한다는 것. non-blocking은 ff이 배치되기 때문. default 키워드는 제거 가능 d 에 대한 addr는 따로 명시해줘야함. 2024. 1. 13.
[Statement] 1. if문 if statement 와 case statement 에 대해 배울 것. (복습) always blocks 등의 procedural blocks를 쓰는 이유? 순차적으로 실행되는 베릴로그 code를 작성하기 위해. sequential statements if statement case statement Verilog If Statement conditional statement 불리언 조건을 이용하여 실행할 코드 블록을 결정. C 등의 if문과 유사 // 일반 구문 if () begin // code to execute end else if () begin // code to execute end else begin // code to execute end else 와 else if 는 제외 가능. ex.. 2024. 1. 13.
[Testbench] 8. 예제 풀이 1. 기본 테스트벤치에서 DUT에 inputs를 생성하는 블록은? 더보기 The stimulus block is used to generate inputs to the DUT. 2. 테스트벤치로 사용할 수 있는 빈 모듈을 만드시오. 더보기 module exercise_tb(); // code here endmodule : exercise_tb 3. 왜 named instantiation을 선호하는가? 더보기 It is easier to maintain our code as the module connections are explicitly given. 4. $display 와 $monitor의 차이점은? 더보기 The $display task runs once whenever it is called. T.. 2024. 1. 13.
[Testbench] 7. 테스트벤치 full 작성 예제를 통해 테스트벤치 작성 가능한 모든 input 조합을 전부 생성할 예정 회로 분석 2 inputs AND gate D ff 1. Create a Testbench Module 테스트벤치 코드가 들어갈 빈 모듈을 선언 테스트벤치 모듈의 이름 선언에 대해... design 이름과 비슷하게 선언 design 이름 끝에 _tb, _test 를 추가 module example_tb (); // code here endmodule : example_tb2. Instanitate the DUT 작업할 수 있는 빈 테스트벤치 모듈이 생겼다. 테스트할 design을 인스턴스화. positional instantiation보다 named instantiation이 쉽다. example_design dut ( .clo.. 2024. 1. 13.
[Testbench] 6. System Tasks verilog는 테스트벤치 작성시 도움이 되는 task와 함수가 내장되어 있음. 이를 통칭 'system tasks or system functions'라고 하며 항상 '$' 기호로 시작 $display $monitor $time $display 시뮬레이션 중 콘솔에 표시되는 메시지 출력에 사용 printf 느낌 문자열에 %를 사용하여 신호를 표시할 수도 있음. format letter도 포함해야 함. b : 2진 d : 10진 h : 16진 위 format 코드 앞에 숫자를 추가하면 자릿수 결정. // 일반 구문 $display(, ); // Example : x의 값을 다른 진수로 각각 출력 $display("x (bin) = %b, x (hex) = %h, x (decimal) = %d", x, x.. 2024. 1. 13.
[Testbench] 5. forever loop loop는 매우 중요한 함수이다. forever loop testbench 에서 사용하는 중요한 loop type 실제로 무한 loop를 만드는 것. 시뮬레이션 중 계속 실행되는 코드 섹션을 생성 forever begin // code here end 무한 루프 다른 언어에서는 피해야 하는 코드 bug 등으로 생각함. break 없는 while(1) 같은 느낌? verilog는 좀 다르다. clock 신호를 생성하기 위해서라도 한번은 씀. clock generating 신호를 지속적으로 반전 ( ~ ) forever loop로 구현 initial begin clk = 1'b0; forever begin #1 clk = ~clk; end end 2024. 1. 13.
[Testbench] 4. initial block procedural block의 type 중 하나 always blocks도 procedural block initial block 이 블록 내에서 작성하는 모든 코드는 시뮬레이션 시 ==한 번만 실행== initial begin // 코드 작성 end initial block ==not synthesizable== 시뮬레이션 목적으로만 사용 신호를 초기화 할 때도 사용 가능 stimulus code를 작성할 때는 거의 항상 이용 Basic example 2 input과 gate를 test 4 가지 input 경우의 수를 신호로 입력해야함. delay operator도 사용해야함. 경우의 수 사이를 delay 신호가 전파될 수 있는 시간이 있어야 하기에 중요. initial begin // input, .. 2024. 1. 13.
[Guide Bright] 1.5. 저장용 그렇다네요 2024. 1. 11.
728x90
반응형