2010-07-05 4 views
3

Verilog/SystemVerilog에 합성 가능한 3D 래스터 라이저를 쓰려고합니다. 이제는 래스터 라이저가 실제로는 3D 래스터 라이저가 아닙니다. 꼭지점 위치 (vertA_pos_x, vertA_pos_y, vertB_pos_y, vertB_pos_y, vertC_pos_x, vertC_pos_y)에 대해 6 개의 32 비트 부동 소수점과 정점 채색을위한 9 개의 8 비트 정수 (vertA_color_r, vertA_color_g, vertA_color_b , vertB_color_r, vertB_color_g, vertB_color_b, vertC_color_r, vertC_color_g, vertC_color_b).Verilog의 복잡한 부동 소수점 순차 논리

위치의 범위는 화면의 상단/왼쪽을 나타내는 0.0f ~ 1.0f, 0.0f이고 중간은 0.5f, 하단/오른쪽은 1.0f입니다.

래스터 작업은 먼저 필요한 래스터 라인 수를 계산하는 것입니다. 프레임 버퍼 높이가 240 픽셀이라면, 꼭짓점 A는 맨 위 꼭지점이고, B는 왼쪽 아래의 것이고, C는 오른쪽 하단의 것이고, X는 맨 아래의 꼭짓점입니다 (B 또는 C 중 하나입니다.) 래스터 라인의 수는 (vertX_pos_y - vertA_pos_y)/240에 의해 주어진다.

래스터 화 과정의이 부분은 의심의 여지가있는만큼 복잡하므로 여기서 어떻게 진행할지 설명하지 않을 것입니다.

이제 내가 알고 싶은 것은 Verilog에서 "복잡한"논리를 구현하는 방법입니다 (순차적이며 1 클럭주기가 걸리기 때문에 "복잡한"것입니다. 정확히 가장 유쾌한 종류가 아닙니다). 하드웨어 설명 언어로 설계).

저는 Altera의 Quartus를 사용하고 있기 때문에 주로 Altera 솔루션에 관심이 있습니다.

Quartus와 함께 제공되는 부동 소수점 연산 메가 기능은 모두 완료하려면 1 클럭주기가 필요하므로 (vertX_pos_y - vertA_pos_y)/240과 같은 "간단한"계산을 구현하려면 상당히 지루하고 쓰기 쉽고 오류가 발생하기 쉽습니다 상태 머신이 필요합니다. 가장 큰 기대는 누군가가 내가 필요 없다고 말할 것이라는 것이지만, 그렇지 않은 경우 사람들이 일반적으로 이런 것들을 어떻게 디자인 하는지를 알고 싶습니다.

또한 Verilog 및 하드웨어 디자인에 새로운 점이 많아서 바보 같은 말을하는 것이 유감입니다. 아이디어?

답변

4

파이프 라이닝에 대해 들어 보셨습니까? 이것이 데이터 경로가 구성되는 방법입니다.

(a*b) + c을 예로 들었을 때, x*y은 3 클럭 사이클이 걸리고 x+y은 1 클럭 사이클이 걸린다고 가정합니다. 파이프 라이닝이란 지연을 정렬하기 위해 레지스터 뱅크를 삽입하는 것을 의미합니다. 이 예에서 입력 c은 곱셈의 대기 시간과 일치하도록 지연됩니다. 따라서 전체적으로 연산은 3 + 1 = 4 클록 사이클의 대기 시간을 갖습니다.

이제 계산을 많이해야 할 경우 파이프 라인 지연을 함께 사용하여 상태 연산 논리를 사용하여 수학 연산을 예약 할 필요가 없습니다. 즉, 응답을 얻기 위해 (즉 대기 시간) 몇 사이클을 기다려야한다는 것을 의미합니다. 이는 동기식 설계에서 어쩔 수없는 일입니다.

+0

저는 최근에 (어제?) 파이프 라이닝에 대해 들어 봤습니다. 저는 여러분이 상태 머신 논리를 피하기 위해 "지연된"파이프 라인 지연을 함께 의미한다는 것에 매우 관심이 있습니다. 나는 단지 그것을위한 상태 기계를 다루는 것을 정말로 싫어한다. –

+0

나가서, 나는 파이프 라인의 각 유형의 연산을 벽돌의 다른 색상 (예 : 빨간색 = 다중, 흰색 = 지연, 파란색 = 추가)으로 생각하고 레고에 각 범프가 있다고 생각하기 만합니다. 대기 시간의 클럭주기로 차단합니다. 그런 다음 블록에서 데이터 경로를 구축 할 때 갭에 대해 생각하고 지연 레지스터에 넣는 대신 병렬로 계산의 더 많은 부분을 수행하기 위해 데이터 경로를 서로 다른 방식으로 스냅 할 수 있는지 고려합니다. – Marty

+0

나는 사고 방식을 이해할 수 있으며 파이프 라이닝에 대해 들었을 때와 비슷한 비유를 생각했습니다. 그러나 저는이 예를 실제로 본 적이 없습니다. 나를 연결하거나 자신의 답변을 편집 할 수 있습니까? 나는 가장 감사 할 것이고 당신의 대답은 더 완전 할 것입니다. –