Kirchhoff Skrevet 20. desember 2013 Del Skrevet 20. desember 2013 Hei, jeg skjønner ikke hvorfor jeg får denne feilmeldingen her: Xst:528 - Multi-source in Unit <i2c> on signal <busy>; this signal is connected to multiple drivers. Her er det forskjellige modulene, som får akkurat samme feilmelding: (du trenger bare å se på den øverste kode boksen om du tror du vet hva som kan være feil, alle de andre er bare for å vise at jeg har prøvd "alt".) module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg busy = 0; always@(posedge clk) begin if(noe==0) busy = 0; else if(noe==1) busy = 1; end module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg busy = 0; always@(posedge clk) begin if(noe==0) busy <= 0; else if(noe==1) busy <= 1; end module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg busy; always@(posedge clk) begin if(noe==0) busy = 0; else if(noe==1) busy = 1; end module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg busy; always@(posedge clk) begin if(noe==0) busy <= 0; else if(noe==1) busy <= 1; end module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg bus; assign busy = (bus) ? 1'b1:1'b0; always@(posedge clk) begin if(noe==0) bus = 0; else if(noe==1) bus = 1; end module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg bus; assign busy = (bus) ? 1'b1:1'b0; always@(posedge clk) begin if(noe==0) bus <= 0; else if(noe==1) bus <= 1; end Hva i granskauen kan være gale? På de to siste får jeg fortsatt feilmelding på "busy" og ikke noe på "bus". Lenke til kommentar
Dr_VingTor Skrevet 20. desember 2013 Del Skrevet 20. desember 2013 (endret) Du gir busy en verdi utenfor always blokken og det gir multiple drivers. Du kan bare gi en verdi i en always blokk eller på en enkelt linje utenfor. Du må også bruke <= når det er always @posegde clk, og bør bruke = når det always@* Korrekt er alternativ 4 (om jeg telte rett), men jeg ville nok skrevet litt annerledes. module i2c (clk, busy, noe); input clk; input [1:0] noe; output busy; reg busy; always@(posedge clk) begin if(noe==2'b00) busy <= 1'b0; if(noe==2'b01) busy <= 1'b1; end Endret 20. desember 2013 av Dr_VingTor 1 Lenke til kommentar
BigJackW Skrevet 20. desember 2013 Del Skrevet 20. desember 2013 (endret) Nvm Endret 20. desember 2013 av BigJackW Lenke til kommentar
Dr_VingTor Skrevet 20. desember 2013 Del Skrevet 20. desember 2013 Btw: busy er sikkert koblet til noe på topp nivå også? Du kan få multiple drivers derfra også. Busy er en output, og om den er koblet til noe annet som også er output er det også en multiple driver. 1 Lenke til kommentar
Kirchhoff Skrevet 20. desember 2013 Forfatter Del Skrevet 20. desember 2013 (endret) Hmm, takk for forslag, skal undersøke litt til. EDIT: Er det slik at jeg bør sende en reset for å sette verdier? Slik at min FSM kommer seg i IDLE state? (dette er bare en liten del av en I2C master kontroller jeg har laget, alle disse feilmeldingene kom når jeg skulle prøve å implementere det på min fpga som krever at ejg bruker Xilinx Project navigator) EDIT2: Om jeg heller har lyst til å bruke en case i steden for if - else if da? Gjør det noen forskjell på om jeg skal bruke blocked / unblocked ( = / <= )? Endret 20. desember 2013 av Kirchhoff Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå