문제

Veriog에서 4-to-1 기능을 구현해야 합니다.입력은 4비트이며 0부터 15까지의 숫자입니다.출력은 단일 비트(0 또는 1)입니다.각 입력은 서로 다른 출력을 제공하며 입력에서 출력으로의 매핑은 알려져 있지만 입력과 출력 자체는 그렇지 않습니다.나는 vcs가 코드를 성공적으로 최적화하고 가능한 한 짧고 깔끔하게 만들기를 원합니다.지금까지 내 솔루션은 다음과 같습니다.

wire [3:0] a;
wire b;
wire [15:0] c;

assign c = 16'b0100110010111010; //for example but could be any constant
assign b = c[a];

c를 선언하는 것은 추악한 일이며 vc가 거기에서 K-map을 인식할지 모르겠습니다.이것이 사례문이나 결합 정규형의 과제와 마찬가지로 작동합니까?

도움이 되었습니까?

해결책

당신이 가지고 있는 것은 괜찮습니다.사례 설명도 똑같이 잘 작동합니다.그것은 당신이 얼마나 표현력을 원하는가의 문제입니다.

귀하의 솔루션인 인덱싱은 선택 인코딩에 특별한 의미가 없는 경우(예: 메모리 주소 선택기) 잘 작동합니다.선택 인코딩이 디자이너에게 특별한 의미론적 의미를 갖고 있다면(그리고 그 수가 너무 많지 않은 경우) Case 문과 열거형을 사용하세요.

현명한 합성은 어떤 것을 사용하는지는 중요하지 않습니다.괜찮은 합성 도구라면 모두 동일한 결과를 얻을 수 있습니다.

다른 팁

나는 달라스의 말에 전적으로 동의한다.사례 설명을 사용하면 의도가 더 명확해집니다.합성 도구는 이를 조회 테이블(병렬인 경우)로 구축하고 가능한 모든 것을 최적화합니다.

또한 RTL 코드를 짧게 유지하는 것에 대해 크게 걱정하지 않습니다.먼저 명확성을 위해 촬영하겠습니다.합성 도구는 당신이 생각하는 것보다 더 영리합니다...

내가 선호하는 것은 - 그것이 당신의 문제에 적합하다면 - 열거형이나 `정의'를 사용하는 사례 서술문을 위한 것입니다.코드 검토, 유지 관리 및 검증을 더 쉽게 만드는 모든 것.

이와 같은 경우에는 RTL 명확성이 모든 면에서 훨씬 뛰어납니다.SystemVerilog에는 블록이 조합 논리, 래치 또는 플롭으로 합성되어야 하는 시기를 명확하게 하는 특별한 항상 블록 지시문이 있습니다(그리고 이와 충돌하는 RTL을 작성한 경우 합성 도구에서 오류가 발생해야 합니다(예:항상 블록의 민감도 목록에 모든 신호를 포함하지 않음).또한 인코딩 자체가 최상위 모듈의 핀으로 전파되지 않는 한 도구는 현재 가지고 있는 인코딩을 가장 하드웨어 효율적인 인코딩(전체 디자인 영역을 최소화하는 인코딩)으로 대체할 가능성이 있다는 점에 유의하세요.

이 조언은 일반적으로 적용됩니다.코드를 인간이 이해하기 쉽게 만들면 합성 도구도 더 쉽게 이해할 수 있으므로 문자 그대로 더 효과적으로 가져올 수 있습니다. 수천 귀하의 RTL을 뒷받침하기 위해 수년에 걸쳐 알고리즘을 연구했습니다.

원하는 경우 삼항 연산자를 사용하여 코딩할 수도 있지만 다음과 같은 것을 선호합니다.

always_comb //or "always @*" if you don't have an SV-enabled tool flow
begin 
  case(a)
  begin
    4'b0000: b = 1'b0;
    4'b0001: b = 1'b1;
    ...
    4'b1111: b = 1'b0;
    //If you don't specify a "default" clause, your synthesis tool
    //Should scream at you if you didn't specify all cases,
    //Which is a good thing (tm)
  endcase //a
end //always

분명히 나는 ​​형편없는 합성 도구를 사용하고 있습니다.:-) 방금 두 버전(와이어 지연에 대한 팬아웃을 기반으로 한 모델을 사용하는 모듈)을 모두 합성했으며 질문의 인덱싱 버전이 사례 설명보다 더 나은 타이밍 및 영역 결과를 제공했습니다.Synopsys DC Z-2007.03-SP를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top