- 博客(51)
- 收藏
- 关注
转载 五个级别:系统级、算法级、RTL级、门级、开关级
算法级:主要用于快速验证算法的正确性,不一定可以综合成实际电路结构结构级:更接近电路的实际结构,电路的层次化描述,类似于电路框图RTL级:贴近实际电路结构的描述,描述的细节到寄存器内容传输级别,可以精确描述电路的工作原理、执行顺序,细化到寄存器级别的结构描述也就是RTL级描述,并无绝对划分标准开关级:完整描述了电路的细节,最底层的电路描述,可以描述pmos/nmos
2013-11-26 11:43:32
22554
翻译 占空比
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
原创 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
10425
2
原创 fifo使用tips
1、Program Full Threshold挺有用的,最好认真设置一下。其实就是内部实现了一个比较器,这样可以省去Data count。当然有必要时加上。 设置Program FullThreshold的方法,最简单就是确保一次写入操作能够完成,这样Wr模块就会能够有保障的写入。所以可以设置这里为:总量-一个包的长度(的最大值:如果是变长包的的话)。 2、 FIFO要由
2013-08-28 10:14:16
1029
原创 带COE文件的核的tips
一些内存类核都可以用COE文件来初始化,目前来看,需要注意以下问题:1、拷贝核拷贝的时候,核中记录的COE文件的路径不变。这就意味着,如果考到一台新的电脑上,这里这个路径下面没有这个COE文件,会导致重新配置核的时候报错,然后就会发现核的所有参数都消失了。这样重新配置核比较费劲。 最简单的做法是,现在目标机上建立路径,建立这两个文件,让re-generate核的时候能找到这个文件,
2013-08-28 10:14:09
1175
原创 时钟资源的使用tips
一、IOBank的缓冲资源(不算是时钟资源)所有的信号在输入或者输出的时候,都会被自动加上BUF。这些BUF是在SelectIO中的资源,也即在Bank中的资源。这些资源主要是:IBUF、IBUFG及其差分形式及其输出形式。l 如果使用ISE,那么不需要显式地写出来使用这些资源,会自动使用IBUF或IBUFG。l IBUFG用且仅用于芯片上的专用时钟管脚GCLK,IBUF用且仅
2013-08-28 10:14:01
1357
原创 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
4327
1
原创 FPGA调试心得
一、基本原则由简入繁:对一个复杂的东西(代码或模块),先研究简单的、笼统的(先读文档,再看例子),最后再进行困难的(自己动手来操作)。反复对比:如果A成功,B不成功。对A和B进行更改,取其公共部分,设计A1,B1来进行对比,找到不同,继而分析问题所在。刨根问底:坚信:这一定是我那里没弄好,不断尝试。多角度地纵深的挖掘。疑难问题更要注意细节,从细节上直接或间接地寻找问题。二、一些技术
2013-08-26 13:15:49
1136
原创 连线心得
连线这个活,说简单简单,说复杂复杂。暂时的连线方法如下:1、例化所有底层模块2、按底层模块从上到下的顺序,按端口从上到下的顺序,将这些端口连接到wire或reg上。注:上层模块没有赋值的端口,一般都是wire。注:可以复制底层模块的声明部分,简化上层模块中需要的reg或wire的声明。 总之,按照由上到下的顺序,这样做会使得信号名称可能不太好(比较理想的信号名称应该是从
2013-08-26 13:14:25
694
原创 模块化设计
一、模块化的设计原因1、硬件复杂,全面的设计非常困难,任务分模块是分工合作的基础。2、人的精力有限,不可能事事躬亲。分模块为必然。二、模块化的设计关键1、模块间的接口接口是模块化是否高效的关键。现在已知的模块接口方案:(1)信号直连:高效,低扩展性(2)用FIFO连接:高扩展性,高延迟(3)Wishbone:类似于总线交换,是靠额外的逻辑来实现的。2、
2013-08-26 13:13:46
1028
原创 灵活与高效
1、灵活的东西不可能高效,高效的东西不可能太灵活为了高效,必须放弃灵活。为了灵活,势必要牺牲高效。2、所以在灵活和性能之间做折衷。3、灵活是为了以后更省事,如果做不到这一点,就不要去做灵活。
2013-08-26 13:13:15
910
原创 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
转载 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
1654
原创 full case与parallel case
full caseparallel case作用指示综合器:case里没提到的状态不用管指示综合器:此case无优先级的概念使用这个选项可能的后果如果case不完全,那么仿真器会产生latch,而使用这个选项后综合器综合出来的电路不会有latch。导致仿真和综合结果不一致。如果此case有优先级
2013-08-26 13:07:37
6074
原创 verilog仿真
1、基于分层的事件序列2、仿真开始,所有initial开始工作;所有always被触发一次,并且开始监听。如果两个进程对同一个信号都进行了赋值,那么在仿真时:l 如果该信号为wire,多赋值时会出现X(multi-source)。l 如果该信号为reg,多进程的赋值,会出现这两个进程依次起作用的现象,也即race(竞争)。其结果为仿真器执行的最后一个进程给该信号带来的结果。
2013-08-26 12:57:28
1667
原创 动态可重构
一、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
2170
原创 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
8074
1
原创 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
10300
1
原创 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
1645
转载 搞笑的XORAndOr的解释
一、XORThe truth table for the XOR gate is:ABCTRUETRUEFALSETRUEFALSETRUEFALSETRUETRUEFALSEFALSE
2013-08-26 11:13:00
674
原创 数的表示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
805
原创 数的表示1
自然界存在量的关系,数学就是研究的这些规律。这些规律从日常生活中得到,并抽象为数学的基本关系。最基本的关系比如:“1+1=2”。这里1和2就是符号,可以换成其他的任何东西,比如“啊+啊=哦”,仅仅是符号而已。各种数的表示法则仅仅是把数表示成了不同的符号而已。“01+01=10”或者如果你愿意,可以写为“11+11=01”都可以,仅仅是符号罢了。几个符号结合可以生成新的符号,这个过程称之为运算。
2013-08-26 11:12:01
768
原创 状态机
1、状态机最好用时序输出,这样时序性能好。在这种情况下:(1)为了不延时,使用NextState做触发。这样是保证了在输入改变后的上升沿,输出会反映输入的变化。从输入改变到这一个上升沿这个过程是不可避免的,在做状态机时序设计的时候要考虑这一点。(如果是组合输出的话,输入会立即反映到输出上来。但是,决定状态转移的输入还是会延迟到上升沿才起作用,这是因为State这个变量是时序的。如果
2013-08-26 11:06:40
1307
原创 通过地址进行通信的两个模块的通信部分设计技巧
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
原创 wp231的学习笔记
1、(1)最好不使用复位。(2)如果使用复位,最好是同步复位。异步复位这个功能虽然存在与FPGA中的寄存器上,但是综合后比同步复位浪费逻辑资源。也即:在目前的FPGA中,异步复位的实现的代价是牺牲了一些逻辑。2、(1)复制寄存器,减少扇出系数是一个好方法。复制时加上keep选项仿制被优化掉。复制寄存器的意思:本来是A控制B,B有很多位。现在复制N个A,分别用于控制B
2013-08-26 10:59:08
2329
原创 一定要赋初值
一定要赋初值1、仿真的时候,modelsim不一定会给你初值,很有可能是X状态。对于那种更新时也是读自己的值然后变化的信号,这样子就很有可能一X到底了。2、综合的时候,综合器肯定给你赋初值,但是不一定是什么。 综上所述,一定要赋初值。
2013-08-26 10:58:04
917
转载 VHDL 双向端口
FPGA中双向端口I/O的研究时间:2007-03-07 来源: 作者:莫海永张申科 点击:2178 字体大小:【大中 小】摘要:针对现场可编程门阵列(FPGA)芯片的特点,研究 FPGA 中双向端口I/O的设计,同时给出仿真初始化双向端口I/O的方法。采用这种双向端口的设计方法,选用 Xilinx的Spartan2E 芯片设计一
2013-08-22 10:55:05
5192
原创 信号的属性
信号的属性就是构造了一个新的信号: 详见:VHDL_Attributes_Delay_Model_VHDLSession6_eNotes.pdf
2013-08-22 10:54:32
1212
原创 VHDL配置语句
VHDL配置(Configuration)语句描述层与层之间的连接关系以及实体与构造体之间的对应关系。设计者可以利用这种配置语句来选择不同的构造体,使其与要设计的实体相对应。在仿真某一个实体时,可以利用配置来选择不同的构造体,进行性能对比试验,以得到性能最佳的构造体。最简单的配置语句,结构如下:CONFIGURATION 配置名 OF 实体名 IS FOR 为实体选配
2013-08-22 10:53:13
5549
原创 VHDL 枚举与数组
枚举:type aaa is (‘1’,’0’,’x’,’z’);--单引号表示字符串type aaa is ( a,b,c,d);--没引号表示变量 数组:type aaa is array ( 0 to 800) of std_logic;type aaa is array ( std_logic,std_logic) of std_logic;
2013-08-22 10:51:45
2958
原创 WaitAssertNext
一、next,exit这两个关键词有点类似于C语言中的continue和break.PROCESS(A, B)CONSTANT max_limit : INTEGER := 255;BEGINFOR i IN 0 TO max_limit LOOPIF (done(i) = TRUE) THENNEXT;ELSEdone(i) := TRUE;END IF;
2013-08-22 10:51:11
670
原创 VHDL TEXTIO
TEXTIO•文本输入输出包集合•对文本文件进行读写的过程和函数–定义了line数据类型–定义了文件读写过程文件操作语句•READLINE(文件变量,行变量);•READ(行变量,数据变量);•WRITELINE(文件变量,行变量);•WRITE(行变量,数据变量);•ENDFILE(文件变量);
2013-08-22 10:50:53
1755
原创 VHDL TEXTIO
TEXTIO•文本输入输出包集合•对文本文件进行读写的过程和函数–定义了line数据类型–定义了文件读写过程文件操作语句•READLINE(文件变量,行变量);•READ(行变量,数据变量);•WRITELINE(文件变量,行变量);•WRITE(行变量,数据变量);•ENDFILE(文件变量);
2013-08-22 10:50:11
2133
转载 VHDL 93TextIO
在编写testbench时,我们会用到一些VHDL语言,这些语言是我们不常用的,甚至以前没有见过的,但是在testbench中他们却是被经常用到,而且对我们的仿真编写非常有用。今天我们就来简单讲一下常用的几个VHDL句法。一、文件I/O上节讲了,在testbench常将数据写入文件,或者从文件读入数据等,这都需要用到VHDL语言中与文件打交道的语言,即是常说的file I/O.这里强调
2013-08-22 10:47:54
3140
原创 阻塞赋值和非阻塞赋值学习笔记
1、八条指导性规范#1:当为时序逻辑建模,使用“非阻塞赋值”。#2:当为锁存器(latch)建模,使用“非阻塞赋值”。#3:当用always块为组合逻辑建模,使用“阻塞赋值”#4:当在同一个always块里面既为组合逻辑又为时序逻辑建模,使用“非阻塞赋值”。#5:不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”。#6:不要在两个或两个以上always块里面
2013-08-22 10:27:20
902
原创 verilog例化
例化,语法上等价于赋值。 例化可用常数、信号填到小括号里面。 对于输入port,可以用{}来连接多个信号做输入。对于输出port,则不可以,必须用一个信号连接出来,再分别赋值。因为{}可做赋值的右值,但不可做左值。
2013-08-22 10:23:09
5156
原创 Wire与Reg的使用方式测试报告
1、基本测试项语法测试结果说明组合:=(assign/initial/always_with_no_clk) assign用且仅用=,左值用且仅用wireinitial和always左值用且仅用reg,=和都可以,但是一般情况下,组合用=,时序用时序:(always_with_c
2013-08-22 09:56:36
2121
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人