simple GPIO (OpenCore) problème?

C

chensanlien

Guest
Bonjour à tous,

J'essaie opencore.simple_gpio (triangle compiliable) simultation.

Je trouve ce code ne correspondant à mes expection,

: Mon testbech & original code suivant

Haut module;

reg clk_i;
reg rst_i;
reg cyc_i;
reg stb_i;
reg adr_i;
reg we_i;
reg [07:00] dat_i;

fils [07:00] dat_o;
ack_o fil;
fils [07:00] GPIO;

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)
);

toujours # 1 = ~ clk_i clk_i;

initial de commencer
clk_i = 0;
rst_i = 1;
cyc_i = 0;
stb_i = 0;
adr_i = 0;
we_i = 0;
dat_i = 0;
fin

toujours @ (posedge clk_i) commencent
<Dat_i = # 20 1 dat_i;
fin

initial de commencer
# 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;

fin

endmodule////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / Simple OpenCores General Purpose IO de base / / / /
/ / / / / / / /
/ / / / Auteur: Richard Herveille / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / Www.asics.ws / / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / Copyright (C) 2002 Herveille Richard / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / / / / /
/ / / / Ce fichier source peut être utilisé et distribué sans / / / /
/ / / / Restriction à condition que cette déclaration du droit d'auteur n'est pas / / / /
/ / / / Retiré du dossier et que toute œuvre dérivée contient / / / /
/ / / / L'avis de copyright d'origine et la clause de non responsabilité .//// associés
/ / / / / / / /
/ / / / CE LOGICIEL EST FOURNI `` AS IS''ET SANS AUCUNE / / / /
/ / / / Ou implicite EXPRESS, Y COMPRIS, SANS S'Y LIMITER / / / /
/ / / / A, LA GARANTIE IMPLICITE DE QUALITÉ MARCHANDE ET D'ADAPTATION / / / /
/ / / / À UN USAGE PARTICULIER.EN AUCUN cas l'auteur / / / /
/ / / / Ou des Contributeurs RESPONSABLE DES DOMMAGES DIRECTS, INDIRECTS, / / / /
/ / / / INCIDENTS, SPÉCIAUX, EXEMPLAIRES OU DOMMAGES / / / /
/ / / / (Y COMPRIS, MAIS SANS S'Y LIMITER, l'achat de substituer / / / /
/ / / / Produits ou services; PERTE D'UTILISATION, DE DONNÉES OU DE BÉNÉFICES OU / / / /
/ / / / Interruption d'exploitation) soit causé ou sur une théorie de / / / /
/ / / / Responsabilité résultant du non contrat, responsabilité stricte, ou d'un délit / / / /
/ / / / (Incluant la négligence ou autre) découlant de quelque manière OUT / / / /
/ / / / DE L'UTILISATION DE CE LOGICIEL, même si conseillé de les / / / /
/ / / / Possibilité de tels dommages./ / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////

/ / CVS Log
/ /
/ / $ Id: simple_gpio.v, v 1.2 2002/12/22 16:10:17 rherveille Exp $
/ /
/ / $ Date: 2002/12/22 16:10:17 $
/ / $ Revision: 1.2 $
/ / $ Author: rherveille $
/ / $ Locker: $
/ / $ État: Exp $
/ /
/ Histoire / Modifier:
/ / $ Log: simple_gpio.v, v $
/ / Version 1.2 2002/12/22 16:10:17 rherveille
/ / Correction de quelques fautes de frappe dans la section documentation.
/ /
/ // /
/ / Très 8bit base GPIO base
/ /
/ /
/ / Registres:
/ /
/ / 0x00: <io[7:0]> registre de contrôle
/ / 07h00 bits R / W Input / Output '1 'mode de sortie =
'0 '= Mode d'entrée / /
/ / 0x01: Inscrivez-Line
/ / Bits 07h00 R Situation actuelle au niveau broches GPIO
/ / W Sortie GPIO broches niveau de sortie
/ /
/ /
/ / HOWTO:
/ /
/ / Utilisez une épingle en tant que contribution:
/ / Programme du bit correspondant dans le registre de contrôle en mode «input» ('0 ').
/ / Épingle l'Etat (niveau d'entrée) peut être vérifié en lisant le registre en ligne.
/ / Écriture de GPIO PIN ligne le bit de registre tandis que le mode d'entrée en n'a pas d'effet.
/ /
/ / Utilisez une épingle en sortie:
/ / Programme du bit correspondant dans le registre de contrôle de «mode de sortie" ('1 ').
/ / La broche de sortie de niveau GPIO de programme par écrit à le bit correspondant dans
/ / Le registre en ligne.
/ / Lecture de broches GPIO ligne le bit de registre tandis que le mode de sortie dans les déclarations de la
/ / Niveau de sortie actuelle.
/ /
/ / Addapt le noyau de moins de GPIO:
/ / Si moins de 8 GPIO sont nécessaires, que «io» le paramètre peut être réglé pour
/ / Le montant des interruptions nécessaires.GPIO sont mappés à partir de la LSB.
/ / Alors que les «LSB io par registre sont valables.
/ / Tous les autres bits (le 8-'io 'ESM) sont remis à zéro «0».
/ / Codesize est approximativement linéaire à la quantité d'interruptions.C. à d. utilisant
/ / 4 au lieu de sources GPIO 8 réduit la taille d'env.demi.
/ // / Synopsys translate_off
/ / `Include" timescale.v "
/ / Synopsys translate_on

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

/ /
/ / Entrées et sorties
/ /
io paramètre = 8 / / nombre de GPIO

/ / 8bit FOURCHETTE interface esclave de bus
clk_i entrée; / / clock
rst_i entrée; / / reset (asynchrone peu actif)
cyc_i entrée; / / cycle
stb_i entrée; / / stroboscope
adr_i entrée; / adr_i adresse / [1]
we_i entrée; / / écriture permettent
entrée [07:00] dat_i; / / sortie de données
sortie [07:00] dat_o; / / saisie de données
sortie ack_o; / / terminaison de bus normal

/ / Broches GPIO
inout [io: 1] GPIO;

/ /
/ / Corps du module
/ /
reg io [1] ctrl, en ligne; / / ControlRegister, LineRegister
reg io [1] lgpio, llgpio; / / épingles LatchedGPIO

/ /
/ / Effectuer des contrôles de paramètres
/ /
/ / Synopsys translate_off
initial
commencer
if (io>

<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Frais" border="0" />affichage $ ("simple_gpio: 8 max. GPIO pris en charge.");
fin
/ / Synopsys translate_on

/ /
/ / Interface FOURCHETTE

wb_acc fils = cyc_i & stb_i; / / FOURCHETTE accès
wb_wr fils = wb_acc & we_i; / / FOURCHETTE accès en écriture

toujours @ (posedge clk_i ou negedge rst_i)
if (~ rst_i)
commencer
<Ctrl = # 1 ((IO) (1'b0));
<= Ligne # 1 ((IO) (1'b0));
fin
else if (wb_wr)
if (adr_i)
<= Ligne # 1 dat_i [io-1: 0];
d'autre
<Ctrl = # 1 dat_i [io-1: 0];reg [07:00] dat_o;
toujours @ (posedge clk_i)
if (adr_i)
<Dat_o = # 1 (((8-io) ()) 1'b0, llgpio);
d'autre
<Dat_o = # 1 (((8-io) ()) 1'b0, ctrl);

reg ack_o;
toujours @ (posedge clk_i ou negedge rst_i)
if (~ rst_i)
<Ack_o = # 1 1'b0;
d'autre
<Ack_o = # 1 & wb_acc! Ack_o;/ /
/ / Section GPIO

/ / Goupilles de verrouillage entrée GPIO
toujours @ (posedge clk_i)
= <# 1 GPIO lgpio;

/ / Verrou à nouveau (réduction de la méta-stabilité RISC)
toujours @ (posedge clk_i)
= <# 1 lgpio llgpio;

/ / Affecter les sorties GPIO
entier n;
reg io [1] igpio; / / signal interne temporaire

toujours @ (ctrl ou en ligne)
pour (n = 1; <io n = n = n 1)
igpio [<] n = Ctrl] n [?[N] ligne: 1'bz;

attribuer GPIO = igpio;

endmoduleS'il vous plaît aider mon problème!

 
Son tout à fait difficile de dire pourquoi il ne répond pas à vos attentes lorsque vous ne dites pas ce qu'ils sont et votre tuberculose n'est pas auto-contrôle.

 

Welcome to EDABoard.com

Sponsor

Back
Top