Hallo zusammen, ich muss ein Axi I2c BUS benutzen,ich habe den Ip-core in Xps hinzugefügt (AXI IIC v1_02). ich habe leider ein Problem mit den Signalen und zwar: SCL und SDA habe ich als Externel Ports gemacht,und ich will die dann in mein Top_level verbinden. im internet habe ich etwas gefunden aber ich kann es nicht verstehen: scl <= scl_pad_o when (scl_padoen_oe = '0') else 'Z'; sda <= sda_pad_o when (sda_padoen_oe = '0') else 'Z'; scl_pad_i <= scl; sda_pad_i <= sda; könnt ihr bitte mir erklären was ich genau in den Top_level machen soll? was mache ich mit den anderen signalen vom IIC-CORE (SCL_I,SCL_0,SCL_T,SDA_I,SDA_O,SDA_T).? ich will nur ein beispiel erstellen und mit Schipscope die signal scl und sda anschauen. Ich würde mich für jede Hilfe freuen.
scl/sda oder scl_o/sda_o, scl_i/sda_i, scl_t/sda_t sind alternativ. Du hast 2 Möglichkeiten: Durchschleifen von scl/sda (Tri-State in Core)
1 | scl_pad <= scl; |
2 | sda_pad <= sda; |
oder Tri-State im Top-Level:
1 | scl_pad <= scl_o when (SCL_T = '0') else 'Z'; |
2 | sda_pad <= sda_o when (SDA_T = '0') else 'Z'; |
3 | scl_i <= scl_pad; |
4 | sda_i <= sda_pad; |
scl_pad und sda_pad sind die Signalnamen des Top-Levels nach außen (müssen vom Typ inout sein. scl/sda, scl_o/sda_o, scl_i/sda_i, scl_t/sda_t sind die Signalnamen des Microblaze Cores (external ports).
Hallo Klaus, vielen Dank für die schnelle Antwort. wenn ich richtig verstanden habe, falls ich mich für die zweite möglichkeit entscheide muss ich alle signale des AXI IIC als EXTERNEL PORTS machen, habe ich auch gemacht leider kriege ich ein Fehlermeldung: ERROR:EDK:4068 -INSTANCE: axi_iic_0, PORT: Sda_I - THREE_STATE port, Sda, in use. Multiple drivers found on TRI_I port, Sda_I ERROR:EDK:4068 - INSTANCE: axi_iic_0, PORT: Scl_I - THREE_STATE port, Scl, in use. Multiple drivers found on TRI_I port, Scl_I Hier ist ein Teil meines MHS-file BEGIN axi_iic PARAMETER INSTANCE = axi_iic_0 PARAMETER HW_VER = 1.02.a PARAMETER C_INTERCONNECT_S_AXI_MASTERS = axi_cdma_0.M_AXI PARAMETER C_BASEADDR = 0x41600000 PARAMETER C_HIGHADDR = 0x4160ffff BUS_INTERFACE S_AXI = axi_interconnect_hp PORT S_AXI_ACLK = processing_system7_0_FCLK_CLK0 PORT IIC2INTC_Irpt = axi_iic_0_IIC2INTC_Irpt PORT Sda_O = axi_iic_0_Sda_O PORT Sda_T = axi_iic_0_Sda_T PORT Scl_I = net_axi_iic_0_Scl_I_pin PORT Scl_O = axi_iic_0_Scl_O PORT Scl_T = axi_iic_0_Scl_T PORT Sda_I = net_axi_iic_0_Sda_I_pin PORT Sda = axi_iic_0_Sda PORT Scl = axi_iic_0_Scl PORT Gpo = axi_iic_0_Gpo END vielen Dank im Vorauss
Wie gesagt, nach meiner Erinnerung sind scl/sda und scl_o/sda_o, scl_i/sda_i, scl_t/sda_t alternativ, d.h. entweder das eine oder das andere. Versuch einmal scl und sda aus den external ports zu löschen, Du brauchts sie nicht. Oder lösche scl_o/sda_o, scl_i/sda_i, scl_t/sda_t und verwende Methode 1.
hallo Klaus es hat jetzt ohne Fehler geklappt danke, jetzt habe ich noch eine Frage und zwar die scl_pad und sda_pad signale sollen "inout" sein. wo soll ich die hinfügen in der Entity? oder soll ich eine eingene Component für IIC erzeugen ? meine idee ist nur die scl_pad und sda_pad mit schipscope zu verbinden und mit einem example c-code testen. bitte um hilfe da ich die IIC verbindung nicht ganz verstehe Danke im Vorauss
Leider ist mir Dein Problem noch nicht klar. Hast Du überhaupt ein Top-Level? Was sind nun scl_pad und sda_pad? Versuch bitte den Quellcode, oder zumindest Ausschnitte zu posten.
Erstmal vielen Dank für deine schnelle Rückmeldung. ja ich habe schon eine Top level : so sieht ein Teil meiner Top level aus: entity fifo_cdma_stub is port ( BTNs_5Bits_TRI_IO : inout std_logic_vector(4 downto 0); processing_system7_0_MIO : inout std_logic_vector(53 downto 0); processing_system7_0_PS_SRSTB : in std_logic; processing_system7_0_PS_CLK : in std_logic; processing_system7_0_PS_PORB : in std_logic; processing_system7_0_DDR_Clk : inout std_logic; processing_system7_0_DDR_Clk_n : inout std_logic; processing_system7_0_DDR_CKE : inout std_logic; processing_system7_0_DDR_CS_n : inout std_logic; processing_system7_0_DDR_RAS_n : inout std_logic; processing_system7_0_DDR_CAS_n : inout std_logic; processing_system7_0_DDR_WEB_pin : out std_logic; processing_system7_0_DDR_BankAddr : inout std_logic_vector(2 downto 0); processing_system7_0_DDR_Addr : inout std_logic_vector(14 downto 0); processing_system7_0_DDR_ODT : inout std_logic; processing_system7_0_DDR_DRSTB : inout std_logic; processing_system7_0_DDR_DQ : inout std_logic_vector(31 downto 0); processing_system7_0_DDR_DM : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_DQS : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_DQS_n : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_VRN : inout std_logic; processing_system7_0_DDR_VRP : inout std_logic; vga_r: out std_logic_vector(3 downto 0); vga_g: out std_logic_vector(3 downto 0); vga_b: out std_logic_vector(3 downto 0); vga_hsync: out std_logic; vga_vsync: out std_logic; --camera ports write_error:out std_logic; SM_D4:out std_logic; SM_D5:out std_logic; SM_D6:out std_logic; SM_D7:out std_logic; SM_D8:out std_logic; SM_D9:out std_logic; SM_D10:out std_logic; SM_D11:out std_logic; SM_VSYNC:out std_logic; SM_CLK:out std_logic; SM_PCLK:out std_logic; SM_HSYNC:out std_logic; SM_NRESET_CON:out std_logic; SM_STROBE_CON:out std_logic; SM_NOE_CON:out std_logic; SM_I2C_SCL:inout std_logic; SM_I2C_SDA:inout std_logic; read_error: out std_logic ); end fifo_cdma_stub; architecture STRUCTURE of fifo_cdma_stub is component fifo_cdma is port ( BTNs_5Bits_TRI_IO : inout std_logic_vector(4 downto 0); processing_system7_0_MIO : inout std_logic_vector(53 downto 0); processing_system7_0_PS_SRSTB : in std_logic; processing_system7_0_PS_CLK : in std_logic; processing_system7_0_PS_PORB : in std_logic; processing_system7_0_DDR_Clk : inout std_logic; processing_system7_0_DDR_Clk_n : inout std_logic; processing_system7_0_DDR_CKE : inout std_logic; processing_system7_0_DDR_CS_n : inout std_logic; processing_system7_0_DDR_RAS_n : inout std_logic; processing_system7_0_DDR_CAS_n : inout std_logic; processing_system7_0_DDR_WEB_pin : out std_logic; processing_system7_0_DDR_BankAddr : inout std_logic_vector(2 downto 0); processing_system7_0_DDR_Addr : inout std_logic_vector(14 downto 0); processing_system7_0_DDR_ODT : inout std_logic; processing_system7_0_DDR_DRSTB : inout std_logic; processing_system7_0_DDR_DQ : inout std_logic_vector(31 downto 0); processing_system7_0_DDR_DM : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_DQS : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_DQS_n : inout std_logic_vector(3 downto 0); processing_system7_0_DDR_VRN : inout std_logic; processing_system7_0_DDR_VRP : inout std_logic; axi_burst_0_vga_dout_pin : out std_logic_vector(23 downto 0); axi_burst_0_vga_rd_en_pin : in std_logic; axi_burst_0_vga_prog_empty_pin : out std_logic; clock_generator_0_RST_pin : in std_logic; clock_generator_0_LOCKED_pin : out std_logic; axi_burst_0_extern_rd_vga_clk_pin : in std_logic; clock_generator_0_CLKOUT0_pin : out std_logic; axi_burst_0_r_error_read_pin : out std_logic; axi_burst_0_w_error_write_pin : out std_logic; axi_burst_0_extern_empty_pin : out std_logic; -- external ports des AXI IIC axi_iic_0_Sda_I_pin : in std_logic; axi_iic_0_Sda_O_pin : out std_logic; axi_iic_0_Sda_T_pin : out std_logic; axi_iic_0_Scl_I_pin : in std_logic; axi_iic_0_Scl_O_pin : out std_logic; axi_iic_0_Scl_T_pin : out std_logic ); ein VGA core habe ich auch drin in der Top level. die idee ist die Camera an den Board anzuschliessen. wie du siehst die camera ports habe ich auch in der Entity hinzugefügt, und um sie zu steuern brauche ich EIN Axi IIC BUS was ich leider nicht weiss, wie ich es genau machen soll. ich habe den AXI IIC core in meiner schaltlung hinzugefügt und an einem AXI bus verbunden.(ich will es auch nicht jetzt an der camera anschliessen ich will nur den AXI IIC testen ob es funktioniert). ich will nur die gesamte signale in Top level richtig anschliesse und einfach mit schipscope die w_SM_I2C_SCL und w_SM_I2C_SDA ansehe. (sin die überhaupt die richtige signale die ich anschauen soll??) hier sind die signale des IIC im Top level --I2C LINES Signals signal w_axi_iic_0_Sda_I_pin: std_logic; signal w_axi_iic_0_Sda_O_pin : std_logic; signal w_axi_iic_0_Sda_T_pin : std_logic; signal w_axi_iic_0_Scl_I_pin : std_logic; signal w_axi_iic_0_Scl_O_pin: std_logic; signal w_axi_iic_0_Scl_T_pin: std_logic; begin --Schreiben zugreifen w_SM_I2C_SCL <= w_axi_iic_0_Scl_O_pin when w_axi_iic_0_Scl_T_pin ='0' else 'Z'; w_SM_I2C_SDA <= w_axi_iic_0_Sda_O_pin when w_axi_iic_0_Sda_T_pin ='0' else 'Z'; --Lesen zugreifen w_axi_iic_0_Scl_I_pin <= w_SM_I2C_SCL ; w_axi_iic_0_Sda_I_pin <= w_SM_I2C_SDA; Mein Problem ist die Signale :w_SM_I2C_SCL,w_SM_I2C_SDA die sollen als inout signale sein aber wo kann ich die deklariere?? in der Entity oder soll ich eine Eigene AXI IIC Component schreibe. Meine Hoffnung ist : axi IIC bus benutzen zu können (ohne camera)und mittels c code zu testen. Danke im Vorauss
Die Namensgenung bei Dir ist vielleicht ein bischen verwirrend. SM_I2C_SCL und SM_I2C_SDA sind die inout Ports (also bidirektionale Pins) des Top-Levels und diese gehen nach außen zu den Beinchen. So weit, so gut. w_axi_iic_0_Sda_I_pin usw. sind die Signale IM Top-Level und gehen an die Komponente fifo_cdma, wo der IIC Core drinnen ist. Heißen zwar _pin, sind aber nicht die Pins.
1 | FC : fifo_cdma |
2 | port map ( |
3 | ...
|
4 | axi_iic_0_Sda_I_pin => w_axi_iic_0_Sda_I_pin, |
5 | ...
|
6 | );
|
Im Top-Level schreibst Du dann :
1 | --Schreiben zugreifen
|
2 | SM_I2C_SCL <= w_axi_iic_0_Scl_O_pin when w_axi_iic_0_Scl_T_pin ='0' |
3 | else 'Z'; |
4 | SM_I2C_SDA <= w_axi_iic_0_Sda_O_pin when w_axi_iic_0_Sda_T_pin ='0' |
5 | else 'Z'; |
6 | |
7 | --Lesen zugreifen
|
8 | w_axi_iic_0_Scl_I_pin <= SM_I2C_SCL ; |
9 | w_axi_iic_0_Sda_I_pin <= SM_I2C_SDA; |
hallo Klaus, jetzt kriege ich ein Fehler bei der Bitstream Generierung: wegen die ZWEI Kamera Signale (ich habe die kamera gar nicht angeschloßen) SM_I2C_SCL:inout std_logic; SM_I2C_SDA:inout std_logic; ERROR:Bitgen:342 - This design contains pins which have locations (LOC) that are not user-assigned or I/O Standards (IOSTANDARD) that are not user-assigned. This may cause I/O contention or incompatibility with the board power or connectivity affecting performance, signal integrity or in extreme cases cause damage to the device or the components to which it is connected. To prevent this error, it is highly suggested to specify all pin locations and I/O standards to avoid potential contention or conflicts and allow proper bitstream creation. To demote this error to a warning and allow bitstream creation with unspecified I/O location or standards, you may apply the following bitgen switch: -g UnconstrainedPins:Allow ich bin über Bitstream Setting/ Bitstream um die option zu deaktivieren (you may apply the following bitgen switch: -g UnconstrainedPins:Allow) aber finde das (-g) nicht und ich kann es auch nicht hinzufügen. gibt es irgend einen anderen weg das problem zu lösen und vielen Dank nochmal
Wie sieht's mit Deinem Englisch aus? Die Fehlermeldung sagt doch, dass Du 2 Signale hast, und diesen ist kein Pin (Location) zugeordnet. Du musst beiden Signalen die FPGA-Pins zuordnen, wo diese Leitungen angeschlossen sind. Das hängt von Deinem Board/Schaltplan ab, das kannst nur Du wissen. Normalerweise macht man die Pinzuweisung im UCF File.
ah doch habe ich hingekriegt endlich mal bitstream erfolgreich generiert :-) jetzt gucke ich wie ich es teste auf SDK
also mein englich ist miese :-) aber die pins habe ich schon im ucf datei eingegeben: # "CAM-BIT_0" NET "SM_D4" LOC = "IO_L20P_T3" | IOSTANDARD=LVTTL; # "CAM-BIT_1" NET "SM_D5" LOC = "IO_L16P_T2" | IOSTANDARD=LVTTL; # "CAM-BIT_2" NET "SM_D6" LOC = "IO_L15P_T2_DQS" | IOSTANDARD=LVTTL; # "CAM-BIT_3" NET "SM_D7" LOC = "IO_L7P_T1" | IOSTANDARD=LVTTL; # "CAM-BIT_4" NET "SM_D8" LOC = "IO_L10P_T1" | IOSTANDARD=LVTTL; # "CAM-BIT_5" NET "SM_D9" LOC = "IO_L21P_T3_DQS" | IOSTANDARD=LVTTL; # "CAM-BIT_6" NET "SM_D10" LOC = "IO_L8P_T1" | IOSTANDARD=LVTTL; # "CAM-BIT_7" NET "SM_D11" LOC = "IO_L17P_T2" | IOSTANDARD=LVTTL; # "CAM-BIT_7" NET "SM_D11" LOC = "IO_L17P_T2" | IOSTANDARD=LVTTL; # "CAM-VSYNC" NET "SM_VSYNC" LOC = "IO_L22P_T3" | IOSTANDARD=LVTTL; # "CAM-CLK" NET "SM_CLK" LOC = "IO_L13P_T2_MRCC" | IOSTANDARD=LVTTL; # "CAM-PCLK" NET "SM_PCLK" LOC = "IO_L14P_T2_SRCC" | IOSTANDARD=LVTTL; # "CAM-HSYNC" NET "SM_HSYNC" LOC = "IO_L5P_T0" | IOSTANDARD=LVTTL; # "CAM-NRESET_CON" NET "SM_NRESET_CON" LOC = "IO_L18P_T2" | IOSTANDARD=LVTTL; # "CAM-STROBE_CON" NET "SM_STROBE_CON" LOC = "IO_L4P_T0" | IOSTANDARD=LVTTL; # "CAM-NOE_CON" NET "SM_NOE_CON" LOC = "IO_L11P_T1_SRCC" | IOSTANDARD=LVTTL; # "CAM-I2C_SCL" NET "SM_I2C_SCL" LOC = "IO_L13P_T2_MRCC" | IOSTANDARD=LVTTL; # "CAM-I2C_SDA" NET "SM_I2C_SDA" LOC = "IO_L14P_T2_AD4P_SRCC" | IOSTANDARD=LVTTL; aber jetzt geht es erstmal umd axi iic zu testen will die kamera gar nicht anschliessen. macht sinn die signale w_axi_iic_0_Scl_I_pin und w_axi_iic_0_Sda_I_pin mit schipscope anzuschauen weil SM_I2C_SCL und SM_I2C_SDA kann ich nicht als schipscope signale nehmen. kriege ich eine Fehelermeldung. schönen Gruss und vielen dank für deine Mühe.
xilinx_gast schrieb: > also mein englich ist miese :-) ;-) könnte sein, "schipscope" schreibt sich nämlich "Chipscope" xilinx_gast schrieb: > macht sinn die signale w_axi_iic_0_Scl_I_pin und w_axi_iic_0_Sda_I_pin > mit schipscope anzuschauen weil SM_I2C_SCL und SM_I2C_SDA kann ich nicht > als schipscope signale nehmen Wenn's nicht anders geht... Chipscope habe ich fast nie verwendet. Nimmt man eher um interne Signale anzuschauen, ich würde aber eher simulieren.
was meinst du mit simulieren?? ich dachte Hardware kann man nicht simulieren ? wenn ich den program (bit-datei) auf dem board lade ich kann nur die signale auf chipscope ansehe.
xilinx_gast schrieb: > was meinst du mit simulieren?? > ich dachte Hardware kann man nicht simulieren ? > wenn ich den program (bit-datei) auf dem board lade ich kann nur die > signale auf chipscope ansehe. Du kannst das bit-File nicht simulieren, das ist richtig. Aber von einem VHDL Simulator hast Du vielleicht schon gehört, oder?
xilinx_gast schrieb: > :-) ja schon habe ich auch schon mal benutzt ISIM Fein :-) Hardware kann man zwar wirklich nicht simulieren, aber ich modelliere mir meine Hardware mit VHDL und kann sie dann simulieren. Manche Halbleiterhersteller bieten auch schon fertige Modelle an (z.B. von DRAMs). Für ADC- und DAC-Modelle bietet es sich an, mit File-IO zu arbeiten. Duke
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.