EE/Verilog

    [Verilog] 태스크(task)와 함수(funtion)

    함수 태스크 다른 함수 사용 O 다른 태스크 사용 X 다른 태스크 사용 O 항상 시뮬레이션 시간 0에서 실행 non-zero 시뮬레이션 시간에서 실행 가능 지연, 사건, 타이밍 제어 포함 불가능 지연, 사건, 타이밍 제어 포함 가능 하나 이상의 input input, output, inout을 하나도 가지지 않거나 여러개를 가질 수 있음 항상 하나의 값을 되돌린다. 값을 되돌릴 수 업지만 output을 통해 여러 개의 값을 전달 가능 지역 변수, 레지스터 등을 가질 수 있지만 wire는 가질 수 없다. always, initial문을 포함하지 않으며 always, initial문 혹은 다른 태스크, 함수로부터 호출됨 행위 수준 문장만 포함해야 한다. 태스크(task) task ~ endtask 키워드로 ..

    [Verilog] 베릴로그 관련 자잘한 거 정리

    계속 업데이트 중 * 벡터의 모든 비트를 초기화 시킬 때 reg [7:0] a = 8'b10100001; initial a = a

    [Verilog] F/F 코드

    D F/F with synchronous reset & CE reset ce d Q 0 0 0 q 0 0 1 q 0 1 0 0 0 1 1 1 1 x x 0 module d_ff_ce_synch_reset( input d, input ce, input clk, input reset, output reg q ); always @(posedge clk) begin if(reset) begin q

    비바도 공부 자료 추천

    이쪽 분야는 국내에 제대로 정리된 학습 자료가 너무 없는 것 같다.. 근데 공식 사이트에 튜토리얼이랑 학습 자료가 잘 정리되어 있어서 가져옴 HDL Design using Vivado www.xilinx.com 알못도 바로 보면서 따라할 수 있는 난이도라 입문용으로 좋은 것 같다. +) 참고로 비바도 실행할때 자꾸 이유없이 종료되는 현상이 있다면 윈도우 사용자 계정 이름을 영어로 바꿔보세요. 아니면 관리자 계정으로 실행해보는거 추천... 이것 때문에 엄청 헤맸었는데 기존 계정 말고 administrator 계정으로 실행하니까 됨.. +) 비바도는 프로그램이 무거워서 사양이 좀 중요한 것 같다. 사용자 계정 이름도 영어이고 딱히 문제될 것이 없는데 계속 crash가 난다면 램을 더 큰 용량으로 구매하시는 ..

    [Verilog] 베릴로그에서의 엔디안

    헷갈려서 간단하게 정리함 wire [7:0] C; wire [0:7] D; 다음과 같은 경우, 각각의 LSB는 C[0], D[7]이다. C의 경우 LSB가 더 작은 주소값에 위치하므로 little endian이고, D의 경우 LSB가 더 큰 주소값에 위치하므로 big endian이 된다.

    [Verilog] 중첩된 블록, 명명된 블록, disable

    중첩된 블록 블록은 중첩될 수 있다. 순차 처리 블록과 병렬 처리 블록을 중첩시키는 것 또한 가능하다. initial begin x = 1'b0; fork #5 y = 1'b1; #10 z = {x, y}; join #20 w = {y, x}; end 명명된 블록 블록에 이름을 붙일 수 있다. 명명된 블록의 지역 변수는 계층적 이름 참조를 사용하여 접근할 수 있으며, disable 키워드를 통해 블록의 수행을 무효화시킬 수 있다. initial begin: block1 //block1이라는 순차 처리 블록 integer i; //지역변수, block1.i와 같이 접근할 수 있다. end disable, 명명된 블록의 무효화 disable 키워드는 명명된 블록의 수행을 종결시킬 수 있다. 즉, 설계에서 명..

    [Verilog] 순차 처리 블록과 병렬 처리 블록 / fork, join

    begin - end로 작성되는 블록은 순차 처리 블록으로, 논블록킹 할당을 제외하면 지정된 순서에 따라 블록의 문장들이 처리된다. 한 문장의 수행이 완전히 끝나야지 다음 문장으로 넘어갈 수 있다. 반면 병렬 처리 블록은 fork - join으로 작성되는 블록으로, 다음과 같은 특성을 갖는다. 병렬 처리 블록의 문장들은 동시에 수행된다 각 문장에 할당된 지연 기반 또는 사건 기반 제어에 의해서 문장의 순서가 조절된다 만약 지연 기반 또는 사건 기반 제어가 지정되었다면, 그것은 블록 안으로 들어가는 시간과 관계있다 각 문장에 할당된 지연은 문장을 만나는 순간을 기준으로 하므로 각 문장의 지연은 블록 안으로 진입하는 시간과 관계있게 된다.(모든 문장이 동시에 실행되므로)

    [Verilog] 루프문 - while, for, repeat, forever

    모든 루프 문장들은 행위 수준 문장이므로 initial, always 블록 안에 위치한다. 또한 루프는 지연 시간을 포함할 수 있다. 기본적으로 while과 for의 사용법은 C에서와 같다. repeat repeat은 정해진 횟수만큼 루프를 수행한다. 루프의 횟수는 시작할 때에만 계산되고, 도중에 루프의 횟수를 표현하기 위해 사용된 변수의 값이 변하더라도 횟수가 변하지 않는다. repeat(128) begin $display("Count = %d", count); count = count + 1; end forever forever 루프는 무한루프와 같다. $finish, $stop, disable을 통해 종료/중단할 수 있다. initial forever @(posedge clock) x = y;