VERILOG -> VHDL

S

sameem_shabbir

Guest
Jeg har funnet noen nyttige kode om prosjektet mitt

Men det er i VHDLOg jeg ma verilog brukerhvor å konvertereeller er det noen annen måte at jeg bør gjøre noen endringer i koden
 
Det finnes kommersielle verktøy der ute som lar unidirectional / bidirectional konverteringer, men den byproduct / Resultatet er ikke rent.Den beste måten å gjøre dette på er å beholde de opprinnelige VHDL kilder og behandle dem som en svart boks, og alt du trenger å gjøre er å skrive en Verilog wrapper rundt øverste nivå funksjon.Alle syntese og simuleringsverktøy er nå i stand til å støtte begge språk samtidig.

Skål,
-S

 
Hei!Jeg har funnet en nyttig verilog for prosjektet mitt, men
jeg er en vhdl brukeren.Jeg vet at Xilinx Webpack hva
jeg bruker støtter både verilog og vhdl.
Men jeg ønsker å forstå all koden, kan du, kan noen oversette det for meg.
det er ikke en lang kode.Selv om en del av denne koden blir oversatt,
vil jeg sette pris på, takk på forhånd.

/ / Synk SCK til FPGA klokken ved hjelp av en 3-bit shift register
reg [2:0] SCKr; alltid @ (posedge clk) SCKr <= (SCKr [1:0], SCK);
wire SCK_risingedge = (SCKr [2:1] == 2'b01); / / Nå kan vi oppdage SCK stigende kanter
wire SCK_fallingedge = (SCKr [2:1] == 2'b10); / / og fallende kanter

/ / Samme for SSEL
reg [2:0] SSELr; alltid @ (posedge clk) SSELr <= (SSELr [1:0], SSEL);
wire SSEL_active = ~ SSELr [1]; / / SSEL er aktiv lav
wire SSEL_startmessage = (SSELr [2:1] == 2'b10); / / melding starter på fallende kant
wire SSEL_endmessage = (SSELr [2:1] == 2'b01); / / melding stopper på stigende kanten

/ / Og for MOSI
reg [1:0] MOSIr; alltid @ (posedge clk) MOSIr <= (MOSIr [0], MOSI);
wire MOSI_data = MOSIr [1];

/ / Nå mottar data fra SPI bussen er lett.

reg [2:0] bitcnt; / / vi håndterer SPI i 8-bits format, så vi trenger 3 biter telleren til å telle biter som de kommer inn i
reg byte_received; / / høy når en byte er mottatt
reg [7:0] byte_data_received;

alltid @ (posedge clk)
begynne
if (~ SSEL_active)
bitcnt <= 3'b000;
ellers
if (SCK_risingedge)
begynne
bitcnt <= bitcnt 3'b001;
byte_data_received <= (byte_data_received [6:0], MOSI_data); / / gjennomføre et skifte venstre register (siden vi mottar data MSB først)
slutt
slutt

alltid @ (posedge clk) byte_received <= SSEL_active & & SCK_risingedge & & (bitcnt == 3'b111);

/ / Vi bruker LSB av data til å styre en LED
reg LED;
alltid @ (posedge clk) if (byte_received) LED <= byte_data_received [0];

/ / Endelig overføring del.

reg [7:0] byte_data_sent;

reg [7:0] cnt;
alltid @ (posedge clk) if (SSEL_startmessage) cnt <= cnt 8' h1; / / telle meldinger

alltid @ (posedge clk)
if (SSEL_active)
begynne
if (SSEL_startmessage)
byte_data_sent <= cnt; / / første byte sendt i en melding er meldingen teller
ellers
if (SCK_fallingedge)
begynne
if (bitcnt == 3'b000)
byte_data_sent <= 8'h00; / / etter at vi sender 0s
ellers
byte_data_sent <= (byte_data_sent [6:0], 1'b0);
slutt
slutt

tildele MISO = byte_data_sent [7]; / / send MSB første
/ / Vi antar at det bare er en slave på SPI bussen, så vi trenger ikke bry deg med en tri-state buffer for MISO
/ / Ellers ville vi må tri-state MISO når SSEL er inaktiv

endmodule

 
sabres,

Den Verilog logikk er meget enkel seriell til parallell konvertering (8-bit i dette tilfellet) som innebærer en start / slutt aktiverer puls, 3-bit binær teller, og en 8-bits føljetong å parallelle skift register.Hvorfor ikke bare re-koden den til VHDL eller ganske enkelt lage en svart boks rundt Verilog kilden og bruke kilden som det er.Jeg har gjort mye av design, med både Verilog og VHDL, der Verilog er mye enklere å forstå / lese / følge.Hvis du vet VHDL veldig godt, den Verilog logikk bør være en puste.

Skål,
-s

 
Dessverre
jeg er ikke veldig bra på vhdl

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />

men jeg vet det bedre enn enn Verilog.
hva jeg vet er asm og c på PIC microcontrollers.
Det jeg trenger å gjøre er en SPI kommunikasjon mellom en PIC18f og en Fpga.Og selvfølgelig en har problem med fpga
er en del av kommunikasjonen.

Jeg vet hva du mener, bruker verilog koden som en svart boks.det
er en god idé, men jeg ønsker ikke å bruke i dette tilfellet.
Nå prøver
jeg å skrive koden i VHDL.Jeg er nybegynner i dette hdl området slik hjelp med vhdl koden for en enkel SPIet implementering eller en oversetter av denne koden blir verdsatt.

snøfall: takk for svar

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />
 
Bruk verktøyene vhdl til verilog
men stilen er ikke så bra

 
Jeg var serchin "for en stund på google, men jeg fant ingen gratis anvendelig verktøy for VHDL til Verilog konvertere.

Kan noen gi meg en link til en gratis, arbeider tool.it blir verdsatt, takk

 
sabres wrote:

Hei!
Jeg har funnet en nyttig verilog for prosjektet mitt, men jeg er en vhdl brukeren.
Jeg vet at Xilinx Webpack hva jeg bruker støtter både verilog og vhdl.

Men jeg ønsker å forstå all koden, kan du, kan noen oversette det for meg.

det er ikke en lang kode.
Selv om en del av denne koden blir oversatt, vil jeg sette pris på, takk på forhånd./ / Synk SCK til FPGA klokken ved hjelp av en 3-bit shift register

reg [2:0] SCKr; alltid @ (posedge clk) SCKr <= (SCKr [1:0], SCK);

wire SCK_risingedge = (SCKr [2:1] == 2'b01); / / Nå kan vi oppdage SCK stigende kanter

wire SCK_fallingedge = (SCKr [2:1] == 2'b10); / / og fallende kanter/ / Samme for SSEL

reg [2:0] SSELr; alltid @ (posedge clk) SSELr <= (SSELr [1:0], SSEL);

wire SSEL_active = ~ SSELr [1]; / / SSEL er aktiv lav

wire SSEL_startmessage = (SSELr [2:1] == 2'b10); / / melding starter på fallende kant

wire SSEL_endmessage = (SSELr [2:1] == 2'b01); / / melding stopper på stigende kanten/ / Og for MOSI

reg [1:0] MOSIr; alltid @ (posedge clk) MOSIr <= (MOSIr [0], MOSI);

wire MOSI_data = MOSIr [1];/ / Nå mottar data fra SPI bussen er lett.reg [2:0] bitcnt; / / vi håndterer SPI i 8-bits format, så vi trenger 3 biter telleren til å telle biter som de kommer inn i

reg byte_received; / / høy når en byte er mottatt

reg [7:0] byte_data_received;alltid @ (posedge clk)

begynne

if (~ SSEL_active)

bitcnt <= 3'b000;

ellers

if (SCK_risingedge)

begynne

bitcnt <= bitcnt 3'b001;

byte_data_received <= (byte_data_received [6:0], MOSI_data); / / gjennomføre et skifte venstre register (siden vi mottar data MSB først)

slutt

sluttalltid @ (posedge clk) byte_received <= SSEL_active & & SCK_risingedge & & (bitcnt == 3'b111);/ / Vi bruker LSB av data til å styre en LED

reg LED;

alltid @ (posedge clk) if (byte_received) LED <= byte_data_received [0];/ / Endelig overføring del.reg [7:0] byte_data_sent;reg [7:0] cnt;

alltid @ (posedge clk) if (SSEL_startmessage) cnt <= cnt 8' h1; / / telle meldingeralltid @ (posedge clk)

if (SSEL_active)

begynne

if (SSEL_startmessage)

byte_data_sent <= cnt; / / første byte sendt i en melding er meldingen teller

ellers

if (SCK_fallingedge)

begynne

if (bitcnt == 3'b000)

byte_data_sent <= 8'h00; / / etter at vi sender 0s

ellers

byte_data_sent <= (byte_data_sent [6:0], 1'b0);

slutt

slutttildele MISO = byte_data_sent [7]; / / send MSB første

/ / Vi antar at det bare er en slave på SPI bussen, så vi trenger ikke bry deg med en tri-state buffer for MISO

/ / Ellers ville vi må tri-state MISO når SSEL er inaktivendmodule
 
Sitat:Hvor er begynnelsen av SPI modulen erklæring?Å holde oversetter glad inngangen koden må være feilfri.
 
Hallo,

utgangspunktet Jeg er enig med snøfall's forslag til instantiate verilog moduler som en komponent i VHDL, ville du ikke trenger en spesiell wrapper i de fleste tilfeller.Som et problem, noen verktøy kan trenge en ekstra blandet språk lisens muligheten til å gjøre dette (tror jeg, ModelSim).Men @ ltera, Xilinx, uansett webtools kan gjøre.
it's operation anyhow.

Hvis du trenger å endre kode eller annen måte å tilpasse den til din søknad, må man forstå
den operasjonen anyhow.Jeg kan ikke se at Verilog er helt forskjellig fra VHDL.Jeg meste bruker VHDL av tradisjon, men startet Verilog for enkelte prosjekter på kunder etterspør.Til min mening, det holder deg mentalt rask, det samme som læring naturlig språk.

Kanskje vi kan hjelpe deg med å konvertere noen konstruerer som ikke er lett forståelig.Som en grunnleggende forskjell, VHDL er mer typisk og også structurized (og dermed mer verbose - eller lang winded).

Jeg starter med synkron kanten gjenkjenning:
Code:

/ / Synk SCK til FPGA klokken ved hjelp av en 3-bit shift register

reg [2:0] SCKr; alltid @ (posedge clk) SCKr <= (SCKr [1:0], SCK);

wire SCK_risingedge = (SCKr [2:1] == 2'b01); / / Nå kan vi oppdage SCK stigende kanter

wire SCK_fallingedge = (SCKr [2:1] == 2'b10); / / og fallende kanter
 
[quote = "sameem_shabbir"] Jeg har funnet noen nyttige kode om prosjektet mitt
Men det er i VHDL
Og jeg ma verilog bruker [/ i]
Hvordan konvertere den [/ b]
eller er det noen annen måte at jeg bør gjøre noen endringer i koden [/ i] [/ quote]

Du kan bruke XHDL.

 
-------------------------------------------------- --------------------------------------------
--
- VHDL filer generert av X-HDL
- Lør Jan 26
10:27:07 2008
--
- Inndatafilen: spi.v
- Design navn: SPI_slave
- Forfatter:
- Firma:
--
- Beskrivelse:
--
--
-------------------------------------------------- --------------------------------------------
--

Pakken SPI_slave_pkg IS
KOMPONENT SPI_slave
Port (
clk: IN bit;
SCK: I bit;
MOSI: I bit;
MISO: UT-bits;
SSEL: I bit;
LED: UT-bit);
END KOMPONENT;
END SPI_slave_pkg;ENHET SPI_slave IS
Port (
clk: IN bit;
SCK: I bit;
MOSI: I bit;
MISO: UT-bits;
SSEL: I bit;
LED: UT-bit);
END ENHET SPI_slave;

ARKITEKTUR oversettes AV SPI_slave IS- Synkroniser SCK til FPGA klokken ved hjelp av en 3-bit shift register
SIGNAL SCKr: bit_vector (2 DOWNTO 0);
SIGNAL SCK_risingedge: bit; - nå kan vi oppdage SCK stigende kanter
SIGNAL SCK_fallingedge: bit; - og fallende kanter
- Samme for SSEL
SIGNAL SSELr: bit_vector (2 DOWNTO 0);
SIGNAL SSEL_active: bit; - SSEL er aktiv lav
SIGNAL SSEL_startmessage: bit; - melding starter på fallende kant
SIGNAL SSEL_endmessage: bit; - melding stopper ved stigende kanten
- Og for MOSI
SIGNAL MOSIr: bit_vector (1 DOWNTO 0);
SIGNAL MOSI_data: bit;
- Nå mottar data fra SPI bussen er lett.
SIGNAL bitcnt: bit_vector (2 DOWNTO 0); - vi håndterer SPI i 8-bits format, så vi trenger 3 biter telleren til å telle biter som de kommer inn i
SIGNAL byte_received: bit; - høyt når en byte er mottatt
SIGNAL byte_data_received: bit_vector (7 DOWNTO 0);
- Vi bruker LSB av data til å styre en LED
SIGNAL byte_data_sent: bit_vector (7 DOWNTO 0);
SIGNAL cnt: bit_vector (7 DOWNTO 0);
SIGNAL MISO_xhdl1: bit; - send MSB første
SIGNAL LED_xhdl2: bit;

BEGIN
MISO <= MISO_xhdl1;
LED <= LED_xhdl2;

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenSCKr <= SCKr (1 DOWNTO 0) & SCK;
END IF;
Avslutt prosess;
SCK_risingedge <= TO_BIT (SCKr (2 DOWNTO 1) = "01");
SCK_fallingedge <= TO_BIT (SCKr (2 DOWNTO 1) = "10");

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenSSELr <= SSELr (1 DOWNTO 0) & SSEL;
END IF;
Avslutt prosess;
SSEL_active <= IKKE SSELr (1);
SSEL_startmessage <= TO_BIT (SSELr (2 DOWNTO 1) = "10");
SSEL_endmessage <= TO_BIT (SSELr (2 DOWNTO 1) = "01");

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenMOSIr <= MOSIr (0) & MOSI;
END IF;
Avslutt prosess;
MOSI_data <= MOSIr (1);

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenIF (NOT SSEL_active ='1 ')
Thenbitcnt <= "000";
Ellers
IF (SCK_risingedge ='1 ')
Thenbitcnt <= bitcnt "001";
byte_data_received <= byte_data_received (6 DOWNTO 0) & MOSI_data; - iverksette et skifte venstre register (siden vi mottar data MSB først)
END IF;
END IF;
END IF;
Avslutt prosess;

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
Thenbyte_received <= (SSEL_active OG SCK_risingedge) OG TO_BIT (bitcnt = "111");
END IF;
Avslutt prosess;

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
Then- Endelig overføring del.

IF (byte_received ='1 ')
ThenLED_xhdl2 <= byte_data_received (0);
END IF;
END IF;
Avslutt prosess;

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenIF (SSEL_startmessage ='1 ')
Thencnt <= cnt "00000001"; - telle meldinger
END IF;
END IF;
Avslutt prosess;

PROSESSEN (clk)
BEGIN
IF (clk'EVENT OG clk ='1 ')
ThenIF (SSEL_active ='1 ')
ThenIF (SSEL_startmessage ='1 ')
Thenbyte_data_sent <= cnt; - første byte sendt i en melding er meldingen teller
Ellers
IF (SCK_fallingedge ='1 ')
ThenIF (bitcnt = "000")
Thenbyte_data_sent <= "00000000"; - etter at vi sender 0s
Ellers
byte_data_sent <= byte_data_sent (6 DOWNTO 0) &'0 ';
END IF;
END IF;
END IF;
END IF;
END IF;
Avslutt prosess;
MISO_xhdl1 <= byte_data_sent (7);
- Vi antar at det bare er en slave på SPI bussen, så vi trenger ikke bry deg med en tri-state buffer for MISO
- Ellers ville vi trenger å tri-state MISO når SSEL er inaktiv

END ARKITEKTUR oversatt;

 
Hallo,

takker for demonstrere verktøyet.Minst med dette eksempelet resultatet synes tilsvarer en manuell oversettelse som jeg gjorde for en tekstbit.

Hilsen,

Frank

 
Takk

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Smil" border="0" />

Jeg setter pris th ".

Hilsen Sabres

 
programvaren kan jeg anbefaler er X-HDL3, som kan hjelpe deg å spare mye tid.

 

Welcome to EDABoard.com

Sponsor

Back
Top