SOC FPGA论坛首页-ChipDebug-第3页

热门评论
ICMaker的头像-ChipDebugICMaker徽章-人气大使-ChipDebug等级-LV2-ChipDebug版主3
这个比较简单,就不专门出教程了,我给你贴代码进行说明。 我们提供的DEMO4同时提供了OSC和PLL的用法示便。 评论图片-ChipDebug 1. ELF2 器件包含一个 CMOS 环形振荡器, 环形振荡器的输出可以作为全局时钟的输入, 也可以作为 PLL的参考时钟。 环形振荡器在全局时钟路径上, 插入的可配置分频器可以对 OSC 的频率进行 1-128 任意整数分频。 可以动态配置分频系数, 不使用时可以关闭 OSC 以节省功耗。环形振荡器中心频率 287MHz, 芯片个体之间频率误差较高, 误差范围达到 30%。 即 每一片EF2之间的频率可能在这个频率附近30%范围内,但可以校准。

	EF2_PHY_OSCDIV inst(
	.rstn(1), //复位,高有效
	.stdby(0), // 休眠,高有效
	.div(7'b000_0100), //分频系数
	.clko(clko)); //出来的时钟
它有一些注意事项: 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的端口例表如下: 评论图片-ChipDebug 比较简单的如下:

	PLL u_pll(
		.refclk  ( clk_osc    ),  
		.reset   ( ~cnt_rst[7] ), 
		.psclk   ( clk_osc    ), 
		.psdown  ( S_psdown   ),
		.psstep  ( S_psstep   ),
		.psclksel( S_psclksel ),
		.extlock (            ),
		.psdone  ( S_psdone   ),
		.clk0_out( O_clk0     ),
		.clk1_out( O_clk1     )

);
而Demo4中的PLL代码由于进行了动态调相,所以看起来相对复杂。

wire clk_osc;
wire clko;
OSC_DIV u_oscdiv(.rstn(1), .stdby(0), .div(7'b000_0100), .clko(clko)); //58.47M

EF2_LOGIC_BUFG BUFG_inst(
.o(clk_osc),
.i(clko)
);

reg [7:0] rst_cnt;
always @(posedge clk_osc) if (!rst_cnt[7]) rst_cnt <= rst_cnt + 1'b1;

wire sys_rst_n;
wire clk100m, clk50m, clk12m;
osc_pll u_osc_pll(
        .refclk(clko),
        .reset(~rst_cnt[7]),
        .stdby(0),
        .extlock(sys_rst_n),
        .clk0_out(clk100m),
        .clk1_out(clk50m),
        .clk2_out(clk12m));
相较于上面主要是下面这几个端口的区别: 评论图片-ChipDebug
热门评论
chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug超级版主2
后面注意代码格式化输出才方便别人看,向别人提问时自己都不愿意花时间整理一下问题,别人又怎么会愿意花时间回答你的问题?
【闲聊】这论坛活跃度不怎么高啊?不是说最热门的FPGA论坛吗?-ChipDebug

首先目录下的inst1_eval.do文件

LATTICE ECP5 FPGA DDR3 MEMORY CONTROL 控制器 如何仿真?

注意下面的路径以及diamond的版本改为你自己的

LATTICE ECP5 FPGA DDR3 MEM CTRL 控制器 如何仿真?

然后启动modelsim键入以下命令进入仿真所在目录,注意替换成你对应的目录

LATTICE ECP5 FPGA DDR3 MEMORY CONTROL 控制器的仿真步骤1

然后键入以下命令运行仿真

LATTICE ECP5 FPGA DDR3 MEMORY CONTROL 控制器的仿真步骤2

可以看到仿真波形以及输出的调试信息

LATTICE ECP5 FPGA DDR3 MEMORY CONTROL 控制器的仿真步骤3

LATTICE ECP5 FPGA DDR3 MEMORY CONTROL 控制器的仿真步骤4

热门评论
chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug作者超级版主0

1.Xilinx ISE 查看子模块资源消耗(我的是14.7,可能跟你的版本略有差异)
先选中顶层,然后在流程的MAP这里右键打开属性对话框,勾上detail, 然后在报告的13项里面查看
Xilinx ISE 查看子模块资源消耗.jpg

FhJBjTQ8HytkYWjdFhQmtB4sM_a6.jpg

2.xilinx有一个专门的文档工具,在这里
https://www.xilinx.com/support/documentation-navigation/overview.html

hitless的功能就是保证在加载过程中 某些重要的固定电平不变 否则会影响电源芯片以及DSP芯片的正常功能

不只是XO3有,LATTCIE的其它系列的CPLD和FPGA也都有这个功能。

该帖子内容已隐藏,请评论后查看

登录后继续评论

该帖子内容已隐藏,请评论后查看

登录后继续评论

Spi模式設定(PYNQ-Z2)-ChipDebugSpi模式設定(PYNQ-Z2)-ChipDebugSpi模式設定(PYNQ-Z2)-ChipDebug
热门评论
chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug超级版主2
我看了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;
}