VHDL 에서 제안한 Verilog 코드 가이드라인
4125 단어 #디지털 디자인 기초 강좌코드 스타일
문서 목록
앞에 쓰다
코드 준칙이라는 주제에 대해 각 회사나 기구는 각자의 요구를 가지고 있지만 그들 간의 통일성은 이런 목적에 있다.
이렇게까지 하면?Verilog와 VHDL을 작성할 때 이러한 규칙을 통일시켜 공감대를 형성하는 것이 좋습니다!
나는 인터넷에 공개된 각종 자료를 수집하여 이 화제에 대해 다음과 같이 총결하였다.
본문
접두사
i_ Input signal
o_ Output signal
r_ Register signal (has registered logic)
w_ Wire signal (has no registered logic)
c_ Constant
g_ Generic (VHDL only)
t_ User-Defined Type
당신은 이런 상황을 만난 적이 있습니까?
규범에 맞지 않는 대형 공사 설계, 예화 모듈을 읽을 때 수많은 포트 목록에서 입력과 출력을 구분하기 어려워 구체적인 모듈에 들어가 입력과 출력의 관계를 찾아야 한다. 눈치도 소모되고 체력도 소모되어 고민스럽기 짝이 없다!그래서 Verilog와 VHDL의 읽기 가능성을 불평한다. 사실은 그렇지 않다. 위의 접두사는 이 기본적인 고민을 해결할 수 있다. 만약에 입력과 출력 변수에 대한 명칭 방식을 통일하면 상술한 접두사를 사용하는 것이 좋은 습관이다!
중요도에 따라 다음과 같이 설명합니다.
i_및 o접두사:
이것은 당신이 마땅히 채택해야 할 가장 중요한 양식입니다!너무 많은 디자이너들이 그들의 신호가 실체/모듈의 입력인지 출력인지 밝히지 않았다.신호의 방향을 정하기 위해 코드를 훑어보는 것은 매우 어렵고 번거로울 수 있다.또한 '데이터' 라는 이름으로 출력된 신호는 'o data' 라는 신호보다 검색을 통해 코드에서 찾기 어렵다.예: iaddress,o_data_valid.
r_와w접두사:
이것은 당신이 사용해야 할 두 번째 중요한 양식입니다.신호가reg 형식인지wire 형식인지 가리키는 것은 작성된 코드에 매우 중요합니다.Verilog의 장점은 신호를 reg 또는wire로 표시할 수 있다는 것입니다. 그러나 VHDL에는 이런 요구가 없습니다.따라서 이 스타일은 VHDL 인코더에 특히 중요하다.r 로성명된 모든 신호는 초기 조건을 갖추어야 한다.시퀀스 프로세스(VHDL에서) 또는always(Verilog에서), w성명된 모든 신호는 부치 연산자의 왼쪽에 절대 나타날 수 없습니다.예: rRow_Count,w_Pixel_Done.
c_,g_ 및 t(접두어):
이것들은 인코딩할 때 매우 도움이 된다.c_VHDL의 상수 또는 Verilog의 매개변수를 참조하고 있음을 나타냅니다.g_모든 VHDL 범용입니다.t_사용자가 자신의 데이터 형식을 정의하고 있음을 나타냅니다.나는 이것들이 도움이 된다는 것을 발견했다.예: cNUM_BYTES,t_MAIN_STATE_MACHINE. 상태기의 경우 IDLE, DONE, CLEANUP과 같은 모든 대문자를 사용하는 것을 좋아합니다.과거에 나는 s 를 사용했다상태를 지시하러 왔지만, 나는 이미 필요 없다.기본 설정이 c 를 접두사로 사용하도록 변경되었습니다.
대문자에 대한 설명
신호 이름을 대문자로 쓰시겠습니까? 여부는 당신에게 달려 있습니다.위의 예시에서 보듯이 접두사를 제외하고는 입력이나 출력이 아닌 모든 신호를 대문자로 씁니다.만약 신호를 r 로 명명하기를 원한다면Row_Count 또는 rrow_r 대신 countROW_COUNT, 그러면 이것은 완전히 당신에게 달려 있습니다.나는 당신이 일치를 유지할 것을 건의합니다.VHDL은 대소문자를 구분하지 않으므로 rROW_COUNT 및 rRow_Count는 같지만 Verilog에서는 그렇지 않습니다.Verilog는 대소문자를 구분하기 때문에 대문자 규칙을 유지하는 것이 중요합니다!신호를 하나만 만들고 싶을 때, 의외로 두 개의 다른 신호를 만들고 싶지 않습니다. 그렇지 않으면 아주 나쁜 시간을 보낼 것입니다.
초기화 신호에 대한 주의사항
FPGA의 레지스터는 리셋 신호가 있어야만 초기화할 수 있다는 오해가 지배적이다.이것은 올바르지 않습니다. FPGA 레지스터는 초기값을 가질 수 있습니다.모든 FPGA는 0이나 0이 아닌 값으로 초기화할 수 있습니다.실제로 가장 좋은 실천은 디자인에서 가능한 한 적은 트리거를 복원하는 것이 아니라 모든 트리거를 초기화하는 것이다.이렇게 하는 이유는 트리거에 추가된 모든 복위선은 배선 자원과 소모량을 차지하기 때문에 당신의 디자인이 시차적인 요구를 만족시키기 어렵기 때문입니다.
모든 레지스터 (r 접두사로 표시됨) 는 항상 초기 조건이 있어야 합니다.wire형(w 접두사로 표시)에 초기 조건을 적용하는 것을 금지합니다.디자인을 모방할 때, 모방이 시작되기 전에 모든 신호는 녹색이어야 합니다.만약 이것이 사실이라면 당신은 더욱 즐거울 것이다.
물론 상단은 통용되는 규칙이고 각 회사는 각자 추천하는 규칙이 있다. 예를 들어 다음과 같다.
Xilinx related HDL coding guidelines
Xilinx related HDL coding guidelines1
ug901-vivado-synthesis
Xilinx_HDL_Coding_style
Altera’s Recommended HDL Coding Styles
내용이 너무 많습니다. 참고 자료:
Altera’s Recommended HDL Coding Styles
Lattice HDL Coding Guidelines
[Lattice HDL Coding Guidelines](file:///D:/Downloads/HDLcodingguidelines.pdf)
opencores_coding_guidelines
opencores_coding_guidelines
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.