FPGA
sdbzlh
软件-FPGA-理论研究兴趣做老师才疏学浅有错请指正.
展开
-
五个级别:系统级、算法级、RTL级、门级、开关级
算法级:主要用于快速验证算法的正确性,不一定可以综合成实际电路结构结构级:更接近电路的实际结构,电路的层次化描述,类似于电路框图RTL级:贴近实际电路结构的描述,描述的细节到寄存器内容传输级别,可以精确描述电路的工作原理、执行顺序,细化到寄存器级别的结构描述也就是RTL级描述,并无绝对划分标准开关级:完整描述了电路的细节,最底层的电路描述,可以描述pmos/nmos转载 2013-11-26 11:43:32 · 22549 阅读 · 0 评论 -
连线心得
连线这个活,说简单简单,说复杂复杂。暂时的连线方法如下:1、例化所有底层模块2、按底层模块从上到下的顺序,按端口从上到下的顺序,将这些端口连接到wire或reg上。注:上层模块没有赋值的端口,一般都是wire。注:可以复制底层模块的声明部分,简化上层模块中需要的reg或wire的声明。 总之,按照由上到下的顺序,这样做会使得信号名称可能不太好(比较理想的信号名称应该是从原创 2013-08-26 13:14:25 · 693 阅读 · 0 评论 -
灵活与高效
1、灵活的东西不可能高效,高效的东西不可能太灵活为了高效,必须放弃灵活。为了灵活,势必要牺牲高效。2、所以在灵活和性能之间做折衷。3、灵活是为了以后更省事,如果做不到这一点,就不要去做灵活。原创 2013-08-26 13:13:15 · 910 阅读 · 0 评论 -
ML507的配置
1、配置方法:(1)通过jtag下载程序到FPGA,(使用CPU Rst来使程序运行)或者程序自动复位并运行。(2)通过jtag下载程序到Platform Flash Memory、Linear Flash Memory、SPI Flash Memory中,选择好Mode DIP Switches,使用Prog来配置程序并运行。(3)通过jtag下载程序到flash卡,通过System原创 2013-08-26 13:12:32 · 1392 阅读 · 0 评论 -
PCIE各种包结构及常用资料汇总
一、Memory Read包本系统中:CPU会发出Read包。1、CPU发过来的包格式 Field NameHeader Byte/BitFunctionLength [9:0]Byte 3 Bit 7:0Byte 2 Bit 1:0单位是DWAttr (原创 2013-08-26 11:23:11 · 10298 阅读 · 1 评论 -
数的表示2
一、数的表示1、POSITIONAL NOTATION就是“权重”的概念2、Additive Notation古罗马计数法,有所有数字加起来表示一个数二、数制转化1、基于的公式(1)Base小的转化为Base大的:在目的Base下展开,在目的Base下做加法x = dk2k+ dk-12k- 1+....+d121+d020可以写作x = d0 + 2(原创 2013-08-26 11:12:24 · 803 阅读 · 0 评论 -
通过地址进行通信的两个模块的通信部分设计技巧
A模块与B模块通过地址进行通信,指:l A模块为主,B模块为从l A模块向B模块发送地址+读写使能的指令 设计技巧:1、对于A模块的读:B模块与A模块的read_data这个传输数据的信号,始终根据A模块的地址进行解码,为一个进程或者一个状态机,或者一个组合逻辑。2、对于A模块的写:B模块内部信号是另一个进程,只有当A模块给出写入的时候才写入。 也即:l原创 2013-08-26 11:05:41 · 801 阅读 · 0 评论 -
SliceM与SliceL
李虎:CLB中分为SliceM和SliceL。他们其中都有LUT。SliceM(M是指Memory)和SliceL(L是指Logic)的区别是,SliceM中含有能够把LUT资源重新整合为Ram和Rom的逻辑。这就是所谓的Distributed Ram。 分布式RAM是如何产生的及其与Block RAM的区别- 问 -分布式和Block RAM的原创 2013-08-26 11:24:33 · 8073 阅读 · 1 评论 -
搞笑的XORAndOr的解释
一、XORThe truth table for the XOR gate is:ABCTRUETRUEFALSETRUEFALSETRUEFALSETRUETRUEFALSEFALSE转载 2013-08-26 11:13:00 · 673 阅读 · 0 评论 -
动态可重构
一、1、可重构计算:Reconfigurable computing is intended tofill the gap between hard and soft, achieving potentially muchhigherperformance than software, while maintaining a higher level of flexibilityt原创 2013-08-26 11:25:10 · 2169 阅读 · 0 评论 -
full case与parallel case
full caseparallel case作用指示综合器:case里没提到的状态不用管指示综合器:此case无优先级的概念使用这个选项可能的后果如果case不完全,那么仿真器会产生latch,而使用这个选项后综合器综合出来的电路不会有latch。导致仿真和综合结果不一致。如果此case有优先级原创 2013-08-26 13:07:37 · 6071 阅读 · 0 评论 -
Impact使用
1、impact的目录不一定是当前的目录一定要检查,下到板子里的程序是不是当前目录下的文件。2、set target 是什么意思?3、下到xc32p里的程序后,一定要重启fpga,或者按一下prog键,否则程序肯定不会变化。4、IMPACT里面的set target选项的功能:技术支持回复:HiHu,I think this option is for custom转载 2013-08-26 13:11:46 · 1653 阅读 · 0 评论 -
FPGA调试心得
一、基本原则由简入繁:对一个复杂的东西(代码或模块),先研究简单的、笼统的(先读文档,再看例子),最后再进行困难的(自己动手来操作)。反复对比:如果A成功,B不成功。对A和B进行更改,取其公共部分,设计A1,B1来进行对比,找到不同,继而分析问题所在。刨根问底:坚信:这一定是我那里没弄好,不断尝试。多角度地纵深的挖掘。疑难问题更要注意细节,从细节上直接或间接地寻找问题。二、一些技术原创 2013-08-26 13:15:49 · 1135 阅读 · 0 评论 -
占空比
1、50%占空比的好处50% duty cycleclocks are beneficial when you want to clock stuff between rising andfallingedge clock domains as it balances the timing budget between both phases.Notethat moving dat翻译 2013-08-28 10:14:39 · 3017 阅读 · 0 评论 -
chipscope使用tips
1、实现的时候有错误:LUT5 symbol"DelayCntMax_mux00001" (output signal=DelayCntMax_mux0000) has input signal"DelayCntMax_i" which will be trimmed. See Section 5 of the Map Report File for details aboutwh原创 2013-08-28 10:14:31 · 10424 阅读 · 2 评论 -
fifo使用tips
1、Program Full Threshold挺有用的,最好认真设置一下。其实就是内部实现了一个比较器,这样可以省去Data count。当然有必要时加上。 设置Program FullThreshold的方法,最简单就是确保一次写入操作能够完成,这样Wr模块就会能够有保障的写入。所以可以设置这里为:总量-一个包的长度(的最大值:如果是变长包的的话)。 2、 FIFO要由原创 2013-08-28 10:14:16 · 1028 阅读 · 0 评论 -
带COE文件的核的tips
一些内存类核都可以用COE文件来初始化,目前来看,需要注意以下问题:1、拷贝核拷贝的时候,核中记录的COE文件的路径不变。这就意味着,如果考到一台新的电脑上,这里这个路径下面没有这个COE文件,会导致重新配置核的时候报错,然后就会发现核的所有参数都消失了。这样重新配置核比较费劲。 最简单的做法是,现在目标机上建立路径,建立这两个文件,让re-generate核的时候能找到这个文件,原创 2013-08-28 10:14:09 · 1175 阅读 · 0 评论 -
时钟资源的使用tips
一、IOBank的缓冲资源(不算是时钟资源)所有的信号在输入或者输出的时候,都会被自动加上BUF。这些BUF是在SelectIO中的资源,也即在Bank中的资源。这些资源主要是:IBUF、IBUFG及其差分形式及其输出形式。l 如果使用ISE,那么不需要显式地写出来使用这些资源,会自动使用IBUF或IBUFG。l IBUFG用且仅用于芯片上的专用时钟管脚GCLK,IBUF用且仅原创 2013-08-28 10:14:01 · 1357 阅读 · 0 评论 -
pcie block plus使用tips
1、在pcie_blk_plus_ll_rx.v文件中增加:`ifndef TCQ `define TCQ 1`endif2、仿真入口在pci_exp_usrapp_tx.v initial begin if ($value$plusargs("TESTNAME=%s", testname)) $display("Running test {原创 2013-08-28 10:13:51 · 4325 阅读 · 1 评论 -
状态机
1、状态机最好用时序输出,这样时序性能好。在这种情况下:(1)为了不延时,使用NextState做触发。这样是保证了在输入改变后的上升沿,输出会反映输入的变化。从输入改变到这一个上升沿这个过程是不可避免的,在做状态机时序设计的时候要考虑这一点。(如果是组合输出的话,输入会立即反映到输出上来。但是,决定状态转移的输入还是会延迟到上升沿才起作用,这是因为State这个变量是时序的。如果原创 2013-08-26 11:06:40 · 1307 阅读 · 0 评论 -
verilog仿真
1、基于分层的事件序列2、仿真开始,所有initial开始工作;所有always被触发一次,并且开始监听。如果两个进程对同一个信号都进行了赋值,那么在仿真时:l 如果该信号为wire,多赋值时会出现X(multi-source)。l 如果该信号为reg,多进程的赋值,会出现这两个进程依次起作用的现象,也即race(竞争)。其结果为仿真器执行的最后一个进程给该信号带来的结果。原创 2013-08-26 12:57:28 · 1662 阅读 · 0 评论 -
建立时间和保持时间学习笔记
这个概念是针对时序逻辑块或芯片之间的数据传输的。 逻辑块A和逻辑块B要有一个参考点,一般情况下是这两个芯片接口处的一个时钟信号的一个时钟沿。比如A向B传数据,相对于这个时钟信号的某一个沿来说,A的数据准备好的时刻超前或滞后与这个时钟沿的时间成为:建立时间;A的数据小时的时刻超前或滞后与这个时钟沿的时间成为:保持时间; 如果你这个时钟沿选取的离这个数据准备好或者消失的原创 2013-08-21 11:05:31 · 1942 阅读 · 0 评论 -
模块化设计
一、模块化的设计原因1、硬件复杂,全面的设计非常困难,任务分模块是分工合作的基础。2、人的精力有限,不可能事事躬亲。分模块为必然。二、模块化的设计关键1、模块间的接口接口是模块化是否高效的关键。现在已知的模块接口方案:(1)信号直连:高效,低扩展性(2)用FIFO连接:高扩展性,高延迟(3)Wishbone:类似于总线交换,是靠额外的逻辑来实现的。2、原创 2013-08-26 13:13:46 · 1028 阅读 · 0 评论 -
ModelSim仿真注意
1、vlog是编译的工具,有选项:(1)+define+Macro1 +define+Macro2+define+Macro3与使用源文件中的`ifdef`else `endif语句联合起来使用,使在仿真的时候可以执行一些代码。2、vsim是仿真用的工具,有选项:(1)加库-L xilinxcorelib_ver -L unisims_ver -L unimacro_ver -原创 2013-08-26 11:16:56 · 1644 阅读 · 0 评论 -
数的表示1
自然界存在量的关系,数学就是研究的这些规律。这些规律从日常生活中得到,并抽象为数学的基本关系。最基本的关系比如:“1+1=2”。这里1和2就是符号,可以换成其他的任何东西,比如“啊+啊=哦”,仅仅是符号而已。各种数的表示法则仅仅是把数表示成了不同的符号而已。“01+01=10”或者如果你愿意,可以写为“11+11=01”都可以,仅仅是符号罢了。几个符号结合可以生成新的符号,这个过程称之为运算。原创 2013-08-26 11:12:01 · 767 阅读 · 0 评论 -
一定要赋初值
一定要赋初值1、仿真的时候,modelsim不一定会给你初值,很有可能是X状态。对于那种更新时也是读自己的值然后变化的信号,这样子就很有可能一X到底了。2、综合的时候,综合器肯定给你赋初值,但是不一定是什么。 综上所述,一定要赋初值。原创 2013-08-26 10:58:04 · 915 阅读 · 0 评论 -
verilog常数定义学习笔记
1、parameter和`define是两种定义常数的方法。这两者本身很好区分。“`define X”在使用时,需要这样“`X”,而parameter直接使用名字即可,不需要使用“`”。2、`define在编译时有效,如果先编译这个文件,那么`define就生效了,在后续编译中都有效。parameter可以在例化时传入(推荐用名称传入的方法),也可以使用defparams在任何原创 2013-08-22 09:52:00 · 9626 阅读 · 0 评论 -
verilog“event”
Verilog里面可以定义事件(event),可以对testbench里面的信号进行监测,满足事件触发条件就触发事件并引发相应的处理,Verilog里面的event只用于仿真,不能综合。与Verilog里的事件相关的语法如下:定义一个事件:event reset_trigger;触发事件:#10 -> reset_trigger;由事件引发的操作:@ (reset_tr原创 2013-08-22 09:51:00 · 10279 阅读 · 0 评论 -
现代IC设计学习笔记
原创 2013-08-22 09:50:15 · 962 阅读 · 0 评论 -
VHDL 双向端口
FPGA中双向端口I/O的研究时间:2007-03-07 来源: 作者:莫海永张申科 点击:2178 字体大小:【大中 小】摘要:针对现场可编程门阵列(FPGA)芯片的特点,研究 FPGA 中双向端口I/O的设计,同时给出仿真初始化双向端口I/O的方法。采用这种双向端口的设计方法,选用 Xilinx的Spartan2E 芯片设计一转载 2013-08-22 10:55:05 · 5191 阅读 · 0 评论 -
VHDL TEXTIO
TEXTIO•文本输入输出包集合•对文本文件进行读写的过程和函数–定义了line数据类型–定义了文件读写过程文件操作语句•READLINE(文件变量,行变量);•READ(行变量,数据变量);•WRITELINE(文件变量,行变量);•WRITE(行变量,数据变量);•ENDFILE(文件变量);原创 2013-08-22 10:50:53 · 1754 阅读 · 0 评论 -
VHDL TEXTIO
TEXTIO•文本输入输出包集合•对文本文件进行读写的过程和函数–定义了line数据类型–定义了文件读写过程文件操作语句•READLINE(文件变量,行变量);•READ(行变量,数据变量);•WRITELINE(文件变量,行变量);•WRITE(行变量,数据变量);•ENDFILE(文件变量);原创 2013-08-22 10:50:11 · 2133 阅读 · 0 评论 -
阻塞赋值和非阻塞赋值学习笔记
1、八条指导性规范#1:当为时序逻辑建模,使用“非阻塞赋值”。#2:当为锁存器(latch)建模,使用“非阻塞赋值”。#3:当用always块为组合逻辑建模,使用“阻塞赋值”#4:当在同一个always块里面既为组合逻辑又为时序逻辑建模,使用“非阻塞赋值”。#5:不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”。#6:不要在两个或两个以上always块里面原创 2013-08-22 10:27:20 · 902 阅读 · 0 评论 -
可编程ASIC设计学习笔记-初步
一、设计的方法1、所有除了0和1都加上“X”if( sel = ‘1’ ) then y elsif( sel = ‘0’ ) then y else y end if;2、所有无关分支加上无关态(0)善于使用无关态‘-’来填补分支,可以引导综合工具生成很优化的电路。无关态‘-’在本质上时起了冗余电路删简的作用。(1)Cas原创 2013-08-21 11:25:11 · 1528 阅读 · 0 评论 -
竞争和冒险学习笔记
一、竞争: 在组合逻辑电路中,某个输入变量通过两条或两条以上的途径传到输出端,由于每条途径延迟时间不同,到达输出门的时间就有先有后,这种现象称为竞争。把不会产生错误输出的竞争的现象称为非临界竞争。把产生暂时性的或永久性错误输出的竞争现象称为临界竞争。冒险:是指数字电路中某个瞬间出现了非预期信号的现象。“1”冒险是由一个变量的原变量和反变量同时加到与门输入端造成的。“0”冒险是由一个变量原创 2013-08-21 11:08:41 · 3694 阅读 · 0 评论 -
触发器,寄存器,锁存器学习笔记
寄存器是一列时钟沿触发的D触发器锁存器是一列电平触发的D触发器 触发器是“会变化到某状态(稳态)的电路触发器:触发时能进行变化的设备分单稳态,多稳态。 一、单稳态单稳态触发器只有一个稳定的状态。这个稳定状态要么是0,要么是1。单稳态触发器的工作特点是:(1)在没有受到外界触发脉冲作用的情况下,单稳态触发器保持在稳态;(2)在受到外界触发脉冲作用的原创 2013-08-21 10:59:34 · 1763 阅读 · 0 评论 -
Verilog语法最常错的点
1、信号长度不匹配在verilog中也可以编译通过,但是由于某些信号没有驱动会导致在map的时候删掉了一些逻辑导致不通过。唉,灵活也有灵活的坏处。时刻检测信号长度是否匹配。在声明wire和reg时,要求所有bus都要体现在注释中,即:wire [31:0] w1;//bus [31:0]如果不匹配,左值位宽如果大于右值,那么左值就会高位填零;左值如果小于右值,那么左值取得是右值原创 2013-08-22 09:53:33 · 3339 阅读 · 0 评论 -
verilog状态机学习笔记
1、一个模块的输出最好用寄存器打一拍。在设计分割为子模块时,要将一个寄存器分隔在一个模块的输出端。2、如果时序要求不允许这么做,那么:(1)将状态机的状态用输出作为状态编码因为一个没有冗余的状态机的输出肯定是不一样的(输入信号可以化为一个选通信号来处理)。所以消除输出冗余项(如果为了某些原因需要这些冗余项,那么就多加一位来区别就可以了)后的状态编码,作为输出时,由于state转原创 2013-08-22 09:53:57 · 1026 阅读 · 0 评论 -
verilog例化
例化,语法上等价于赋值。 例化可用常数、信号填到小括号里面。 对于输入port,可以用{}来连接多个信号做输入。对于输出port,则不可以,必须用一个信号连接出来,再分别赋值。因为{}可做赋值的右值,但不可做左值。原创 2013-08-22 10:23:09 · 5156 阅读 · 0 评论 -
wp231的学习笔记
1、(1)最好不使用复位。(2)如果使用复位,最好是同步复位。异步复位这个功能虽然存在与FPGA中的寄存器上,但是综合后比同步复位浪费逻辑资源。也即:在目前的FPGA中,异步复位的实现的代价是牺牲了一些逻辑。2、(1)复制寄存器,减少扇出系数是一个好方法。复制时加上keep选项仿制被优化掉。复制寄存器的意思:本来是A控制B,B有很多位。现在复制N个A,分别用于控制B原创 2013-08-26 10:59:08 · 2329 阅读 · 0 评论