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

该帖子部分内容已隐藏
付费阅读
已售 1
5积分
The Display Serial Interface Specification defines protocols between a host processor and peripheral devices 2 that adhere to MIPI Alliance Specifications for mobile device interfaces. The DSI Specification builds on 3 existing specifications by adopting pixel formats and command set defined in [MIPI02], [MIPI03], and 4 [MIPI01].
该帖子内容已隐藏,请评论后查看

登录后继续评论

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

登录后继续评论

首先目录下的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

为什么FPGA开发板上的DIMM条是16G的,但是却有18片DDR4内存颗料?-ChipDebug
我来补下DIMM内存条的知识吧,如果不想了解那么细,直接看最后的答案吧。 首先DIMM条是用来连接CPU的,而这个总线的连接通道叫channel,一个channel实际上就有一个DDR RAM的控制器,比如下面这个图的I7就有两个channel即两个DDR RAM控制器, 而一个channel的位宽按x86 CPU的历史发展,目前是64。 评论图片-ChipDebug 既然一个channel上的位宽是固定的64,那么如何支持更大容量的DIMM条呢,主板上会从每个channel上分出两个DIMM条的插槽来(由DDR RAM控制器通过片选来区分,本质上是地址映射),那这个主板共计有4个DIMM条插槽。 主板的内存条DIMM插槽数量一般只有那么多,那要支持更大容量就只能到DMII条上想办法,而具体到DIMM条,为了扩容量,那么就再通过片选(实际上这里的片选是对过地址位来映射的)来扩,这个时候的位宽也只能是64,而这一个片选就是一个rank, 你内存条上的2Rx8 中的R就表示这根内存条上有根片选,有两组64位宽的内存颗粒(DDR4 DRAM IC),x8表示每颗内存颗粒的位宽是8bit. 评论图片-ChipDebug 那么最后来说说为什么你的内存条是72bit,而不是64bit 的。因为前面讲的是PC上的DIMM条,服务器上的DIMM条会多出8bt的ECC来,所以是72bit的。 更进一步,我们来看看你这颗DIMM条的datasheet中的原理图,你就明白了。 评论图片-ChipDebug
该帖子部分内容已隐藏
付费阅读
已售 10
5积分
此内容为付费阅读,请付费后查看
该帖子内容已隐藏,请评论后查看

登录后继续评论

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

登录后继续评论

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;
}
该帖子内容已隐藏,请登录后查看

登录后继续查看

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

登录后继续评论

该帖子内容已隐藏,请登录后查看

登录后继续查看

该帖子内容已隐藏,请登录后查看

登录后继续查看

该帖子内容已隐藏,请登录后查看

登录后继续查看

该帖子内容已隐藏,请登录后查看

登录后继续查看

该帖子内容已隐藏,请登录后查看

登录后继续查看