我最近在用microblaze作一个flash的控制器,具体就是用microblaze的EMC来产生控制时序来读写板上的flash芯片,遇到了两个问题,希望达人能帮下忙:
(1)首先是EMC产生WE信号的问题,因为读写flash要求的速率比较高,所以当然是希望WE的周期越小越好,我修改了EMC的几个参数,具体如下:
# #120000  ARAMETER C_TCEDV_PS_MEM_0 = 120000 # #120000  ARAMETER C_TAVDV_PS_MEM_0 = 120000 # #35000  ARAMETER C_THZCE_PS_MEM_0 = 35000 # #15000  ARAMETER C_THZOE_PS_MEM_0 = 15000 # #120000 # 120000  ARAMETER C_TWC_PS_MEM_0 = 500 # #70000 # 70000  ARAMETER C_TWP_PS_MEM_0 = 30
最下面两个是控制WE的,但是PARAMETER C_TWC_PS_MEM_0改到10000以下后WE的周期就不再减小了,一直是287ns,这个时间我总觉得有点不太正常,我的板上晶振是75M的,一个时钟周期才十几个ns,所以想请教一下,是不是我设置的方法不正确?我是觉得有毛病。
(2)第二个是延时的问题,为了测试一些语句的具体执行时间,我用了一个while循环来用示波器观察,程序是这样的:
while(1) { // for(i=0;i<100;i++); XGpio_mSetDataReg(XPAR_TEST_HOLES_BASEADDR, 1,0xff); // for(i=0;i<1;i++); i = 0; i = 1; i = 2; i = 3; i = 4; i = 5; i = 6; i = 7; XGpio_mSetDataReg(XPAR_TEST_HOLES_BASEADDR, 1,0x00); }
测试中发现,for循环一次的时间是80ns,但是改用上面的那些i = 0;之类的赋值语句时就不能产生延时的效果,具体就是在示波器上看不出来波形的变化,就算赋值语句的执行时间短一些,那我加了很多条语句也应该能有变化阿
小弟是初学者,问题可能出在我的操作方法上,希望高手能提出点批评意见,不胜感谢! |