完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
嗨伙计!
首先,感谢您的支持和Merry X-Mass! 我一直在编写Memory接口和测试程序以熟悉VHDL。 目前正在研究具有2048个32位字的AXI-Lite BRAM程序,通过单个端口通过15位地址进行寻址。 在我的Test Bench中,我有一个部分读取二进制数据文本文件并将数据集加载到数组数组中。 我有一个“DRIVER”设计文件,其中包含以下内容: 在图书馆区; 包Data_PKG的类型是Data_Array_PKG是std_logic_vector的数组(自然范围)(31 downto 0); - 无约束数组!!!! 最终包; - 图书馆工作; 使用work.Data_PKG.all; 在实体申报区域; 实体AXI_LITE_BRAM_Mem_Driver是Generic(Mem_Width:INTEGER:= 32; Mem_Depth:INTEGER:= 2048; Add_Bus_Width:INTEGER:= 15; Num_Words:INTEGER:= 2048); 端口(RE_WRT:在STD_LOGIC中; - 读取= 0,写入= 1 Start_Address:在STD_LOGIC_VECTOR中(Add_Bus_Width-1 downto 0); Write_Data&冒号;在Data_Array_PKG中(0到Num_Words-1); - 使用数据包的Def of Arays!Read_Data&冒号;输出Data_Array_PKG(0到Num_Words-1); - 输出std_logic_vector的数组(0到Num_Words-1)(Mem_Width-1 downto 0);开始:在STD_LOGIC中;完成:输出STD_LOGIC:= '0'; CLK_IN:在STD_LOGIC中; RESET_IN:在STD_LOGIC中);结束AXI_LITE_BRAM_Mem_Driver; 在测试台上, 在图书馆区; 图书馆工作; 使用work.BMG_TB_PKG.ALL; 使用work.Data_PKG.all; 在信号定义区; SIGNAL tb_Write_Data&冒号; Data_Array_PKG(0到2047); - 使用数组数组的包Def! SIGNAL tb_Write_Data1,tb_Write_Data2,tb_Write_Data3,tb_Write_Data4:Data_Array_PKG(0到2047); SIGNAL tb_Read_Data&冒号; Data_Array_PKG(0到2047); 在组件声明区域; component AXI_LITE_BRAM_Mem_Driver Generic(Mem_Width:INTEGER:= 32; Mem_Depth:INTEGER:= 2048; Add_Bus_Width:INTEGER:= 15; Num_Words:INTEGER:= 2048); 端口(RE_WRT:在STD_LOGIC中; - 读取= 0,写入= 1 Start_Address:在STD_LOGIC_VECTOR中(Add_Bus_Width-1 downto 0); Write_Data&冒号;在Data_Array_PKG中(0到Num_Words-1); - 使用数据包的Def of Arays!Read_Data&冒号; out Data_Array_PKG(0到Num_Words-1);开始:在STD_LOGIC中;完成:out STD_LOGIC; CLK_IN:在STD_LOGIC中; RESET_IN:在STD_LOGIC中);结束组件; 我从文本文件中读取tb_Write_Data1,tb_Write_Data2,tb_Write_Data3,tb_Write_Data4。 这些数据集在模拟中看起来很完美! 然后,在我的TB代码中; tb_Write_Data Attb_Write_Data [334]以上,我得到“UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU”。 我已经找到了问题,尝试了不同的数据集,并检查了Elabroated Design的多个驱动程序问题。 我看不出任何问题。 任何人都知道为什么会发生这种情况???? 谢谢! gmstomm |
|
相关推荐
4个回答
|
|
那么它可能是一个工具限制(bug)。
你在用什么模拟器? Vivado? ISE ISIM? 的ModelSim? 在分配给tb_Write_Data之后,您是否检查过tb_Write_Data1仍然具有索引333之上的有效数据? 如果将简单赋值更改为从0到2047分配单个元素的循环,这是否有效? - Gabor |
|
|
|
|
|
|
|
我最初的想法是Vivado对于存储数组有一些内存限制,但是如果是这种情况,那么原始数组也会有问题。
由于情况并非如此,因此总数组存储仍然存在限制,尽管它似乎不太可能在奇数个单词中失败。 另一个想法是目标数组也是由另一个进程驱动的,但是你应该得到'X'而不是'U'。 老实说,这似乎是一个错误。 对于行为模拟,您应该能够从ISE 14.7中尝试Isim,看看是否存在类似的问题。 否则,我建议尝试将最小化项目展示给问题并发布,以便有人可以看一下。 另外,看看你是否可以访问另一个模拟器,如ModelSim,除非你的代码实际上有问题,否则不太可能出现同样的问题。 - Gabor |
|
|
|
的Gabor,
我没有时间完全解决这个问题。 但是,这是一个兴趣点。 我按如下方式修改了For-Next循环; 对于ADDR_CTR,在0到2047循环tb_Write_Data(ADDR_CTR)结束循环; 写入32位二进制等效的循环计数器。 这工作正确地填补了所有2048个位置。 仅供参考,我没有停止文本文件读取。 因此,所有5个阵列oy阵列都被正确填充。 这给了我一个工作数据集,所以我继续解决我的项目中的其他问题。 新年快乐! gmstomm。 |
|
|
|
只有小组成员才能发言,加入小组>>
2416 浏览 7 评论
2821 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2292 浏览 9 评论
3372 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2458 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1108浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
581浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
445浏览 1评论
2002浏览 0评论
725浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 06:34 , Processed in 1.314067 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号