49분이 코드를 어떻게 concretly 거래를 말해줄 수 있나요?

F

floatgrass

Guest
하기 위해서는 타이밍 시뮬레이션을 수행하려면 올바른 funtion이 내 디자인의 모듈입니다, 거기에 메모리를 선언합니다, 지금, 그래서 내가 어떻게 그것을 syntheze이 코드와 디자인 분석기와 함께합니까?
고마워, 내가 새로운 ASIC을 designer.i 오전 도움이 필요 해요!

모듈 regfile (
reset_s1,
Write_Mem_q1,
wrapout_s1,
pixel_s1,
Mem_Pointer_s1,
Pix_Mux_s1,
Word_Line_q1 [8시]
Kernel_Bus_b_v1,
pixel_bit0_v1, pixel_bit1_v1, pixel_bit2_v1,
phi1, phi2);

////////////////////////////////////////////////// //////////////////////////
/ / 포트 선언
////////////////////////////////////////////////// //////////////////////////

입력 phi1, phi2; / / - 2 차 클럭
입력 reset_s1; / / - 언제 리셋이 높은 경우, 카운터
/ / 그리고 다시 낮은 초기화
/ / 커널과 얽힘 수익금로드됩니다.
입력 Write_Mem_q1; / / - 읽기 / 쓰기 표 1에 대한 설정 :
/ / 0 만약에, 만약 읽기 쓰기 1.
입력 [7시] pixel_s1; / / - 픽셀 입력 칩
counters.v에서 입력 [8시] wrapout_s1; / / - 제어 신호
/ / 해당 wordline 올립니다.
입력 [2시] Mem_Pointer_s1; / 메모리 포인터 / - 제어 신호
입력 [7시] Pix_Mux_s1; / / - 우리는 현재 픽셀의 비트를 선택합니다
/ pixel_bit *로 DataPath /에

출력 [8시] Word_Line_q1; / / - SRAM을 워드 라인 () 자격이있다
/ / DP는에 Kernel_Latch 최대한 전달
/ / 시계.
출력 [7시] Kernel_Bus_b_v1; / SRAM은 데이터 / - 1 행
출력 pixel_bit0_v1, / 3 행에 값을 픽셀 / - 비트
pixel_bit1_v1, / / 메모리, DataPath에서 커널 ANDed
pixel_bit2_v1; / / 곱셈에 대한////////////////////////////////////////////////// ///////////////////////////
/ / 내부 변수 선언
////////////////////////////////////////////////// ///////////////////////////

철사 [8시] wordnum_s1; / / - wordlines 메모리 (주소)를 선택합니다
[23시] pixelcol_v1 reg; /의 SRAM / - 출력
, pixtmp0_v1, pixtmp1_v1 reg / Pix_Mux의 / - 출력 () 픽셀 비트 선택
pixtmp2_v1;
, pixel_bit0_v1 reg / reordering의 / - 출력, (mem_pointer)
pixel_bit1_v1, / / 그리고 pix_mux
pixel_bit2_v1;

/ / SRAM을 변수 선언
/ / 다음과 같은 선언은 데이터를 SRAM에 서면 기간 동안 개최
/ / 초기화.

[23시] memory_v1 [8시] reg;

[4시] decodenum_s1 reg;
철사 [23시] memtemp_v1;

wordnum_s1 = wrapout_s1 할당; SRAM을 위해 / / 자격 저장 이루어집니다
Word_Line_q1 할당 [0] = wrapout_s1 [0] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [1] = wrapout_s1 [1] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [2] = wrapout_s1 [2] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 지정 [3] = wrapout_s1 [3] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [4] = wrapout_s1 [4] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [5] = wrapout_s1 [5] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 지정 [6] = wrapout_s1 [6] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [7] = wrapout_s1 [7] & phi1; / / 커널에 대한 공인 래치
Word_Line_q1 할당 [8] = wrapout_s1 [8] & phi1; / / 커널에 대한 공인 래치

/ / 10 진수로 변환 가치를 다시 wordline 선별 정말 그렇게 될 수있습니다
/ / 배열에 사용됩니다.이것은 논리에만 Verilog에서 필요하지 않습니다
/ / 레이아웃을 구현했습니다.
항상 (wordnum_s1) @
시작
케이스 (wordnum_s1)
9'b000000001 : decodenum_s1 = 8;
9'b000000010 : decodenum_s1 = 7;
9'b000000100 : decodenum_s1 = 6;
9'b000001000 : decodenum_s1 = 5;
9'b000010000 : decodenum_s1 = 4;
9'b000100000 : decodenum_s1 = 3;
9'b001000000 : decodenum_s1 = 2;
9'b010000000 : decodenum_s1 = 1;
9'b100000000 : decodenum_s1 = 0;
/ / 기본 케이스가 없을 때 wordline 선택한 경우에 발생합니다.
기본값 : decodenum_s1 = 16;
endcase


항상 @ (phi1 또는 decodenum_s1 또는 pixelcol_v1 또는 Write_Mem_q1)
(phi1 경우)
시작
/ / SRAM과 픽셀의 값을 쓰기
/ / 참고 :이 라인 엄격한 2 단계 클러킹에 위배
만약 (Write_Mem_q1 == 1'b1)
시작
memory_v1 [decodenum_s1] = pixelcol_v1;



/ / 읽기 SRAM과 (자료)에서

//------------------------------------------------ ----------------
할당 memtemp_v1 = ~ Write_Mem_q1?memory_v1 [decodenum_s1] : 24'bz;
Kernel_Bus_b_v1 = ~ memtemp_v1 [23시 16분] 할당;/ / 루트 입력 메모리의 적절한 행을 위해, 우리는 오직 덮어
/ / 어떤 Mem_Pointer 가장 오래된 우리에게 말해줍니다 행.(이되지 않습니다
/ / 모델의 레이아웃을 정확하게,하지만 아이디어와 같은) 즉 : 레이아웃
/ / 때문에 하나의 높이가 쓰여지고있는 제외한 모든 행
/ 그들은 그들의 옛 가치를 보유 / 임피던스 입력.
/ 감도를 목록에 포함 / Pix_Mux_s1 pixelcol_v1로드 단지
/ / 전에 매일 쓰기에 상관없이, 또는 경우 pixel_s1 들어 mem에
/ / Mem_Pointer_s1이나 변한 게있다.
//------------------------------------------------ ----------------

(Mem_Pointer_s1 또는 pixel_s1 또는 Pix_Mux_s1) 항상 @
시작
만약 (Pix_Mux_s1 [7])
시작
케이스 (Mem_Pointer_s1)
3'b001 : 시작
pixelcol_v1 [23시 16분] = pixel_s1;
pixelcol_v1 [15시 8분] = memtemp_v1 [15시 8분];
pixelcol_v1 [7시] = memtemp_v1 [7시];


3'b010 : 시작
pixelcol_v1 [23시 16분] = memtemp_v1 [23시 16분];
pixelcol_v1 [15시 8분] = pixel_s1;
pixelcol_v1 [7시] = memtemp_v1 [7시];


3'b100 : 시작
pixelcol_v1 [23시 16분] = memtemp_v1 [23시 16분];
pixelcol_v1 [15시 8분] = memtemp_v1 [15시 8분];
pixelcol_v1 [7시] = pixel_s1;


기본값 : pixelcol_v1 = memtemp_v1; / / 전혀 새로운 작성된 것입니다
endcase

끝/ / Mux 출력, 그래서 우리는 한 줄에 하나만 비트 읽기 복구
/ / ------------------------------------------------ ------------
(Pix_Mux_s1 또는 memtemp_v1) 항상 @
시작
케이스 (Pix_Mux_s1)
8'b00000001 : 시작
pixtmp0_v1 = memtemp_v1 [16];
pixtmp1_v1 = memtemp_v1 [8];
pixtmp2_v1 = memtemp_v1 [0];


8'b00000010 : 시작
pixtmp0_v1 = memtemp_v1 [17];
pixtmp1_v1 = memtemp_v1 [9];
pixtmp2_v1 = memtemp_v1 [1];


8'b00000100 : 시작
pixtmp0_v1 = memtemp_v1 [18];
pixtmp1_v1 = memtemp_v1 [10];
pixtmp2_v1 = memtemp_v1 [2];


8'b00001000 : 시작
pixtmp0_v1 = memtemp_v1 [19];
pixtmp1_v1 = memtemp_v1 [11];
pixtmp2_v1 = memtemp_v1 [3];


8'b00010000 : 시작
pixtmp0_v1 = memtemp_v1 [20];
pixtmp1_v1 = memtemp_v1 [12];
pixtmp2_v1 = memtemp_v1 [4];


8'b00100000 : 시작
pixtmp0_v1 = memtemp_v1 [21];
pixtmp1_v1 = memtemp_v1 [13];
pixtmp2_v1 = memtemp_v1 [5];


8'b01000000 : 시작
pixtmp0_v1 = memtemp_v1 [22];
pixtmp1_v1 = memtemp_v1 [14];
pixtmp2_v1 = memtemp_v1 [6];


8'b10000000 : 시작
pixtmp0_v1 = memtemp_v1 [23];
pixtmp1_v1 = memtemp_v1 [15];
pixtmp2_v1 = memtemp_v1 [7];


기본값 : 시작
pixtmp0_v1 = 1'bz;
pixtmp1_v1 = 1'bz;
pixtmp2_v1 = 1'bz;

endcase


/ / 정렬 임시 픽셀 비트 그렇게 행이 다시 - 주문
/ / 메모리 포인터의 값을 기반으로
(Mem_Pointer_s1 또는 pixtmp0_v1 또는 항상 @ pixtmp1_v1 또는 pixtmp2_v1)
시작
케이스 (Mem_Pointer_s1)
3'b001 : 시작
pixel_bit0_v1 = pixtmp0_v1; / / 일반 주문.
pixel_bit1_v1 = pixtmp1_v1;
pixel_bit2_v1 = pixtmp2_v1;


3'b010 : 시작
pixel_bit0_v1 = pixtmp1_v1; / / 2 행 가득 찼다.
pixel_bit1_v1 = pixtmp2_v1;
pixel_bit2_v1 = pixtmp0_v1;


3'b100 : 시작
pixel_bit0_v1 = pixtmp2_v1; / / 3 행 가득 찼다.
pixel_bit1_v1 = pixtmp0_v1;
pixel_bit2_v1 = pixtmp1_v1;


기본값 : 시작
pixel_bit0_v1 = 1'bz;
pixel_bit1_v1 = 1'bz;
pixel_bit2_v1 = 1'bz;

endcase


/ / 참고 :이 명령이 이제 괜찮지만, 큰 그림에,
/ / 그것을 시각화하는 혼란이다.그것은 만약 pixel_bit0 분명있을 것이라고
/ /에 커널의 하단에 행, pixel_bit1에 대응
/ / 중간 pixel_bit2 가기.그럼 우리가 상상할 수있는 우리는
/ / 값 이미지의 하단에 행, 그리고 먹이를했다
/ / 그 값을 누른 다음 최대 옮겨 있어요./ / SRAM과 끝 메모리
endmodule / / 메모리

 
]; 당신이 언급 SRAM에있다 [23시] memory_v1 [8시 reg 것으로 보인다.

acutally 만일 당신이 그 코드를 합성, 직류 regstiers 그것을 많이하게됩니다.
당신은 모듈을 호출을 사용해야합니다 SRAM을위한
당신은 SRAM과 모델의 시뮬레이션을위한 공급 업체에서 제공하는 라이브러리가 필요 없으며, SRAM과 도서관에서 dff처럼 그냥 휴대폰입니다.

 
그래, 내 말은 [23시] memory_v1 [8시 reg] SRAM을합니다.
이 코드에 의해 직류,하지만이 코드는 SRAM을 빼고 한 8-1 먹스를와 3 1mux이 합성 수없는 건.
만약 내가 그것을 합성하지 않으면 먹스를 논리가 매핑되지 않을 수있는 최적화된.
그것 먹스를에서 자위대가되지 않았습니다.내가 타이밍 시뮬레이션을 처리 수없습니다.

 
당신이 그것을 합성 수있습니다.
하지만이 코드는 확인되지 않습니다.
당신은 SRAM에 부분을 삭제해야합니다
및 SRAM을 lib 디렉토리에 모듈을 호출로 바꾸십시오.
먹스를 보관해야합니다.

이런 전화를 SRAM에 lib 디렉토리 보이는 뭔가 모듈
sram_16_8 ram0 (
. addr (addr),
. CLK (CLK)
. 울리다 (w_d [7시]),
. dout (r_d [7시]),
. 웹사이트, (CS)을,
. 웹 (승));

sram_16_8 lib 디렉토리 모듈이

bests

 
내가의 SRAM 모듈을 호출 SRAM을 대체 뜻. v를 도서관.하지만, 디자인 컴파일러를 사용하는 SRAM을. DB를 라이브러리를 컴파일하고, 어떻게 내가 DC에 그것을 어떻게 설정합니까?
감사합니다

 
메모리 컴파일러를 해봐, 레이아웃을 생성할 수있습니다, 시뮬레이션 모델 및 MBIST에 필요한 파일을, 만약 당신이 정말로 SRAM을해야합니다.그렇지 않으면, 등록 파일의 메모리가 부족하여이 크기를위한 것입니다.다른 의견!

 
이후 unefficient의 안녕, 합성 도구를 사용하여 RAM을 컴파일하려고하지 않습니다.귀하의 공급 업체에 의해 제공되는 컴파일하거나 사용자 정의 회로 설계를 할 필요는 메모리를 사용해보십시오.

 

Welcome to EDABoard.com

Sponsor

Back
Top