2008-09-03 4 views
3

Veriog에서 4 대 1 함수를 구현해야합니다. 입력은 0에서 15 사이의 숫자 인 4 비트입니다. 출력은 단일 비트, 0 또는 1입니다. 각 입력은 서로 다른 출력을 제공하며 입력에서 출력까지의 매핑은 알려져 있지만 입력 및 출력 자체는 알 수 없습니다. vcs가 코드를 성공적으로 최적화하고 가능한 한 짧게/깔끔하게 만들길 원합니다. 지금까지의 내 솔루션 :Verilog에서 4 대 1 함수의 효율적인 합성

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를 선언하는 것은 못 생겼고 vcs가 거기에있는 K-지도를 인식하는지 잘 모르겠습니다. 이것은 합법적 인 형태의 사례 진술이나 양도와 마찬가지로 효과가 있습니까?

답변

5

당신이 가지고있는 것은 괜찮습니다. 사례 진술도 똑같이 잘 작동합니다. 그것은 당신이 얼마나 표현력이 좋을지에 대한 문제 일뿐입니다.

선택 인코딩에 특별한 의미가없는 경우 (예 : 메모리 주소 선택기) 솔루션에서 인덱싱이 제대로 작동합니다. select 인코딩에 디자이너에게 특별한 의미가 있다는 의미가 있고 (너무 많지 않은 경우), case 문과 enum을 사용하십시오.

종합적으로 말하면, 어느 것이 든 상관 없습니다. 괜찮은 합성 도구라도 동일한 결과를 얻을 수 있습니다.

2

내 선호 - 문제가 이해되는 경우 - 열거 형 또는`정의를 사용하는 사례 문에 대한 것입니다. 코드 검토, 유지 관리 및 검증을 쉽게하기위한 것.

3

나는 Dallas와 완전히 동의합니다. 사례 진술을 사용하십시오 - 귀하의 의도를 명확하게 해줍니다. 합성 도구는 룩업 테이블 (병렬 인 경우)으로 구축하고 가능한 모든 것을 최적화합니다.

또한 RTL 코드를 짧게 유지하는 것에 대해 크게 걱정하지 않아도됩니다. 우선 선명도를 위해 촬영할 것입니다. 합성 도구는 당신보다 생각보다 똑똑합니다. ...

2

이와 같은 상황에서 RTL 선명도는 모두 넓은 마진을냅니다. SystemVerilog에는 블록이 combinational logic, latch 또는 flops로 합성되어야 할 때 명확한 지시문이 항상 있습니다 (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 
1

은 분명히 내가 형편없는 합성 툴을 사용하고 있습니다. :-) 방금 전 두 버전 (배선 지연에 대한 팬 아웃을 기반으로 한 모델을 사용하는 모듈)을 합성했으며 문제의 색인 생성 버전은 사례 명세서보다 더 나은 타이밍 및 면적 결과를 제공했습니다. Synopsys DC Z-2007.03-SP 사용.