2011-10-20 2 views
2

해싱 알고리즘의 조합 구현을 사용해야하는 프로젝트를 진행 중입니다. VHDL/Verilog는 FPGA에서 작업하기를 원하는 대상 언어입니다. 내가 검색을 한 적이 있고, MD5와 SHA1에 대한 RFC 스펙을 보았습니다. 그러나 VHDL/Verilog에서 combinational (클럭을 피하십시오) 구현을 찾을 수없는 것 같습니다. 너는 어떤 것도 알고 있니? 해싱 알고리즘 자체는 최소한 MD1만큼 강력하다면 중요하지 않습니다.해싱 알고리즘의 조합 구현

+0

비동기식 디자인이기 때문에 순수하게 조합해야합니까? –

+0

코드의 합성 된 버전에서만 룩업 테이블을 갖기를 원하기 때문에 순수하게 조합해야합니다. – eqb

답변

3

C로 작성된 MD5 또는 SHA1 구현으로 시작한 다음 알고리즘의 각 단계를 순서도의 단계로 수동 변환합니다. C 코드의 모든 산술 연산 또는 논리 연산은 결합 논리 연산 (게이트)이됩니다. C 코드의 소스 및 대상 변수는 하드웨어 설계의 입력 및 출력 포트가됩니다. C 코드의 임시 변수는 조합 논리 블록을 연결하는 내부 네트워크의 이름이됩니다.

이론적으로 이러한 알고리즘의 순수한 조합 구현을 생성 할 수 있어야합니다. 실질적으로 하드웨어 리소스 (덧셈기, 곱셈기 등)가 너무 많이 필요하고 리소스를 다시 사용해야 할 수도 있습니다. 리소스를 재사용해야하는 즉시 일부 중간 레지스터를 도입해야하며 출력은 특정 클록주기 동안 유효하지 않습니다.

+0

그런 식으로 SHA1을 구현 한 프로젝트를 인터넷에서 보았다고 생각합니다. 이것은 좋은 생각입니다 ... 나는 그것을 줄 것이다. 고맙습니다! – eqb

1

그건 흥미로운 바보 같은 요구 사항입니다!

당신은 거기서 하나를 찾으려고 노력할 것입니다. 해싱은 대개 처리량이 많아야합니다. 이는 많은 파이프 라이닝과 빠른 클록 및 따라서 레지스터를 의미하는 경향이 있습니다.

비록 쓰기 너무 열심히해서는 안됩니다 :

  • 가에 혼합 엔티티를두고 라운드 엔티티를 생성 알고리즘에 사용되는 단계 "혼합"다양한에 대한

    • 쓰기 모듈/엔티티 오른쪽 순서
    • forgenerate 루프 (또는 해당 Verilog 해당)를 사용하여 필요한 모든 라운드를 만듭니다.
  • +0

    사실 ... 내가 코드에서 직접 VHDL/Verilog로 일부 C 코드를 변환 할 것 같아요. 고맙습니다! – eqb