|
发表于 2012-3-23 15:44:36
|
显示全部楼层
回复 24# 曾经擦肩
1.app_wdf_end的作用:“This signal indicates the last cycle of data on app_wdf_data for the current write”。字面意思好像是说:“这个信号表明app_wdf_data的最后一个周期的数据,为当前的写数据”,不能正确理解这句话,不可能只把一个数据写进去吧?
------------------------------------------------------------
这个信号是对齐到最后一个有效数据的那个周期的。不是说只写一个周期的数据。一般写数据至少是两个clock cycle吧(没有反压的情况下),app_wdf_wren指示有效数据,跟有效数据对齐。app_wdf_end 这个信号在后面第2个cycle有效,没有反压就只持续一个cycle。xilinx的UG 上应该有它的时序,你查下。
2.由问题1 引发了,到底64个地址空间内(app_addr),写入了几个256位数据app_wdf_data?
如果是BC4,burst chop 4,UI DATA WIDTH = 256,那只写一个256。如果是BL8,burst length=8,那写两个。
3.今天看datasheet讲write commands这块,
出现“A non back-to-back write command...”,针对这种non back-to-back,几个信号变量出现了三种情况:i. app_wren,app_wdf_end,对应app_en,app_rdy同时拉高。 ii.app_wren,app_wdf_end,提前app_en,app_rdy拉高(提前几个时钟还是一个小问题)。 iii.app_wren,app_wdf_end,落后app_en,app_rdy最多两个时钟拉高。
"back-to-back write command..."针对这种情况,我看到app_wren,app_wdf_end,app_en,app_rdy等信号都是比较整齐对应的。
所以现在就不理解,这“non back-to-back ”与“back-to-back ”的区别,也不知道,自己应对应哪种情况。
-------------------------------------------
app_en, app_cmd, app_rdy, app_addr 这4个,你可以理解为地址总线,app_wdf_wren, app_wdf_data, app_wdf_end, app_wdf_rdy你可以理解为写数据总线。两条总线是相对独立的,两个反压信号app_rdy和app_wdf_rdy也是独立的。你就想像ip里面有两个fifo,一个放地址,一个放数据,fifo 快满了,ip 就会反压你,让你不要写了。当然实际肯定不一样,还有自刷新周期什么的。
先说back-to-back,这种写法就是地址写地址的,数据写数据的。但是每一个地址对应了两个数据,对应关系不能乱,先写进去的addr a,对应数据a0, a1。总数也不能乱,写了N个地址,就要写2N个数据进去。然后,处理两个反压信号也是独立处理的。这个应该很好理解。就是说你在数据量比较大的时候,你可以这么写,但是对应关系要明确。figure 1-63,1-64画的比较理想,没有反压。有反压的时候,地址和数据的反压是独立处理的。
scattered,这个是分散的。一个burst写完,再写下一个burst。figure 1-65的意思是,在你写入了一个地址的时候,对应于这个地址的数据,你可以采用的3中写法。一种是,数据提前地址一个clock cycle写;第二种是,数据对齐地址同一个cycle写;第三种是,数据滞后地址一个cycle写。也就是图上的意思,要保证数据与地址的对应关系,对于时刻clock cycle n 的一个地址,和其对应的数据写入的时刻允许范围是(clock cycle n-1, clock cycle n, clock cycle n+1),你可以在这3个时钟周期中的任意一个把数据0写进去。图上只画了bc4的情况,BL8的情况就是数据1紧跟在数据0后面一个cycle。当然,反压有效的时候,数据或者地址必须hold住直至反压无效,写入被ip接受。有反压的时候,写入地址的时刻n,以反压变为无效后的第一个cycle为准。一个burst写完才可以写下一个burst。 |
|