我正在做一个使用DE1-SoC (FPGA + ARM皮层A9)的项目.您可以看到设计的一部分(Qsys,platform designer) 这里
一个片上存储器(RAM,image_memory)正在被两个不同的主设备所掌握。其中一个是众所周知的h2f_lw_axi_master (由Quartus Prime软件提供,使ARM和FPGA数据交换成为可能),另一个zpc_1是我设计的定制主模块。
该方案的基本思想是在配置FPGA后,能够将数据写入片上存储器,zpc_1读取存储器的内容并在其上工作。
每个字的长度为512个位(64个字节),有1200个字(因此从0x0002_0000开始分配地址,以0x0003_2bff结尾,足够容纳76800 = (512 * 1200) /8字节。hps使用uint512_t (来自c++的boost库)类型的数据进行写入,zpc_1的读取数据宽度为512位。地址是根据h2f_lw_axi_master.分配的。
我有两个与这个制度有关的问题。
1.在zpc_1 HDL代码中读取数据的地址应该从0x20000偏移量开始,在每个周期增加0x40 (64),逐字读取数据吗?(或任何其他方法)
2. zpc_1能够读取第一个单词并按照第一个单词中的指令连续工作,原因可能是什么?
如果你需要更多的信息来回答这个问题,并且/或问题不够清楚,请不要犹豫地询问更多的信息(评论)。
发布于 2018-09-18 06:14:47
问题是当其中一位主从与奴隶交互时,奴隶没有适当地允许另一位(在协议中有一个名为“等待请求”的信号,我没有正确地使用该信号,当我正确地使用该信号时,该奴隶总是发送等待请求,这也帮助我调试了这个问题)。
尝试双口RAM,如这里所示,并通过正确使用“等待请求”信号来修改组件,一切都开始正常工作。
现在答案是:
Q1:在zpc_1 HDL代码中读取数据的地址是否应该从0x20000偏移量开始,然后在每个周期增加0x40 (64),逐字读取数据?(或任何其他方法)
A1:您可以根据需要定义与自定义主组件相关的另一个地址偏移量,并开始读取该地址偏移量(我在图片中使用了0x00000000 )。地址应该在每个循环中增加0x40 (64),逐字读取数据,@Unn注释。
Q2: zpc_1能够读取第一个单词,并按照第一个单词中的指令连续工作,原因可能是什么?
A2:原因是单端口RAM不能通过单端口同时正确响应两个主程序,用双口RAM代替它解决了这一问题。
https://stackoverflow.com/questions/52314377
复制相似问题