有可能你之后写入的数据就已经是全0了,用一个方法确定,你把输入连到一个常数上,如果到最后有数据输出就说明是对的,要是没数据输出就说明是错的,一般来说FIFO IP核没有问题的,用了好多次了。
empty,表示绝对的空,其作用是告诉你fifo里没数据了;
prog_empty,表示可设置的相对的空,作用是告诉你fifo的数据个数不足一定量,暂时不可操作,等达到一定量后,才可以一次性操作。
举个例子,你的上层每次必须要从fifo里一次性拿100个数据才可以进行后续操作,那么你的prog_empty的门限就要设为100以上,这样prog_empty不使能,就代表fifo里至少有100个数据,这样上层保证可以连续读出100个数据。
一、背景
FIFO是FPGA项目中使用最多的IP核,一个项目使用几个,甚至是几十个FIFO都是很正常的。通常情况下,每个FIFO的参数,特别是位宽和深度,是不同的。
明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。
这些项目都必须用到FIFO。如果按照通常做法,每种位宽和深度的IP,都要打开FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、设置参数、生成并编译IP核,工作量可以想象出来是非常多的。更重要的是随之而来的管理问题,如何管理这几十个不同FIFO,如何检查FIFO的设置是否正确,都是一个不小的挑战。
对于我们专门承接项目的团队,绝不可忍受如此重复、枯燥、容易出错的工作。经过精心研究,终于找到了一条实用的方法:使用XILINX的原语--xpm_fifo_async和xpm_fifo_sync。
XILINX原语xpm_fifo_async和xpm_fifo_sync在FPGA中,可以直接例化使用,并且可以参数化FIFO的位宽和深度的。即在设计时,不用生成FIFO IP,直接例化就可以使用了。
二、获得参考代码
打开VIVADO软件,点击上图中的Language Templates,将会弹出Language Templates窗口,如下图。
在Language Templates窗口中,依次点击verilog、Xilinx Parameterized Macros(XPM)、XPM、XPM_FIFO,如上图。可以看到有三种FIFO,分别是异步的XPM FIFO:xpm_fifo_async、AXI总线的FIFO:xpm_fifo_axis和同步的XMP FIFO:xpm_fifo_sync。
选择xpm_fifo_async,右边的Preview窗口,将出现xpm_fifo_async的注释以及参考代码。将此部分代码拷出来,并将注释删除,剩下的是xpm_fifo_async的例化参考。
上图是对xpm_fifo_async的参数例化部分。下面是需要重点关注并经常使用的参数。
Ø FIFO_WRITE_DEPTH:FIFO的写深度,其实就是在这里设置FIFO的深度,注意该值通常是2的N次方,如8、16、32、64等数。
Ø PROG_EMPTY_THRESH:FIFO的快空的水线。当FIFO存储的数据量小于该水线时,FIFO的快空信号将会变高。
Ø PROG_FULL_THRESH:FIFO的快满的水线。当FIFO存储的数据量大于该水线时,FIFO的快满信号将会变高,表示有效。
Ø READ_DATA_WIDTH:读数据的位宽。
Ø WRITE_DATA_WIDTH:将数据的位宽。
Ø RD_DATA_COUNT_WIDHT:读侧数据统计值的位宽。
Ø WR_DATA_COUNT_WIDTH:写侧数据统计值的位宽。
上图是对xpm_fifo_async的接口信号部分。下面是需要重点关注并经常使用的信号。
Ø wr_clk:FIFO的写时钟。
Ø rst:FIFO的复位信号,高电平有效。要注意的是,该信号是属于写时钟域的。
Ø wr_en:FIFO的写使能信号。
Ø din:FIFO的写数据
Ø full:写满指示信号,当FIFO写满时,该信号变高。
Ø wr_data_count:FIFO存储数据量指示信号,用来指示当前FIFO已经写入但未读出的数据个数。
Ø rd_clk:FIFO的读时钟。
Ø rd_en:FIFO的读使能。
Ø dout:FIFO读出的数据。
Ø empty:FIFO的空指示信号。当其为1表示FIFO处于空状态,当其为0,表示FIFO内有数据。
三、定义自用的FIFO模块
从第二步可以看出,xpm_fifo_async是可以参数化深度和位宽的。但xpm_fifo_async有很多参数和信号,并且其中有部分是不使用的。为了使用上的方便,可以自定义自用的FIFO模块。
例如,明德扬就定义了一个模块mdyFifoAsy,该信号的接口信号如下图。可以看出,名称更加规范,并且定义常用的信号,如读时钟rd_clk,写时钟wrclk、写使能wrreq等信号。
明德扬还在模块mdyFifoAsy定义了一些常用的参数,分别是FIFO深度参数:DEPT_W;FIFO位宽的参数:DATA_W,还有FIFO快满参数AL_FUL和快空参数AL_EMP,如下图。
接下来,就是在mdyFifoAsy中例化并使用xpm_fifo_async了。如下图,就是对xpm_fifo_async的参数例化。将DEPT_W传给FIFO_WRITE_DEPTH,DATA_W传给READ_DATA_WIDTH等。
下图是对xpm_fifo_async的信号例化。将不用的信号留空,将dout连到q,din连到data,wr_en连到wrreq等。您可以根据自己情况来定制FIFO。
四、应用
定制完自己的FIFO后,就可以直接例化使用了。
上图就是使用了一个位宽为8,深度为256的FIFO。
上图就是使用了一个位宽为18,深度为1024的FIFO。
FIFO是FPGA、芯片设计中,最常用的IP核,在存储控制、算法实现、接口设计中,都少不了FIFO,因此合理并正确使用FIFO的技术就非常有必要了,明德扬录制了FIFO的训练视频,掌握后技术能力将有大提升。
通过上面介绍可知,通过此种方式,再也不用生成FIFO IP核啦,整个工程大小基本上可以减少一大半。
上面举的例子是xpm_fifo_async,同步FIFO:xpm_fifo_sync的使用方法是类似的。
1.不知道你的主板BIOS是什么版本,目前微星对这块主板发布了3次BIOS. 。
①MSI微星P43 Neo3主板最新BIOS 1.1版For DOS(2008年6月4日发布)在memory-z中加入Patriot、GeIL、ProMos、Buffalo、OCZ字符串 . 。
②MSI微星P43 Neo3主板最新BIOS 1.2版For DOS(2008年6月19日发布)新版BIOS更新如下:1.更新了CPU模块。2.解决适用E2200 CPU时DTM SMBIOS出现的问题。3.超频失败时开启WatchDog或CLKGEN 。
③MSI微星P43 Neo3主板最新BIOS 1.3版For DOS(2008年7月11日发布)新版BIOS更新如下:1.升级CPU模块。2.升级NB模块。3.修正使用PCI-E网卡时,系统无法从S1模式恢复的问题 。
你对应着看一下,如果解决不了你的主板问题,那就最好是不刷。
2.BIOS下载地址:http://so.mydrivers.com/drivers.aspx?q=P43%20Neo3-F (不建议使用这种方法刷)。
3.刷BIOS注意不能中断,尤其是不能断电。
4.可以在xp里刷,你安装主板自带光盘里的Live Update,这是一套具备强大功能且方便使用的应用程式,可自动检测、即时更新系统装置的驱动程式及BIOS,藉此可省下搜寻各种驱动程式及BIOS的时间与降低风险。 (建议使用这种方法刷BIOS,非常非常非常简单)
5.只要不断电,肯定能刷成功,万一万一万一万一失败了,你把BIOS芯片拔下来(小心操作别弄碎了),找电子商店用专门设置给刷一下,百分百成功。
6.关于超频:
①这块主板上有FSB跳线,你可以看一下说明书进行设置。
②进入BIOS,光标移到“Cell Menu”,回车,第一行灰色的“Current CPU Frequency”对应的是CPU现在的频率。看第三行“D.O.T.Control”,这是动态超频,也就是说,当电脑侦测到CPU正在执行程序时,会自动超频,当CPU低负载的时候又会自动回复到原来的速度,可选项是1% 3% 5% 7% 10% 15%。
③第四行“Intel EIST”,智能降频技术,如果你超频,请把它关掉。
④第五行“Adjust CPU FSB Frequency (MHz)”,调整CPU外频,超频的时候要慢慢向高里调数值,譬如你将266MHz调整到300,保存设置后进系统,跑两遍测试软件,游戏什么的,再重启进BIOS接着往上调,CPU有个适应的过度,切忌一口吃个胖子。
⑤超频失败是再所难免的,开机不亮就清一下BIOS吧,主板说明书上有跳线位置图。超频里面的学问很多,如果你对超频感兴趣,就多去相关的论坛,看看网友们是怎么玩超频的,对你会有很大帮忙。
7.IDE接口可以装系统,只要在BIOS里设好启动顺序就可以了。
(我这都是自己打的啊,还下载了主板的说明书看了好久,楼主给个最佳吧,嘿嘿)
单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
⒈ 电源:
⑴ VCC - 芯片电源,接+5V;
⑵ VSS - 接地端;
⒉ 时钟:
XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。
⒊ 控制线:控制线共有4根,
⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ① ALE功能:用来锁存P0口送出的低8位地址。
② PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵ PSEN:外ROM读选通信号。
⑶ RST/VPD:复位/备用电源。
① RST(Reset)功能:复位信号输入端。
② VPD功能:在Vcc掉电情况下,接备用电源。
⑷ EA/Vpp:内外ROM选择/片内EPROM编程电源。
① EA功能:内外ROM选择端。
② Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋ I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。 P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。P0口输入时需要接上拉电阻才能置1: