GPIO 단순 (opencore) 문제가 되나?

C

chensanlien

Guest
친애하는 모든,

내가 simultation 시도 opencore.simple_gpio 위시본 (compiliable).

난 내 expection하지 않는 코드를 찾을이 일치하는

다음 : 내 testbech & 원본 코드

모듈 맨;

clk_i 교체;
rst_i 교체;
cyc_i 교체;
stb_i 교체;
adr_i 교체;
we_i 교체;
dat_i을] reg [이 7시;

와이어 dat_o의 [7시];
와이어 ack_o;
와이어 GPIO의 [7시];

simple_gpio U1 (
. clk_i (clk_i),. rst_i (rst_i),. cyc_i (cyc_i),. stb_i (stb_i),. adr_i (adr_i),. we_i (we_i),. dat_i (dat_i)
. dat_o (dat_o),. ack_o (ack_o)
. GPIO (GPIO)
);

항상 # 1 clk_i =이 ~ clk_i;

초기 시작
clk_i = 0;
rst_i = 1;
cyc_i = 0;
stb_i = 0;
adr_i = 0;
we_i = 0;
dat_i = 0;


항상 @ (posedge clk_i) 시작
dat_i <= # 20 dat_i 1;


초기 시작
# 20 rst_i = 1;
# 20 rst_i = 0;
# 20 we_i = 1;
# 20 cyc_i = 1; stb_i = 1; adr_i = 0;
# 200 cyc_i = 1; stb_i = 1; adr_i = 1;



endmodule////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / OpenCores 단순 범용 입출력 코어 / / / /
/ / / / / / / /
/ / / / 작성자 : 리처드 Herveille / / / /
/ / / / 리차드 (시) asics.ws / / / /
/ / / / www.asics.ws / / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / 저작 권자 (C) 2002 리차드 Herveille / / / /
/ / / / 리차드 (시) asics.ws / / / /
/ / / / / / / /
/ / / / 원본 파일이 사용될 수없이 배포 / / / /
/ / / / 제한 제공하는이 저작권 진술하지 않습니다 / / / /
/ / / / 파일을 제거에서 포함된 어떤 파생 작품 / / / /
/ / / / 원래의 저작권 정보와 관련된 책임의 한계 .////
/ / / / / / / /
/ / / /이 소프트웨어는있는 그대로 제공되는 ``없이 '와 이에 / / / /
/ / / 명시적 또는 묵시적 보증을 포함한 / 이에 국한되지 않음 / / / /
/ / / /에, 상품성 및 적합성에 대한 묵시적 보증 / / / /
/에 대한 특정 목적 / / /.어떠한 경우에도 계약 저자 / / / /
/ / / / 또는 제공자가 좋을 간접적 책임에 대한 직접적인 / / / /
/ / / /, 부수적, 특별, 징벌적 또는 파생적 손해를 / / / /
/ / / / (포함하되 이에 국한되지 대체의 조달을 위해 / / / /
/ / / / 상품 또는 서비스; 이윤 또는 손실의 사용, 데이터,; 또는 / / / /
/ / / / 사업 중단) 단 인한과 모든 이론에 / / / /
/ 책임, 계약에 관계없이 / / /, 엄격한 책임 또는 형태로든 직접적, / / / /
/ / / / (그렇지 않으면 또는 과실 포함)에 한번도 손실이 훨씬 더 / / / /
사용으로이 /의 / / / 소프트웨어에도 통보를하는 경우 / / / /
/ 이러한 손해 발생 가능성에 대해 / / /./ / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////

/ / CVS는 로그인
/ /
/ /에서 $ id : simple_gpio.v, v를 1.2 2002/12/22 16시 10분 17초 rherveille 특급 달러
/ /
/ / $ 일자 : 2002/12/22 16시 10분 17초 $
/ / $ 일 금요일 수정 : 1.2 $
/ / $ 저자 : rherveille $
/ / $ 사물함 : $
/ / $ 상태 : 특급 $
/ /
/ / 변경 내역 :
/ / $ 로그 : simple_gpio.v, v를 $
/ / 수정 1.2 2002/12/22 16시 10분 17초 rherveille
/ / 섹션 고정 일부 문서 오타를.
/ /
/ // /
/ / 아주 기본 8Bit GPIO 코어
/ /
/ /
/ / 레지스터 :
/ /
/ / 0x00 : 제어 등록 <io[7:0]>
/ / 비트 모드 7시 읽기 / 쓰기 입 / 출력 '1 '= 출력
/ / '0 '= 입력 모드
/ / 나타내고 0x01 : 라인 등록
/ / 비트 7시 연구 현황 현재 GPIO 핀 수준을
/ / W의 출력 레벨을 출력 GPIO 핀
/ /
/ /
/ / 하우투 :
/ /
/ / 입력으로 핀을 사용합니다 :
해당 비트의 제어 프로그램 / /)에 등록 '0 '입력 모드를'(.
/ / 핀의 상태 (입력 수준)가 등록을 줄 읽는다고 할 수 체크.
의 라인 효과를 더 등록 비트 동안에 입력 모드가 핀 / / GPIO를 쓰기로.
/ /
/ / 출력 핀을 사용하십시오 :
해당 비트의 제어 프로그램 / / '1 (등록 '출력 모드' ').
출력 레벨이 서면으로 해당 비트에 핀 / / 프로그램의 GPIO
/ / 라인 등록.
의 선 등록 비트를하는 동안에 출력 모드를 반환 핀 / / 읽기 GPIO의
/ / 현재 출력 레벨.
/ /
코어에 대한 더 적은 GPIOs Addapt / / :
/ /면 미만 8 GPIOs로 설정되었습니다 필요한보다 '사실은 수있는 매개 변수'
필요한 금액의 중단 / /.GPIOs은 LSBs에서 시작하는 매핑.
/ / 그래서 오직 'LSBs은 당 등록 Io는 유효합니다.
/ / 모든 다른 비트 ()는 8 'io '을 MSBs를 예 :''0 0으로 설정되어 있습니다.
/ / Codesize는 인터럽트입니다 금액으로 직선 약.즉, 사용
/ / 4 대신 소스의 8 GPIO의 감소에 의해 약 크기.30.
/ // /이 translate_off을 Synopsys의
/ /` "포함"timescale.v을
/ /이 translate_on을 Synopsys의

모듈 simple_gpio (
clk_i, rst_i, cyc_i, stb_i, adr_i, we_i, dat_i, dat_o, ack_o,
GPIO
);

/ /
/ / 입력 및 출력
/ /
매개 변수 사실은 = 8; 번호 GPIOs / /

/ / 8Bit 위시본 버스 슬레이브 인터페이스
입력 clk_i; / / 시계
입력 rst_i; / / 낮은 재설정 활성 (비동기)
입력 cyc_i; / /주기
입력 stb_i; / / 스트로브
입력 adr_i은, / / 주소 adr_i] [1
입력 we_i은, / / 활성화 쓰기
입력 dat_i의 [7시]; / / 데이터 출력
출력 dat_o의 [7시]; / / 데이터 입력
출력 ack_o을, / / 일반 버스 터미네이션

/ / GPIO 핀
inout의 [국가 사실은 : 1] GPIO;

/ /
/ / 모듈 몸
/ /
Io를 교체 [: 1] Ctrl 키를, 라인; / / ControlRegister, LineRegister
Io를 교체 [: 1] lgpio, llgpio; / / LatchedGPIO 핀

/ /
/ 수표를 매개 변수 / 수행
/ /
/ /이 translate_off을 Synopsys의
초기
시작
> (Io를한다면

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="시원한" border="0" />$ 디스플레이 ( "simple_gpio : 최대 8. GPIOs 지원되지 않습니다.");

/ /이 translate_on을 Synopsys의

/ /
/ / 위시본 인터페이스

와이어 wb_acc = cyc_i & stb_i; / / 위시본 액세스
와이어 wb_wr = wb_acc & we_i; / / 위시본 쓰기 권한을

항상 @ (posedge clk_i 또는 negedge rst_i)
rst_i (~ 경우)
시작
Ctrl 키를 <= # 1 사실은 (() (1'b0));
라인 <= # 1 ((사실은) (1'b0));

다른면 (wb_wr)
면 (adr_i)
라인 <= # 1 dat_i [사실은 - 1 : 0];
다른 사람
Ctrl 키를 <= # 1 dat_i [이오 Io - 1 : 0];dat_o] reg [이 7시;
항상 @ (posedge clk_i)
면 (adr_i)
dat_o <= # 1 (((8 - 사실은) (1'b0)), llgpio);
다른 사람
dat_o <= # 1 (((8 - 사실은) (1'b0)), Ctrl 키를);

ack_o 교체;
항상 @ (posedge clk_i 또는 negedge rst_i)
rst_i (~ 경우)
ack_o <= # 1 1'b0;
다른 사람
ack_o <= # 1 wb_acc &! ack_o;/ /
/ / GPIO 섹션

/ /이 핀을 GPIO 래치 입력
항상 @ (posedge clk_i)
lgpio <= # 1 GPIO;

/ /이 (래치 다시 RISC 줄일 메타 안정성을)
항상 @ (posedge clk_i)
llgpio <= # 1 lgpio;

/는 출력 GPIO의 / 할당
정수 앤;
Io를 교체 [: 1] igpio을; / / 임시 내부 신호를

항상 @ (Ctrl 또는 라인)
(용 n은 1; N 개의 <= 사실은; n은 n 1)
igpio [n]의 정보 <= Ctrl 키를 [n]의?온라인 [앤]를 : 1'bz;

igpio = GPIO를 할당;

endmodule제발 도와 문제를 내!

 
그것의 아주 체크 자체 그들이되지 않습니다 결핵과 당신 무슨 말을 열심히 해달라고 말씀은하지 않는 이유는 당신이 때 당신의 기대를 충족.

 

Welcome to EDABoard.com

Sponsor

Back
Top