C
chensanlien
Guest
Kjære alle,
Jeg prøver opencore.simple_gpio (Wishbone compiliable) simultation.
Jeg finner denne koden ikke passer min expection,
følgende: mine testbech & opprinnelige koden
module toppen;
reg clk_i;
reg rst_i;
reg cyc_i;
reg stb_i;
reg adr_i;
reg we_i;
reg [7:0] dat_i;
wire [7:0] dat_o;
wire ack_o;
wire [7:0] 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)
);
alltid # 1 clk_i = ~ clk_i;
innledende begynne
clk_i = 0;
rst_i = 1;
cyc_i = 0;
stb_i = 0;
adr_i = 0;
we_i = 0;
dat_i = 0;
slutt
alltid @ (posedge clk_i) begin
dat_i <= # 20 dat_i 1;
slutt
innledende begynne
# 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;
slutt
endmodule////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / OpenCores Enkelt General Purpose IO core / / / /
/ / / / / / / /
/ / / / Forfatter: Richard Herveille / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / Www.asics.ws / / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / Copyright (C) 2002 Richard Herveille / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / / / / /
/ / / / Dette kildefil kan brukes og distribueres uten / / / /
/ / / / Begrensninger forutsatt at dette opphavsrett uttalelsen ikke er / / / /
/ / / / Fjernes fra filen, og at alle avledede arbeider inneholder / / / /
/ / / / Det originale opphavsrett og tilhørende forbehold .////
/ / / / / / / /
/ / / / DENNE PROGRAMVAREN LEVERES `` AS IS''OG UTEN / / / /
/ / / / DIREKTE ELLER INDIREKTE GARANTIER, INKLUDERT MEN IKKE BEGRENSET / / / /
/ / / / TIL UNDERFORSTÅTTE GARANTIER OM SALGBARHET OG EGNETHET / / / /
/ / / / FOR ET BESTEMT FORMÅL.IKKE UNDER NOEN OMSTENDIGHETER the author / / / /
/ / / / ELLER BIDRAGSYTERE VÆRE ANSVARLIG FOR NOEN DIREKTE, INDIREKTE, / / / /
/ / / / TILFELDIG, SPESIELT, ELLER FØLGESKADER / / / /
/ / / / (INKLUDERT, MEN IKKE BEGRENSET TIL ANSKAFFELSE AV ALTERNATIVE / / / /
/ / / / ELLER-TJENESTER, TAP AV BRUK, DATA ELLER INNTEKTER ELLER / / / /
/ / / / AVBRUDDSTAP) FORÅRSAKET AV OG PÅ UAVHENGIG AV / / / /
/ / / / ANSVAR, ENTEN I KONTRAKT, objektivt ansvar eller SIVILT / / / /
/ / / / (INKLUDERT UAKTSOMHET ELLER ANNET) SOM OPPSTÅR PÅ NOEN MÅTE / / / /
/ / / / AV BRUKEN AV DENNE PROGRAMVAREN, SELV OM OPPMERKSOM PÅ / / / /
/ / / / MULIGHETEN FOR SLIK SKADE./ / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / 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: $
/ / $ State: Exp $
/ /
/ / Change History:
/ / $ Log: simple_gpio.v, v $
/ / Revisjon 1,2 2002/12/22 16:10:17 rherveille
/ / Faste noen skrivefeil i dokumentasjonsdelen.
/ /
/ // /
/ / Very basic 8bit GPIO kjerne
/ /
/ /
/ / Registers:
/ /
/ / 0x00: Control Register <io[7:0]>
/ / Bits 7:0 R / W Input / Output '1 '= output mode
/ / '0 '= Inntastingsmodus
/ / 0x01: Line Registrer
/ / Biter 7:0 R Status Nåværende GPIO pin nivå
/ / W Output GPIO pin utgangsnivået
/ /
/ /
/ / HOWTO:
/ /
/ / Bruk en knappenål som et innspill:
/ / Program tilsvarende bit i kontrollen registrerer input mode ''0' ().
/ / The pin's tilstand (input level) kan kontrolleres ved å lese Line Register.
/ / Skrive til GPIO pin Line Registrer deg litt mens du er i inntastingsmodus har ingen effekt.
/ /
/ / Bruk en knappenål som en utgang:
/ / Program tilsvarende bit i kontrollen registrerer 'output mode' '1 '().
/ / Program for GPIO pin produksjon nivå ved å skrive til den tilsvarende bit i
/ / The Line Register.
/ / Lese GPIO pin Line Registrer deg litt mens du er i produksjon modus returnerer
/ / Nåværende nivået på produksjonen.
/ /
/ / Addapt kjernen for færre GPIOs:
/ / Hvis mindre enn 8 GPIOs er nødvendig, enn 'io' parameter kan settes til
/ / Mengden av nødvendige avbrudd.GPIOs er kartlagt starter ved LSBs.
/ / Så bare 'io' LSBs per register er gyldige.
/ / Alle andre bit (dvs. 8-'io 'MSBs) er satt til null '0'.
/ / Codesize er omtrent lineær til mengden avbrudd.Ie hjelp
/ / 4 i stedet for 8 GPIO kilder reduserer størrelsen med ca.halvparten.
/ // / Synopsys translate_off
/ / `include" timescale.v "
/ / Synopsys translate_on
modul simple_gpio (
clk_i, rst_i, cyc_i, stb_i, adr_i, we_i, dat_i, dat_o, ack_o,
gpio
);
/ /
/ / Innganger og utganger
/ /
parameter io = 8; / / antall GPIOs
/ / 8bit Wishbone buss slave interface
input clk_i; / klokke
input rst_i; / / reset (asynkron aktiv lav)
input cyc_i; / syklus
input stb_i; / strobe
input adr_i; / / adresse adr_i [1]
input we_i; / / skrive aktiverer
input [7:0] dat_i; / data output
output [7:0] dat_o; / data input
output ack_o; / normal buss terminering
/ / GPIO pins
Inout [io: 1] gpio;
/ /
/ / Module kropp
/ /
reg [io: 1] ctrl, linje; / ControlRegister, LineRegister
reg [io: 1] lgpio, llgpio; / / LatchedGPIO pins
/ /
/ / Utfører-parameteren kontroller
/ /
/ / Synopsys translate_off
innledende
begynne
if (io>
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kjølig" border="0" />$ display ( "simple_gpio: max. 8. GPIOs støttet.");
slutt
/ / Synopsys translate_on
/ /
/ / Wishbone grensesnitt
wire wb_acc = cyc_i & stb_i; / Wishbone tilgang
wire wb_wr = wb_acc & we_i; / Wishbone skrivetilgang
alltid @ (posedge clk_i eller negedge rst_i)
if (~ rst_i)
begynne
ctrl <= # 1 ((io) (1'b0));
linje <= # 1 ((io) (1'b0));
slutt
else if (wb_wr)
if (adr_i)
linje <= # 1 dat_i [io-1: 0];
ellers
ctrl <= # 1 dat_i [io-1: 0];reg [7:0] dat_o;
alltid @ (posedge clk_i)
if (adr_i)
dat_o <= # 1 (((8-io) (1'b0)), llgpio);
ellers
dat_o <= # 1 (((8-io) (1'b0)), ctrl);
reg ack_o;
alltid @ (posedge clk_i eller negedge rst_i)
if (~ rst_i)
ack_o <= # 1 1'b0;
ellers
ack_o <= # 1 wb_acc &! ack_o;/ /
/ / GPIO seksjon
/ / Sperren GPIO input pins
alltid @ (posedge clk_i)
lgpio <= # 1 gpio;
/ / Sperren igjen (redusere meta-stabilitet RISC)
alltid @ (posedge clk_i)
llgpio <= # 1 lgpio;
/ / Tildele GPIO utganger
heltall n;
reg [io: 1] igpio; / / midlertidige interne signalet
alltid @ (ctrl eller linje)
for n (= 1; n <= io; n = n 1)
igpio [N] <= ctrl [n]?line [n]: 1'bz;
tildele gpio = igpio;
endmoduleBehage hjelpe meg problem!
Jeg prøver opencore.simple_gpio (Wishbone compiliable) simultation.
Jeg finner denne koden ikke passer min expection,
følgende: mine testbech & opprinnelige koden
module toppen;
reg clk_i;
reg rst_i;
reg cyc_i;
reg stb_i;
reg adr_i;
reg we_i;
reg [7:0] dat_i;
wire [7:0] dat_o;
wire ack_o;
wire [7:0] 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)
);
alltid # 1 clk_i = ~ clk_i;
innledende begynne
clk_i = 0;
rst_i = 1;
cyc_i = 0;
stb_i = 0;
adr_i = 0;
we_i = 0;
dat_i = 0;
slutt
alltid @ (posedge clk_i) begin
dat_i <= # 20 dat_i 1;
slutt
innledende begynne
# 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;
slutt
endmodule////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / OpenCores Enkelt General Purpose IO core / / / /
/ / / / / / / /
/ / / / Forfatter: Richard Herveille / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / Www.asics.ws / / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / / / / / / /
/ / / / Copyright (C) 2002 Richard Herveille / / / /
/ / / / Richard (at) asics.ws / / / /
/ / / / / / / /
/ / / / Dette kildefil kan brukes og distribueres uten / / / /
/ / / / Begrensninger forutsatt at dette opphavsrett uttalelsen ikke er / / / /
/ / / / Fjernes fra filen, og at alle avledede arbeider inneholder / / / /
/ / / / Det originale opphavsrett og tilhørende forbehold .////
/ / / / / / / /
/ / / / DENNE PROGRAMVAREN LEVERES `` AS IS''OG UTEN / / / /
/ / / / DIREKTE ELLER INDIREKTE GARANTIER, INKLUDERT MEN IKKE BEGRENSET / / / /
/ / / / TIL UNDERFORSTÅTTE GARANTIER OM SALGBARHET OG EGNETHET / / / /
/ / / / FOR ET BESTEMT FORMÅL.IKKE UNDER NOEN OMSTENDIGHETER the author / / / /
/ / / / ELLER BIDRAGSYTERE VÆRE ANSVARLIG FOR NOEN DIREKTE, INDIREKTE, / / / /
/ / / / TILFELDIG, SPESIELT, ELLER FØLGESKADER / / / /
/ / / / (INKLUDERT, MEN IKKE BEGRENSET TIL ANSKAFFELSE AV ALTERNATIVE / / / /
/ / / / ELLER-TJENESTER, TAP AV BRUK, DATA ELLER INNTEKTER ELLER / / / /
/ / / / AVBRUDDSTAP) FORÅRSAKET AV OG PÅ UAVHENGIG AV / / / /
/ / / / ANSVAR, ENTEN I KONTRAKT, objektivt ansvar eller SIVILT / / / /
/ / / / (INKLUDERT UAKTSOMHET ELLER ANNET) SOM OPPSTÅR PÅ NOEN MÅTE / / / /
/ / / / AV BRUKEN AV DENNE PROGRAMVAREN, SELV OM OPPMERKSOM PÅ / / / /
/ / / / MULIGHETEN FOR SLIK SKADE./ / / /
/ / / / / / / /
////////////////////////////////////////////////// ///////////////////
/ / 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: $
/ / $ State: Exp $
/ /
/ / Change History:
/ / $ Log: simple_gpio.v, v $
/ / Revisjon 1,2 2002/12/22 16:10:17 rherveille
/ / Faste noen skrivefeil i dokumentasjonsdelen.
/ /
/ // /
/ / Very basic 8bit GPIO kjerne
/ /
/ /
/ / Registers:
/ /
/ / 0x00: Control Register <io[7:0]>
/ / Bits 7:0 R / W Input / Output '1 '= output mode
/ / '0 '= Inntastingsmodus
/ / 0x01: Line Registrer
/ / Biter 7:0 R Status Nåværende GPIO pin nivå
/ / W Output GPIO pin utgangsnivået
/ /
/ /
/ / HOWTO:
/ /
/ / Bruk en knappenål som et innspill:
/ / Program tilsvarende bit i kontrollen registrerer input mode ''0' ().
/ / The pin's tilstand (input level) kan kontrolleres ved å lese Line Register.
/ / Skrive til GPIO pin Line Registrer deg litt mens du er i inntastingsmodus har ingen effekt.
/ /
/ / Bruk en knappenål som en utgang:
/ / Program tilsvarende bit i kontrollen registrerer 'output mode' '1 '().
/ / Program for GPIO pin produksjon nivå ved å skrive til den tilsvarende bit i
/ / The Line Register.
/ / Lese GPIO pin Line Registrer deg litt mens du er i produksjon modus returnerer
/ / Nåværende nivået på produksjonen.
/ /
/ / Addapt kjernen for færre GPIOs:
/ / Hvis mindre enn 8 GPIOs er nødvendig, enn 'io' parameter kan settes til
/ / Mengden av nødvendige avbrudd.GPIOs er kartlagt starter ved LSBs.
/ / Så bare 'io' LSBs per register er gyldige.
/ / Alle andre bit (dvs. 8-'io 'MSBs) er satt til null '0'.
/ / Codesize er omtrent lineær til mengden avbrudd.Ie hjelp
/ / 4 i stedet for 8 GPIO kilder reduserer størrelsen med ca.halvparten.
/ // / Synopsys translate_off
/ / `include" timescale.v "
/ / Synopsys translate_on
modul simple_gpio (
clk_i, rst_i, cyc_i, stb_i, adr_i, we_i, dat_i, dat_o, ack_o,
gpio
);
/ /
/ / Innganger og utganger
/ /
parameter io = 8; / / antall GPIOs
/ / 8bit Wishbone buss slave interface
input clk_i; / klokke
input rst_i; / / reset (asynkron aktiv lav)
input cyc_i; / syklus
input stb_i; / strobe
input adr_i; / / adresse adr_i [1]
input we_i; / / skrive aktiverer
input [7:0] dat_i; / data output
output [7:0] dat_o; / data input
output ack_o; / normal buss terminering
/ / GPIO pins
Inout [io: 1] gpio;
/ /
/ / Module kropp
/ /
reg [io: 1] ctrl, linje; / ControlRegister, LineRegister
reg [io: 1] lgpio, llgpio; / / LatchedGPIO pins
/ /
/ / Utfører-parameteren kontroller
/ /
/ / Synopsys translate_off
innledende
begynne
if (io>
<img src="http://www.edaboard.com/images/smiles/icon_cool.gif" alt="Kjølig" border="0" />$ display ( "simple_gpio: max. 8. GPIOs støttet.");
slutt
/ / Synopsys translate_on
/ /
/ / Wishbone grensesnitt
wire wb_acc = cyc_i & stb_i; / Wishbone tilgang
wire wb_wr = wb_acc & we_i; / Wishbone skrivetilgang
alltid @ (posedge clk_i eller negedge rst_i)
if (~ rst_i)
begynne
ctrl <= # 1 ((io) (1'b0));
linje <= # 1 ((io) (1'b0));
slutt
else if (wb_wr)
if (adr_i)
linje <= # 1 dat_i [io-1: 0];
ellers
ctrl <= # 1 dat_i [io-1: 0];reg [7:0] dat_o;
alltid @ (posedge clk_i)
if (adr_i)
dat_o <= # 1 (((8-io) (1'b0)), llgpio);
ellers
dat_o <= # 1 (((8-io) (1'b0)), ctrl);
reg ack_o;
alltid @ (posedge clk_i eller negedge rst_i)
if (~ rst_i)
ack_o <= # 1 1'b0;
ellers
ack_o <= # 1 wb_acc &! ack_o;/ /
/ / GPIO seksjon
/ / Sperren GPIO input pins
alltid @ (posedge clk_i)
lgpio <= # 1 gpio;
/ / Sperren igjen (redusere meta-stabilitet RISC)
alltid @ (posedge clk_i)
llgpio <= # 1 lgpio;
/ / Tildele GPIO utganger
heltall n;
reg [io: 1] igpio; / / midlertidige interne signalet
alltid @ (ctrl eller linje)
for n (= 1; n <= io; n = n 1)
igpio [N] <= ctrl [n]?line [n]: 1'bz;
tildele gpio = igpio;
endmoduleBehage hjelpe meg problem!