S
shyamsundar
Guest
안녕 여러분 메신저 FIFO를 그리고 그는이 샘플에서 NET의 코드를 작성려고 애를 썼어요.지금 내가 쓴이에 대한 Testbench 및 기능성 시뮬레이션 메신저 수없는 경우 읽기 및 쓰기 포인터를 업데이트할했다.사람은 도와이 문제를 해결하고??
모듈 fifo2 (CLK, 세 계 최 초의, fr과, 제거 한후, 데이터, 밖으로);
매개 변수 fifo_width = 8, = 4 ptr_width fifo_depth = 16,;
입력 CLK, 세 계 최 초의, fr과, 제거 한후;
입력 [fifo_width - 1 : 0] 데이터;
출력 [fifo_width - 1 : 0] 아웃;
와이어 전체 비어;
정수 j를;
reg [fifo_width - 1 : 0] 아웃;
reg [ptr_width - 1 : 0] WP;
reg [ptr_width - 1 : 0] 라인란트;
reg [fifo_width - 1 : 0] 스택 [fifo_depth - 1 : 0];
reg [ptr_width - 1 : 0] fifo_count;
/***********************************************
이 경우, 데이터를 넣어에 대한 쓰기 액세스입니다
위치에 입력 버스로 지적
FIFO를 포인터를 쓰는
************************************************/
항상 (posedge CLK) @
시작
만약 (제거 한후) 시작
스택 [WP] "= 데이터;
끝
끝
/***********************************************
만약이있다는 데이터를 얻을 수 읽기
위치에 포인터를 읽어 가리
및 출력 버스에 넣어
************************************************/
항상 (posedge CLK) @
시작
만약 (fr과) 시작
밖으로 "스택 = [라인란트];
끝
끝
/************************************************
증가 때마다 쓰기 포인터를 써주세요
매일 읽기 읽기 포인터
************************************************/
항상 (posedge CLK) @
(세 계 최 초의 경우)
WP "= 0;
그 밖의
WP "= (제거 한후)?WP 1 : WP;
항상 (posedge CLK) @
(세 계 최 초의 경우)
라인란트 "= 0;
그 밖의
라인란트 "= (fr과)?라인란트 1 : 라인란트;/*********************************************
때마다 쓰는 FIFO를 카운터를 증가
매일 읽기 감소
**********************************************/
항상 (posedge CLK) @
시작
만약 (세 계 최 초의) 시작
fifo_count "= 0;
끝
다른 시작
케이스 ((제거 한후, fr과))
2'b00 : fifo_count "= fifo_count;
2'b01 : fifo_count "= (fifo_count == 0)?fifo_depth : fifo_count - 1;
2'b10 : fifo_count "= (fifo_count == fifo_depth)?0 : fifo_count 1;
2'b11 : fifo_count "= fifo_count;
endcase
끝
끝
/ / fifo_hf = (fifo_count 할당 "= 4);
/ / fifo_he = (fifo_count 할당 "= 4);
) 빈 = (fifo_count == 0을 할당;
전체 = (fifo_count 할당 "= fifo_depth);
FIFO를 / /의 endmodule//----------------------------- 테스트 벤치 ----------------- ------------------------------
모듈 fifo_tb;
매개 변수 fifo_width = 8, = 4 ptr_width fifo_depth = 16,;
CLK, 세 계 최 초의, fr과, 제거 한후 reg;
reg [fifo_width - 1 : 0] 데이터;
와이어 [fifo_width - 1 : 0] 아웃;
와이어 전체 비어;
정수 h;
reg [ptr_width - 1 : 0] WP = 0, 헌병 = 0;
reg [ptr_width - 1 : 0] 라인란트 = 0;
reg [fifo_width - 1 : 0] 들어 mem [fifo_depth - 1 : 0];
reg [ptr_width - 1 : 0] fifo_count;
fifo2 F1을 (CLK, 세 계 최 초의, fr과, 제거 한후, 데이터, 밖으로);
초기
시작
CLK = 1'b1;
세 계 최 초의 = 1'b1;
$ readmemb ( "stimuli_fifo.txt", 들어 mem);
h = $하면 fopen ( "result_fifo.txt");
# 20 세 계 최 초의 = 1'b0;
끝
항상
# 5 CLK = ~ CLK;
초기
시작
# 30 제거 한후 = 1'b1;
# 30 fr과 = 1'b1;
# 120 제거 한후 = 1'b0;
# 10 fr과 = 1'b0;
끝
항상 (posedge CLK) @
시작
(제거 한후 경우)
시작
데이터가 들어 mem = [헌병];
헌병 = 헌병 1; / / 증분 들어 mem 인덱스
만약 () 전체
$ 디스플레이 ( "FIFO를 오버플로");
다른 경우 (공백)
$ 디스플레이 ( "FIFO를 언더 플로");
끝
끝
항상 (posedge CLK) @
시작
$ 디스플레이 ( "밖으로 = % d 개, 데이터 = % d 개", 밖으로, 데이터);
$ 디스플레이 ( "fifo_count = % d 개", fifo_count);
$ fdisplay (아, "밖으로 = % d 개", 밖으로);
끝
endmodule [/ 인용] [/ 코드]
모듈 fifo2 (CLK, 세 계 최 초의, fr과, 제거 한후, 데이터, 밖으로);
매개 변수 fifo_width = 8, = 4 ptr_width fifo_depth = 16,;
입력 CLK, 세 계 최 초의, fr과, 제거 한후;
입력 [fifo_width - 1 : 0] 데이터;
출력 [fifo_width - 1 : 0] 아웃;
와이어 전체 비어;
정수 j를;
reg [fifo_width - 1 : 0] 아웃;
reg [ptr_width - 1 : 0] WP;
reg [ptr_width - 1 : 0] 라인란트;
reg [fifo_width - 1 : 0] 스택 [fifo_depth - 1 : 0];
reg [ptr_width - 1 : 0] fifo_count;
/***********************************************
이 경우, 데이터를 넣어에 대한 쓰기 액세스입니다
위치에 입력 버스로 지적
FIFO를 포인터를 쓰는
************************************************/
항상 (posedge CLK) @
시작
만약 (제거 한후) 시작
스택 [WP] "= 데이터;
끝
끝
/***********************************************
만약이있다는 데이터를 얻을 수 읽기
위치에 포인터를 읽어 가리
및 출력 버스에 넣어
************************************************/
항상 (posedge CLK) @
시작
만약 (fr과) 시작
밖으로 "스택 = [라인란트];
끝
끝
/************************************************
증가 때마다 쓰기 포인터를 써주세요
매일 읽기 읽기 포인터
************************************************/
항상 (posedge CLK) @
(세 계 최 초의 경우)
WP "= 0;
그 밖의
WP "= (제거 한후)?WP 1 : WP;
항상 (posedge CLK) @
(세 계 최 초의 경우)
라인란트 "= 0;
그 밖의
라인란트 "= (fr과)?라인란트 1 : 라인란트;/*********************************************
때마다 쓰는 FIFO를 카운터를 증가
매일 읽기 감소
**********************************************/
항상 (posedge CLK) @
시작
만약 (세 계 최 초의) 시작
fifo_count "= 0;
끝
다른 시작
케이스 ((제거 한후, fr과))
2'b00 : fifo_count "= fifo_count;
2'b01 : fifo_count "= (fifo_count == 0)?fifo_depth : fifo_count - 1;
2'b10 : fifo_count "= (fifo_count == fifo_depth)?0 : fifo_count 1;
2'b11 : fifo_count "= fifo_count;
endcase
끝
끝
/ / fifo_hf = (fifo_count 할당 "= 4);
/ / fifo_he = (fifo_count 할당 "= 4);
) 빈 = (fifo_count == 0을 할당;
전체 = (fifo_count 할당 "= fifo_depth);
FIFO를 / /의 endmodule//----------------------------- 테스트 벤치 ----------------- ------------------------------
모듈 fifo_tb;
매개 변수 fifo_width = 8, = 4 ptr_width fifo_depth = 16,;
CLK, 세 계 최 초의, fr과, 제거 한후 reg;
reg [fifo_width - 1 : 0] 데이터;
와이어 [fifo_width - 1 : 0] 아웃;
와이어 전체 비어;
정수 h;
reg [ptr_width - 1 : 0] WP = 0, 헌병 = 0;
reg [ptr_width - 1 : 0] 라인란트 = 0;
reg [fifo_width - 1 : 0] 들어 mem [fifo_depth - 1 : 0];
reg [ptr_width - 1 : 0] fifo_count;
fifo2 F1을 (CLK, 세 계 최 초의, fr과, 제거 한후, 데이터, 밖으로);
초기
시작
CLK = 1'b1;
세 계 최 초의 = 1'b1;
$ readmemb ( "stimuli_fifo.txt", 들어 mem);
h = $하면 fopen ( "result_fifo.txt");
# 20 세 계 최 초의 = 1'b0;
끝
항상
# 5 CLK = ~ CLK;
초기
시작
# 30 제거 한후 = 1'b1;
# 30 fr과 = 1'b1;
# 120 제거 한후 = 1'b0;
# 10 fr과 = 1'b0;
끝
항상 (posedge CLK) @
시작
(제거 한후 경우)
시작
데이터가 들어 mem = [헌병];
헌병 = 헌병 1; / / 증분 들어 mem 인덱스
만약 () 전체
$ 디스플레이 ( "FIFO를 오버플로");
다른 경우 (공백)
$ 디스플레이 ( "FIFO를 언더 플로");
끝
끝
항상 (posedge CLK) @
시작
$ 디스플레이 ( "밖으로 = % d 개, 데이터 = % d 개", 밖으로, 데이터);
$ 디스플레이 ( "fifo_count = % d 개", fifo_count);
$ fdisplay (아, "밖으로 = % d 개", 밖으로);
끝
endmodule [/ 인용] [/ 코드]