这个比较简单,就不专门出教程了,我给你贴代码进行说明。
我们提供的DEMO4同时提供了OSC和PLL的用法示便。
1. ELF2 器件包含一个 CMOS 环形振荡器, 环形振荡器的输出可以作为全局时钟的输入, 也可以作为 PLL的参考时钟。 环形振荡器在全局时钟路径上, 插入的可配置分频器可以对 OSC 的频率进行 1-128 任意整数分频。 可以动态配置分频系数, 不使用时可以关闭 OSC 以节省功耗。环形振荡器中心频率 287MHz, 芯片个体之间频率误差较高, 误差范围达到 30%。 即 每一片EF2之间的频率可能在这个频率附近30%范围内,但可以校准。
它有一些注意事项:
1. OSC、 OSCDIV 输出可以接 PLL, 但不能直接 Fabric, 可以通过 GCLK 连接到 Fabric。
2. ELF2系列器件不建议使用OSC+PLL的组合方式, 建议使用内部的EF2_PHY_OSCDIV (rstn, stdby, div,clko)。我们的示例工程就是这么个用法。
3. OSC 输出时钟最大偏差在 30%以内, 对时钟精度要求较高的场景不建议使用。
2. 关于PLL的例化其实没有什么要说的,其实在我们的很多demo中都有PLL的用法,
PLL的端口例表如下:
比较简单的如下:
而Demo4中的PLL代码由于进行了动态调相,所以看起来相对复杂。
相较于上面主要是下面这几个端口的区别:
后面注意代码格式化输出才方便别人看,向别人提问时自己都不愿意花时间整理一下问题,别人又怎么会愿意花时间回答你的问题?
用synplify打开看看。参考这个提问,https://chipdebug.com/forum-post/449.html
首先目录下的inst1_eval.do文件
注意下面的路径以及diamond的版本改为你自己的
然后启动modelsim键入以下命令进入仿真所在目录,注意替换成你对应的目录
然后键入以下命令运行仿真
可以看到仿真波形以及输出的调试信息
1.Xilinx ISE 查看子模块资源消耗(我的是14.7,可能跟你的版本略有差异)
先选中顶层,然后在流程的MAP这里右键打开属性对话框,勾上detail, 然后在报告的13项里面查看
2.xilinx有一个专门的文档工具,在这里
https://www.xilinx.com/support/documentation-navigation/overview.html
未找到相关的寄存器进行配置,实现跳转
hitless的功能就是保证在加载过程中 某些重要的固定电平不变 否则会影响电源芯片以及DSP芯片的正常功能
不只是XO3有,LATTCIE的其它系列的CPLD和FPGA也都有这个功能。
我看了pyznq的代码,你用spi_open_device这上函数打开应该就可以实现slave,
spi spi_open_device(unsigned int device) {
int status;
u16 dev_id;
unsigned int base_address;
u32 control;
if (device < XPAR_XSPI_NUM_INSTANCES) {
dev_id = (u16) device;
}
else {
int found = 0;
for (u16 i = 0; i < XPAR_XSPI_NUM_INSTANCES; ++i) {
if (XSpi_ConfigTable[i].BaseAddress == device) {
found = 1;
dev_id = i;
break;
}
}
if (!found)
return -1;
}
status = XSpi_Initialize(&xspi[dev_id], dev_id);
if (status != XST_SUCCESS) {
return -1;
}
base_address = xspi[dev_id].BaseAddr;
// Soft reset SPI
XSpi_WriteReg(base_address, XSP_SRR_OFFSET, 0xA);
// Master mode
control = XSpi_ReadReg(base_address, XSP_CR_OFFSET);
// Master Mode
control |= XSP_CR_MASTER_MODE_MASK;
// Enable SPI
control |= XSP_CR_ENABLE_MASK;
// Slave select manually
control |= XSP_INTR_SLAVE_MODE_MASK;
// Enable Transmitter
control &= ~XSP_CR_TRANS_INHIBIT_MASK;
// Write configuration word
XSpi_WriteReg(base_address, XSP_CR_OFFSET, control);
return (spi) dev_id;
}