ptrs 읽기 및 쓰기"FIFO를 - updation

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 [/ 인용] [/ 코드]

 
귀하의 Testbench의 전체, 빈 WP, 라인란트, (그리고 아마 다른 신호)의 대응에 fifo2에 연결되어 있지 않습니다.만약 당신이 그랬는지 모르겠 몇 가지 이유로 의도적으로했다.

모듈 fifo2 있음, 다시 제로에서 시작해서 WP와 라인란트 변경 '에 x'를 곧, fr과 및 제거 한후 때문에 '시뮬레이션의 시작 x'를 좀 후에.초기화 fr과 및 제거 한후보십시오 Testbench에서 0.

어떤 데이터가 활동을 참조하지 않습니다.또 다른 문제가 될 수없습니다.

해피 Verilogging

 

Welcome to EDABoard.com

Sponsor

Back
Top