내 경력은 지금 FPGA 설계에서 SOC 설계로 넘어가는 과도기에 있다.
약간 구질구질 설명이 길어지긴 하는데..
FPGA설계를 하면서 VHDL과 펌웨어를 같이 해오다가,
SOC설계로 오면서 HDL만을 가지고 설계하는 거에 익숙해지기 까지 시행착오가 좀 있었다..
그 과정에서 미처 신경 안 써왔던 부분을 써본다.
사실 별거 없음.
C언어와 같이 VHDL, Verilog 에서도 if문과 case문을 쓴다.
VHDL은 이제.. 기억이 희미해져서 베릴로그 예시만 들자면..
if문 1
always @(posedge clk or negedge resetn) begin
if(!resetn) begin data <= 0; end
else if (a==1) begin data <= 1; end
else if (a==2) begin data <= 2; end
else if (a==3) begin data <= 3; end
else begin data <= 0; end
end
if문 2 (if 중첩 여러개)
always @(posedge clk or negedge resetn) begin
if(!resetn) begin data <= 0; end
else if (a==1) begin data <= 1; end
if (a==2) begin data <= 2; end
if (a==3) begin data <= 3; end
else begin data <= 0; end
end
if문 3 (assign if)
assign data = a==1? 1 : a==2 ? 2 : a==3 ? 3 : a==4 ? 4 : 0;
if 중첩을 주의 해야 한다. 예시 3번처럼 assign문도 주의..
FPGA를 CPU로 쓴다면 수정이 가능하고 비바도가 알아서 해주니까 괜찮지만, 반도체 설계에서 if을 쓰면 쓰는대로 mux가 늘어난다.
보여주고 싶지만 회사컴은 데이터 외부 반출이 안되고 내 랩탑은 프로그램이 없다. mux의 아웃풋이 하위 mux의 input port로 들어가고 그 하위 mux output이 그 하위로 가고 else 가 나올때까지 이어지는 형태..
예시 같이 간단하게 값 대입 식이면 사실 큰 오류는 없지만.. 만에 하나라는 것이 있기도 하고 설계할때 좋게 보진 않는다. 신입이면 대충 그러려니 해줌.
알고 있으면 본전인데 모르면 창피한 그런 거...
아무튼 mux를 주루룩 연결하면 data path가 길어져서 결과값이 예상대로 안 나올 수 있기 때문에 if 문을 많이 쓰게 된다면 case문을 쓴다.
if문에서 mux로 체인처럼 연결되는 것들이 case문을 쓰면 한 레벨에서 된다.
하지만 case문에서는 우선 순위를 정할 수 없으니 고려하여 로직을 짜야 한다.
Testing & Design for Testability (0) | 2023.04.14 |
---|---|
세액공제&소득공제 (0) | 2023.01.16 |
마이크로칩 교육 (0) | 2022.02.11 |
Analog video signal gen (0) | 2022.01.24 |
인적성 준비 팁(1) - 언어 독해 (0) | 2021.12.08 |
댓글 영역