关于DDR MIG高级篇图像缓存fifo的疑问
在CH02_640_480_DDR_HDMI----MIG_BURST_IMAGE()模块中,使用了几个fifo,以写fifo为例,即sensor_data_gen模块生成的RGB数据写入到CH0_FIFO中去,为什么要使用CH0_FIFO的读取计数功能呢?为了保证缓存,不是应该使能写计数吗?书上写的是CH0_REQ<=(CH0_rusedw_o>=PIXEL_H);,我认为有问题,应该是使能CH0_FIFO的写计数器,当写入的数据大于PIXEL_H即缓存一行数据后才有效 今天看了下代码,代码中有这个参数,parameter PIXEL_H =8'd38;//不同的位宽这个值不一样所以这个值是busrt 到DDR中的数据位宽,如果以这个计算,CH0就得以读计数器计算,CH6就得以写计数器计算,当然可以简单一些直接用640 去计算,那么CH0就的以写计数器计算,CH6就得以读计数器计算 msxbo 发表于 2019-11-9 10:08
今天看了下代码,代码中有这个参数,parameter PIXEL_H =8'd38;//不同的位宽这个值不一样
所以这个值是bus ...
那么以最开始最开始为例,MIG从CH0_FIFO中读取的数据满足 CH0_REQ <= (CH0_rusdw_o >=PIXEL_H);时候,可是,这时候还FIFO0没有写入任何数据-------我说的没有写入数据指的是CH0的写数据指令判断方式是: CH0_REQ&&1'd1,//ch0_输入信道,为什么没有因为FIFO0中没有数据导致CH0_rusdw_o 一直为0,使得CH0_REQ&&1'd1==0,使得数据写入失败呢? msxbo 发表于 2019-11-9 10:08
今天看了下代码,代码中有这个参数,parameter PIXEL_H =8'd38;//不同的位宽这个值不一样
所以这个值是bus ...
我现在理解到,即使fifo空也会有数据写入到DDR,可是,这样的效果应该不如计数写入的效果好,因为按照教程计数读出数据的个数,读出的数据是无效数据,FIFO并没有起到真实数据缓存的作用。就是应该计数写入的数据个数,当写入的数据个数到达一定的阈值时才允许写入。不知道这样理解是否存在问题? 读计数器,不是计数读出的数据个数,而是读FIFO 大概还有多少数据可以读 msxbo 发表于 2019-11-10 13:03
读计数器,不是计数读出的数据个数,而是读FIFO 大概还有多少数据可以读
谢谢!一下就理解了! msxbo 发表于 2019-11-10 13:03
读计数器,不是计数读出的数据个数,而是读FIFO 大概还有多少数据可以读
emmmmmmm实在不好意思,还有有几个问题想要问一下,第一个关于复位时间的问题://------------------------读取FIFO的控制信号-------------------------//
M_S_RST_FIFO0:
begin
M_S <=(rst_FIFO_cnt>=8'd60)?M_S_IDLE:M_S;
CH6_FIFO_RST <=(rst_FIFO_cnt<=8'd20)&&MSG_FIFO_RDDATA;
CH0_FIFO_RST <=(rst_FIFO_cnt<=8'd20)&&MSG_FIFO_RDDATA;
rst_FIFO_cnt <=rst_FIFO_cnt+8'd1;
end
在这个语句中,以5640输入数据寄存FIFO CH0复位为例,CH0的复位信号维持22个100Mhz系统时钟,复位之后CH0_FIFO中数据全部无效,然后再经过40个100Mhz时钟,进入M_S_IDLE,在40个100Mhz时钟中数据从5640模块输入到CH0_FIFO,在40个100Mhz的过程中,CH0_FIFO最多接受40/4=10个32bit数据,也就是320bit,而 CH0_REQ <= (CH0_rusdw_o >=PIXEL_H);,这是不是一直使得无法满足CH0_REQ=1?
第二个问题是为什么设置 parameter PIXEL_H =8'd78;//半行像素,这个初衷是不是为了设置成一行像素呢?一行像素就就是80*256/8/4=640个像素点,78是不是考虑到CH_REQ设置成1需要一个100MHZ的时钟,在M_S_IDLE又耗时一个100Mhz时钟,载开始进入写地址状态,可是这两个相差的100Mhz时钟时间只是写入时钟时间的一半,并不能保证可供读取的数据满足一次突发的数据量? 1、当CH6或者CH0的一幅图像已经传输完成后,通过FIFO的复位同步,清空FIFO,实际上如果每次传输正确,FIFO在一幅图像传输完成后,本来就已经空的了,但是为什么还要复位呢?比如你插入的是HDMI输入视频,你重新插拔下HDMI输入接口,可能这一幅图像就出现数据错乱了,那么通过复位,就可以清除FIFO中多余的数据,重新完成图像的同步。对于复位的时间,这个对于异步FIFO是由要求的,具体可以看手册
2、PIXEL_H 的值设置,一行也好,半行也好,都是可以的,以前对于FPGA 逻辑资源少的,可以设置缓存半行后就开始burst到DDR中去,对于现在FPGA的规模都很大了,设置缓存1行busrt 也是可以的。 msxbo 发表于 2019-11-10 15:45
1、当CH6或者CH0的一幅图像已经传输完成后,通过FIFO的复位同步,清空FIFO,实际上如果每次传输正确,FIFO ...
fifo的异步复位需要保持三个较慢时钟的时钟宽度,那么复位之后,输入部分的数据不会被复位,只复位输出部分的数据吗?因为我的第一个问题是如果复位之后,留给的5640数据进入FIFO的时间不够,无法满足CH0_REQ=1的条件 冒味问下,20年新版的MIG课程中工程综合后时序不满足,这个方面该如何修改呢?
页:
[1]
2