XO2/XO3系列使用IIC进行在线升级的时候使用的I2C Embedded(在diamond软件安装目录下可以找到在线升级的C代码,<install_path>\embedded_source\i2cembedded\src\i2cem),IIC总线的信号是漏极开路的,所以默认情况下是,信号线是低电平,需要加上啦电阻,使其默认是高电平。IIC总线上建议不要挂太多的器件,建议只挂我们一个CPLD,因为信号质量无法保证。为了能够使用IIC总线进行在线加载(program),I2C_PORT必须要设置为ENABLE,特别是使用2B线,用PC烧写的时候(默认是diable,3.2以前的版本是直接软件里面改为ENABLE就可以了,但是3.2以后的版本设置相对复杂点),在diamond3.2及以前版本中设置,如下截图。
diamond3.2以后的版本如何使能I2C_PORT,先看看用上述操作的结果,如下图,报错了,呵呵
那么我们要加入EFB模块,而且wb_clk_i的频率要>=3MHZ,而且还有把sda scl引到顶层。调用EFB,Primary Configuration和User Flash Memory一定都要选上,如下图
代码中例化如下
/*******************************************************************
*******************************************************************/
module control(
inout wire scl,
inout wire sda
);
wire osc_clk;
defparam OSCH_inst.NOM_FREQ = "7.00";
OSCH OSCH_inst( .STDBY(1'b0), // 0=Enabled, 1=Disabled
.OSC (osc_clk),
.SEDSTDBY()
);
efb efb_inst(.wb_clk_i( osc_clk),
.i2c1_scl( scl ), //要把IIC的脚接到顶层
.i2c1_sda( sda )
/* .wb_rst_i( ),
.wb_cyc_i( ),
.wb_stb_i( ),
.wb_we_i( ),
.wb_adr_i( ),
.wb_dat_i( ),
.wb_dat_o( ),
.wb_ack_o( ),
.i2c1_irqo( ),
.wbc_ufm_irq( )*/
);
endmodule
/*******************************************************************
*******************************************************************/
不选Primary Configuration,IIC脚根本就无法访问,也就无法使能,同时MAP的时候也会报上诉错误,如下图没有i2c1_sda i2c1_scl
不选User Flash Memory,wb_clk_i无法给入,同时MAP的时候也会报上诉错误,如下图没有i2c1_sda i2c1_scl
1.跑一遍产生.JED
2按照ProgrammingToolsUserGuide38第128页,继续往下跑,设置流程截图如下