Jul 16
Kingbeful同学讨论了infer memory的问题。

Infer ROM/RAM,一般使用Language Template --> Verilog --> Synthesis Constructs --> Coding Examples --> RAM/ROM。

要对ROM/RAM做初始化,可以用readmemb/readmemh这两个system task。功能都是读取外部的文件来初始化内存。

XST, ISIM, ModelSim都支持readmemh/readmemb。

readmemb的基本格式是:
initial begin
   $readmemh("mem.data", my_memory, start_address, end_address);
end

其中,start_address和end_address都是可选项。

不写start_address的时候,默认从高位地址写起。
如果要从低位写起,start address = 0。

例子工程:


参考资料:
asic-world - 不过XST不支持数据文件中有任何其他字符,包括注释和下划线。
XST User Guide
Tags: , , ,
Jul 10
在Verilog中,可以使用`ifdef很方便地控制程序的结构,比如:

引用
`ifdef FPGA_IMP
module_A_instantiate (
..
..
);
`else
module_B_instantiate (
..
..
);
`endif


但是如果使用了这种结构,XST是不能自动认出工程的层次结构的,因此综合的时候有可能会报告某个文件找不到的错误。

解决方法是,手动编辑XST生成的xx.prj文件,把漏编译的文件名添加到xx.prj的头上就可以了。
Tags: , ,
Jul 1
稍稍玩了一下PicoBlaze,总结一下一些花了点时间的问题

1、感觉按了reset不能复位程序
因为只是写了个简单的点LED的程序,不能运行得太快,于是手动分频了。而在分频的时候,还给了reset信号。于是,每次reset时钟都停止,PicoBlaze又用了同步reset,于是每次按下reset按钮都没办法将程序reset。

这个问题也可能出现在所有同步Reset的程序中。
另外一点也要注意最好所有的clock都free running。

2。试用JTAGLoader
JTAGLoader的原理是使用BSCAN在程序运行中对BlockRAM进行改写。
按照JTAGLoader的使用说明,好久都没调出来。

问题首先是上面提到的reset
然后是Picoblaze内部也要从blockram连出来一个reset,使Load完成后对Processor自动reset
最后是XSVFPlayer这个程序。

JTAGLoader使用batch模式下的xsvfplayer下载,花费的时间在50s到150s。结果在漫长的等待之后还是没看到期望的结果。最后终于想到,可能因为我用的是USB Cable。尝试拔了Cable那个程序还是一样运行。果然是Batch模式的xsvfplayer没有一个检测cable的机制。

在Xilinx网站上找了运行XSVF的方法,最后终于成功,用USBCable只需要1秒钟就下载完毕。
看出差距了吧:)
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]