Forum: FPGA, VHDL & Co. Lattice EFB Config IPEXPRESS


von Holger (Gast)


Lesenswert?

Hallo kennt sich einer mit dem EFB Config für den MachXo2 Chip aus ?
Ich kopple den internen Clock Generator an den I2C-Bus.Unit#1.
IP-Express erzeugt nur einen I2C-Bus als Slave, aber ich will einen
Master.
Mein Ref-Design poste ich noch nach.
Damit aus dem MachXo2 Hardened Core auch ein I2C-Bus Signal rauskommt, 
muss man die Struktur der BlackBox kennen.
Augenmerk gilt auch für den internen Oscillator, der muss laufen,sonst
geht der WishBone-Bus nicht, und das I2C-Bus Interface is tristate.
1
module efb (wb_clk_i, wb_rst_i, wb_cyc_i, wb_stb_i, wb_we_i, wb_adr_i, 
2
    wb_dat_i, wb_dat_o, wb_ack_o, spi_clk, spi_miso, spi_mosi, spi_scsn, 
3
    spi_csn, ufm_sn, wbc_ufm_irq)/* synthesis NGD_DRC_MASK=1 */;
4
    input wire wb_clk_i;
5
    input wire wb_rst_i;
6
    input wire wb_cyc_i;
7
    input wire wb_stb_i;
8
    input wire wb_we_i;
9
    input wire [7:0] wb_adr_i;
10
    input wire [7:0] wb_dat_i;
11
    input wire spi_scsn;
12
    input wire ufm_sn;
13
    output wire [7:0] wb_dat_o;
14
    output wire wb_ack_o;
15
    output wire [0:0] spi_csn;
16
    output wire wbc_ufm_irq;
17
    inout wire spi_clk;
18
    inout wire spi_miso;
19
    inout wire spi_mosi;
20
21
    wire spi_mosi_oe;
22
    wire spi_mosi_o;
23
    wire spi_miso_oe;
24
    wire spi_miso_o;
25
    wire spi_clk_oe;
26
    wire spi_clk_o;
27
    wire spi_mosi_i;
28
    wire spi_miso_i;
29
    wire spi_clk_i;
30
    wire scuba_vlo;
31
32
    BB BBspi_mosi (.I(spi_mosi_o), .T(spi_mosi_oe), .O(spi_mosi_i), .B(spi_mosi));
33
34
    BB BBspi_miso (.I(spi_miso_o), .T(spi_miso_oe), .O(spi_miso_i), .B(spi_miso));
35
36
    BB BBspi_clk (.I(spi_clk_o), .T(spi_clk_oe), .O(spi_clk_i), .B(spi_clk));
37
38
    VLO scuba_vlo_inst (.Z(scuba_vlo));
39
40
    defparam EFBInst_0.UFM_INIT_FILE_FORMAT = "HEX" ;
41
    defparam EFBInst_0.UFM_INIT_FILE_NAME = "NONE" ;
42
    defparam EFBInst_0.UFM_INIT_ALL_ZEROS = "ENABLED" ;
43
    defparam EFBInst_0.UFM_INIT_START_PAGE = 2026 ;
44
    defparam EFBInst_0.UFM_INIT_PAGES = 20 ;
45
    defparam EFBInst_0.DEV_DENSITY = "7000L" ;
46
    defparam EFBInst_0.EFB_UFM = "ENABLED" ;
47
    defparam EFBInst_0.TC_ICAPTURE = "DISABLED" ;
48
    defparam EFBInst_0.TC_OVERFLOW = "DISABLED" ;
49
    defparam EFBInst_0.TC_ICR_INT = "OFF" ;
50
    defparam EFBInst_0.TC_OCR_INT = "OFF" ;
51
    defparam EFBInst_0.TC_OV_INT = "OFF" ;
52
    defparam EFBInst_0.TC_TOP_SEL = "OFF" ;
53
    defparam EFBInst_0.TC_RESETN = "ENABLED" ;
54
    defparam EFBInst_0.TC_OC_MODE = "TOGGLE" ;
55
    defparam EFBInst_0.TC_OCR_SET = 32767 ;
56
    defparam EFBInst_0.TC_TOP_SET = 65535 ;
57
    defparam EFBInst_0.GSR = "ENABLED" ;
58
    defparam EFBInst_0.TC_CCLK_SEL = 1 ;
59
    defparam EFBInst_0.TC_MODE = "CTCM" ;
60
    defparam EFBInst_0.TC_SCLK_SEL = "PCLOCK" ;
61
    defparam EFBInst_0.EFB_TC_PORTMODE = "WB" ;
62
    defparam EFBInst_0.EFB_TC = "DISABLED" ;
63
    defparam EFBInst_0.SPI_WAKEUP = "DISABLED" ;
64
    defparam EFBInst_0.SPI_INTR_RXOVR = "DISABLED" ;
65
    defparam EFBInst_0.SPI_INTR_TXOVR = "DISABLED" ;
66
    defparam EFBInst_0.SPI_INTR_RXRDY = "DISABLED" ;
67
    defparam EFBInst_0.SPI_INTR_TXRDY = "DISABLED" ;
68
    defparam EFBInst_0.SPI_SLAVE_HANDSHAKE = "DISABLED" ;
69
    defparam EFBInst_0.SPI_PHASE_ADJ = "DISABLED" ;
70
    defparam EFBInst_0.SPI_CLK_INV = "DISABLED" ;
71
    defparam EFBInst_0.SPI_LSB_FIRST = "DISABLED" ;
72
    defparam EFBInst_0.SPI_CLK_DIVIDER = 3 ;
73
    defparam EFBInst_0.SPI_MODE = "BOTH" ;
74
    defparam EFBInst_0.EFB_SPI = "ENABLED" ;
75
    defparam EFBInst_0.I2C2_WAKEUP = "DISABLED" ;
76
    defparam EFBInst_0.I2C2_GEN_CALL = "DISABLED" ;
77
    defparam EFBInst_0.I2C2_CLK_DIVIDER = 1 ;
78
    defparam EFBInst_0.I2C2_BUS_PERF = "100kHz" ;
79
    defparam EFBInst_0.I2C2_SLAVE_ADDR = "0b1000010" ;
80
    defparam EFBInst_0.I2C2_ADDRESSING = "7BIT" ;
81
    defparam EFBInst_0.EFB_I2C2 = "DISABLED" ;
82
    defparam EFBInst_0.I2C1_WAKEUP = "DISABLED" ;
83
    defparam EFBInst_0.I2C1_GEN_CALL = "DISABLED" ;
84
    defparam EFBInst_0.I2C1_CLK_DIVIDER = 1 ;
85
    defparam EFBInst_0.I2C1_BUS_PERF = "100kHz" ;
86
    defparam EFBInst_0.I2C1_SLAVE_ADDR = "0b1000001" ;
87
    defparam EFBInst_0.I2C1_ADDRESSING = "7BIT" ;
88
    defparam EFBInst_0.EFB_I2C1 = "DISABLED" ;
89
    defparam EFBInst_0.EFB_WB_CLK_FREQ = "40.0" ;
90
    EFB EFBInst_0 (.WBCLKI(wb_clk_i), .WBRSTI(wb_rst_i), .WBCYCI(wb_cyc_i), 
91
        .WBSTBI(wb_stb_i), .WBWEI(wb_we_i), .WBADRI7(wb_adr_i[7]), .WBADRI6(wb_adr_i[6]), 
92
        .WBADRI5(wb_adr_i[5]), .WBADRI4(wb_adr_i[4]), .WBADRI3(wb_adr_i[3]), 
93
        .WBADRI2(wb_adr_i[2]), .WBADRI1(wb_adr_i[1]), .WBADRI0(wb_adr_i[0]), 
94
        .WBDATI7(wb_dat_i[7]), .WBDATI6(wb_dat_i[6]), .WBDATI5(wb_dat_i[5]), 
95
        .WBDATI4(wb_dat_i[4]), .WBDATI3(wb_dat_i[3]), .WBDATI2(wb_dat_i[2]), 
96
        .WBDATI1(wb_dat_i[1]), .WBDATI0(wb_dat_i[0]), .PLL0DATI7(scuba_vlo), 
97
        .PLL0DATI6(scuba_vlo), .PLL0DATI5(scuba_vlo), .PLL0DATI4(scuba_vlo), 
98
        .PLL0DATI3(scuba_vlo), .PLL0DATI2(scuba_vlo), .PLL0DATI1(scuba_vlo), 
99
        .PLL0DATI0(scuba_vlo), .PLL0ACKI(scuba_vlo), .PLL1DATI7(scuba_vlo), 
100
        .PLL1DATI6(scuba_vlo), .PLL1DATI5(scuba_vlo), .PLL1DATI4(scuba_vlo), 
101
        .PLL1DATI3(scuba_vlo), .PLL1DATI2(scuba_vlo), .PLL1DATI1(scuba_vlo), 
102
        .PLL1DATI0(scuba_vlo), .PLL1ACKI(scuba_vlo), .I2C1SCLI(scuba_vlo), 
103
        .I2C1SDAI(scuba_vlo), .I2C2SCLI(scuba_vlo), .I2C2SDAI(scuba_vlo), 
104
        .SPISCKI(spi_clk_i), .SPIMISOI(spi_miso_i), .SPIMOSII(spi_mosi_i), 
105
        .SPISCSN(spi_scsn), .TCCLKI(scuba_vlo), .TCRSTN(scuba_vlo), .TCIC(scuba_vlo), 
106
        .UFMSN(ufm_sn), .WBDATO7(wb_dat_o[7]), .WBDATO6(wb_dat_o[6]), .WBDATO5(wb_dat_o[5]), 
107
        .WBDATO4(wb_dat_o[4]), .WBDATO3(wb_dat_o[3]), .WBDATO2(wb_dat_o[2]), 
108
        .WBDATO1(wb_dat_o[1]), .WBDATO0(wb_dat_o[0]), .WBACKO(wb_ack_o), 
109
        .PLLCLKO(), .PLLRSTO(), .PLL0STBO(), .PLL1STBO(), .PLLWEO(), .PLLADRO4(), 
110
        .PLLADRO3(), .PLLADRO2(), .PLLADRO1(), .PLLADRO0(), .PLLDATO7(), 
111
        .PLLDATO6(), .PLLDATO5(), .PLLDATO4(), .PLLDATO3(), .PLLDATO2(), 
112
        .PLLDATO1(), .PLLDATO0(), .I2C1SCLO(), .I2C1SCLOEN(), .I2C1SDAO(), 
113
        .I2C1SDAOEN(), .I2C2SCLO(), .I2C2SCLOEN(), .I2C2SDAO(), .I2C2SDAOEN(), 
114
        .I2C1IRQO(), .I2C2IRQO(), .SPISCKO(spi_clk_o), .SPISCKEN(spi_clk_oe), 
115
        .SPIMISOO(spi_miso_o), .SPIMISOEN(spi_miso_oe), .SPIMOSIO(spi_mosi_o), 
116
        .SPIMOSIEN(spi_mosi_oe), .SPIMCSN7(), .SPIMCSN6(), .SPIMCSN5(), 
117
        .SPIMCSN4(), .SPIMCSN3(), .SPIMCSN2(), .SPIMCSN1(), .SPIMCSN0(spi_csn[0]), 
118
        .SPICSNEN(), .SPIIRQO(), .TCINT(), .TCOC(), .WBCUFMIRQ(wbc_ufm_irq), 
119
        .CFGWAKE(), .CFGSTDBY());
120
121
122
123
    // exemplar begin
124
    // exemplar end
125
126
endmodule

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

Den Timer und SPI habe ich entfernt. Nur der I2C-Bus am primary Port
will ich da aktiv mit clock enable haben.
Gruss Holger.
1
/* Verilog netlist generated by SCUBA Diamond_1.4_Production (87) */
2
/* Module Version: 1.0 */
3
/* C:\lscc\diamond\1.4\ispfpga\bin\nt\scuba.exe -w -n efb_spi_i2c -lang verilog -synth synplify -bus_exp 7 -bb -type efb -arch xo2c00 -freq 50 -i2c1 -i2c1_freq 100 -i2c1_sa 0001001 -i2c1_we -i2c1_addr 7 -i2c2 -i2c2_freq 100 -i2c2_sa 0001010 -i2c2_we -i2c2_addr 7 -spi -spi_mode Slave -spi_we -ufm -ufm_ebr 510 -mem_size 1 -ufm_0 -dev 1200 -e  */
4
/* Wed Mar 14 17:04:39 2012 */
5
// defparam EFBInst_0.SPI_MODE = "SLAVE" ;
6
7
`timescale 1 ns / 1 ps
8
module efb_i2c_port1_mod (wb_clk_i, wb_rst_i, wb_cyc_i, wb_stb_i, wb_we_i, 
9
    wb_adr_i, wb_dat_i, wb_dat_o, wb_ack_o, i2c1_scl, i2c1_sda, 
10
    i2c1_irqo, 
11
, wbc_ufm_irq, cfg_wake, cfg_stdby);
12
    input wire wb_clk_i;
13
    input wire wb_rst_i;
14
    input wire wb_cyc_i;
15
    input wire wb_stb_i;
16
    input wire wb_we_i;
17
    input wire [7:0] wb_adr_i;
18
    input wire [7:0] wb_dat_i;
19
    output wire [7:0] wb_dat_o;
20
    output wire wb_ack_o;
21
    output wire i2c1_irqo;
22
    output wire wbc_ufm_irq; 
23
    output wire cfg_wake;
24
    output wire cfg_stdby;
25
    inout wire i2c1_scl; /* Cobbler CLK */
26
    inout wire i2c1_sda;
27
    wire scuba_vlo; /*Scuba */
28
/*--I2C_PORT#1 Stuff----------------------------------*/
29
   wire i2c1_scloen; /*CLK_EN*/
30
    wire i2c1_sdaoen; /*OE TRISTAT-EN*/
31
    wire i2c1_sdao;
32
    wire i2c1_sdai;
33
    
34
    wire i2c1_sclo;  //(Host to TI Sensor Device )
35
    wire i2c1_scli;  // ( TI Sensor Device to Host )
36
37
    VLO scuba_vlo_inst (.Z(scuba_vlo)); /* VLO */
38
/*BLACK BOX       INP                  Tristat_en     OUTPUT     .BOX_OBJ Clock CLK-Trigger*/
39
    BB BB1_scl (.I(i2c1_sclo), .T(i2c1_scloen), .O(i2c1_scli), .B(i2c1_scl));
40
41
    defparam EFBInst_0.UFM_INIT_FILE_FORMAT = "HEX" ;
42
    defparam EFBInst_0.UFM_INIT_FILE_NAME = "NONE" ;
43
    defparam EFBInst_0.UFM_INIT_ALL_ZEROS = "ENABLED" ;
44
    defparam EFBInst_0.UFM_INIT_START_PAGE = 510 ;
45
    defparam EFBInst_0.UFM_INIT_PAGES = 1 ;
46
    defparam EFBInst_0.DEV_DENSITY = "1200L" ;
47
    defparam EFBInst_0.EFB_UFM = "ENABLED" ;
48
    defparam EFBInst_0.GSR = "ENABLED" ;" ;
49
    defparam EFBInst_0.I2C1_SLAVE_ADDR = "0b0001001" ;
50
    defparam EFBInst_0.I2C1_ADDRESSING = "7BIT" ;
51
    defparam EFBInst_0.EFB_I2C1 = "ENABLED" ;  // Clock 
52
    defparam EFBInst_0.EFB_WB_CLK_FREQ = "50.0" ;
53
    EFB EFBInst_0 (.WBCLKI(wb_clk_i), .WBRSTI(wb_rst_i), .WBCYCI(wb_cyc_i), 
54
        .PLL0DATI0(scuba_vlo), .PLL0ACKI(scuba_vlo), .PLL1DATI7(scuba_vlo), 
55
        .PLL1DATI6(scuba_vlo), .PLL1DATI5(scuba_vlo), .PLL1DATI4(scuba_vlo), 
56
        .PLL1DATI3(scuba_vlo), .PLL1DATI2(scuba_vlo), .PLL1DATI1(scuba_vlo), 
57
.// PLL1ACKI AKNOWLLEGE Inp 
58
        .PLL1DATI0(scuba_vlo), .PLL1ACKI(scuba_vlo), .I2C1SCLI(i2c1_scli), 
59
// Input Management 
60
        .I2C1SDAI(i2c1_sdai), .I2C2SCLI(i2c2_scli), .I2C2SDAI(i2c2_sdai), 
61
   // PLL Management 
62
     .PLLDATO1(), .PLLDATO0(), .I2C1SCLO(i2c1_sclo), .I2C1SCLOEN(i2c1_scloen), 
63
  
64
    // OUTPUT Tristat_EN Manager via SPICKO 
65
66
        .I2C1SDAO(i2c1_sdao), .I2C1SDAOEN(i2c1_sdaoen), .I2C2SCLO(i2c2_sclo), 
67
    // IRQ Manager via SPICKO 
68
        .I2C1IRQO(i2c1_irqo), .I2C2IRQO(i2c2_irqo), .SPISCKO(spi_clk_o), 
69
        .CFGWAKE(cfg_wake), .CFGSTDBY(cfg_stdby));
70
    // exemplar begin
71
    // exemplar end
72
endmodule

von Holger H. (holger-h-hennef) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo !
So wird die EFB des MachXo2 via Refdesign transparent.
Instanzierung des EFB Moduls.

Der EFB Block ist ein hardened core, als eingebauter 
Kommunikations-Prozessor im PLD.
Via Wish-Bone Interface.
Damit hat man keinen grossen Verlust an LUTS, da das 2*I2C-Bus, SPI,
Timer,Counter,PLL ect.pp. Im FPGA eingebaut ist.
Siehe Bild:
------------------------------------------------------------------------ 
-
Bus-Anschluss via Wish-Bone Interface, und mico8 mit Wish-Bone Bus.
Data I/O
Address:
Enable.
Clk. Ckl_En.
ACK
R/W.
1
#########################################################################
2
 Lib Modul: BB intanzierung via ipEXPRESS.
3
4
BB BB1_scl (.I(i2c1_sclo), .T(i2c1_scloen), .O(i2c1_scli), .B(i2c1_scl));
5
/*BLACK BOX:     ( INP,      inp_ Tristat_en,   OUTPUT,)    .BOX_OBJ Clock CLK-Input_asTrigger*/
6
// ((Bidir-Port)(Trisat_en); ) ,(Clock-Edge:Trigger_forcen_event)
7
//  Tristate_EN_Bidir_IO_BUFFER --(><)-, Clock Triggerd
8
------------------------------------------------------------------------
9
Rohes Lib Modul: BB und VLO
10
11
module BB (I, T, O, B);  //synthesis syn_black_box black_box_pad_pin="B"
12
input  I ;
13
input  T ;
14
output O ;
15
inout  B ;
16
endmodule 
17
########
18
19
module VLO ( Z );  //synthesis syn_black_box
20
    output Z ;
21
endmodule

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
Noch kein Account? Hier anmelden.