一些FPGA小技巧

一、位宽不匹配

不带位宽进行减法:

assign  o_c[1:0] = (i_a[1:0] == i_b[1:0] - 1) ? 2'b01 : 2'b10;

布局后:

带位宽进行减法:

o_c[1:0] = (i_a[1:0] == i_b[1:0] - 1'b1) ? 2'b01 : 2'b10;

布局后:

规范要求

 

 二、lattice设计注意点

1)、DQS,DQ

每个DQ管脚处都有一个ODDR

ODDR不可以用在DQS处

2)、LATTICE中普通走线进PLL的方法:

strategy里面,点击place and route,右边的选项窗口里面选择command line option里面添加 -exp Warn_DDR_General_Routing_on_Clock=1

这个主要是时钟上primary之前走了一段routing,软件默认认为这样不算时钟

3)、二个经常使用的属性: 

Macro Search Path:调用IP所用到的ngo以及网表文件所在路径,如果这里不设置,需要拷贝相关文件到工程目录下(与*.ldf同级目录)

Memory Initial Value File Search Path: RAM,ROM等初始化文件所在路径索引,如果这里不设置,需要拷贝相关文件到工程目录下(与*.ldf同级目录)

4)、lattice时序约束注意点

DCS在时钟无输入时,易导致锁死现象

当时用到reveal时,需要将jtag时钟进行约束到2m,保持时间0.05ns,否则容易捕捉数据出错

全局clksecondary clk需要分区域约束

secondary clk约束频率时需要保持时间的要求0.05ns

70ea95ea属于同一片子,ipbit通用,但推荐出版本时,要以实际的型号生成bit文件

 5)、ECP3 PLL CLK in不推荐使用DCS的输出

 三、xilinx设计技巧

1)、ISE中压缩文件方法

方法:

A、右击"Generate Programming File",点击"Process Properties"。

B、在-g compress后面打勾,压缩一下,再生成mcs后占用的数据空间可能就够了。

原因:因为不压缩的bit文件中,有用的程序代码后面会有很多固定的填补,在生成mcs时,这些填补也是占用空间的,压缩后,这些无用字节可以理解为被一句话“后面全是零”代替了。所以生成flash文件就不会占用那么多空间了。

(2)、IO Constraint

Off-Chip Termination:显示每个I/O标准的默认端接。比如FP_VTT_50表示远端并联50Ω的VTT端类型;

The termination setting is used by Simultaneous Switching Noise (SSN) analysis (see appendix A in UG571) and for power estimation (see UG440).   

Pull type:括弱上拉PULLUP、弱下拉PULLDOWN和保持KEEPER和NONE四种,前两种让三态输出或双向端口在不被驱动时可以避免浮动,KEEPER可以让其保持当前的值。

(3)、XILINX 二选一时钟

参考:https://blog.csdn.net/dimples_Song/article/details/81216527?ivk_sa=1024320u

clk125 和 clk250 是 clkcore_buf 的两个输入时钟,这两个时钟经过BUFGCTRL(在Xilinx 7系列FPGA中,直接使用BUFGMUX会消耗一个BUFGCTRL资源)后有重复时钟路径,针对这两个时钟做如下约束:

create_generated_clock -name clk125_bufgctrl \

-divide_by 1 [get_pins bufgctrl_i/O] \

-source [get_ports bufgctrl_i/I0]

create_generated_clock -name clk250_bufgctrl \

-divide_by 1 [get_pins bufgctrl_i/O] \

-source [get_ports bufgctrl_i/I1] \

-add -master_clock clk250

set_clock_groups –physically_exclusive \

–group clk125_bufgctrl \

–group clk250_bufgctrl

在clkcore_buf 的输出端上创建两个重叠的衍生钟,并将其时钟关系约束为 -physically_exclusive 表示不可能同时

通过。按照我的理解,频率稍高的一路时钟需要约束为-master_clock

(4)、JTAG连上导致FPGA无法启动的问题

https://www.xilinx.com/support/answers/66954.html

5)、vivadomcs文件的产生方法tcl脚本

write_cfgmem -force -format MCS -size 64 -interface SPIx1    -loadbit "up 0x0 E:/*/fpga_top.bit" E:/*/fpga_top

其中

  1. -size 64为芯片大小
  2. E:/*/fpga_top.bit   bit文件所在位置
  3. E:/*/fpga_top       mcs文件产生的位置
  4. W25Q128FV fpga对应的flash

四、Altera使用技巧

五、时钟选择电路

 六、modelsim

1)、Vivado生成库文件

在vivado的TCL窗口输入“compile_simlib -simulator modelsim -directory {E:\library\vivado}”,生成vivado的库文件。

2)、Modelsim PE,SE,DE区别

ModelSim是一款流行的数字设计仿真工具,由Mentor Graphics(现在是Siemens公司的一部分)开发和维护。它提供了DE(Development Edition)、SE(Starter Edition)和PE(Power Edition)等几个版本,每个版本针对不同的用户需求和功能有所不同。

ModelSim DE(Development Edition):

DE版是ModelSim的完整版,提供了广泛的功能和工具。
它包含了VHDL和Verilog仿真器,允许用户进行大型项目的仿真和调试。
DE版还支持SystemVerilog和VHDL-AMS语言,并提供高级调试功能。
DE版通常被用于专业的数字设计工程师,用于复杂项目的仿真和验证。

 

ModelSim SE(Starter Edition):

SE版是ModelSim的入门级版本,相比DE版功能较为受限。
它提供了基本的VHDL和Verilog仿真器,适用于小型项目的仿真和调试。
SE版不支持SystemVerilog和VHDL-AMS语言,并且缺少一些高级调试功能。
SE版通常被用于学生或初学者,用于学习数字设计和进行简单项目的仿真。

 

ModelSim PE(Power Edition):

PE版是介于DE版和SE版之间的版本,功能较SE版更强大,但不如DE版全面。
它提供了一些高级功能,比如代码覆盖率分析和性能优化选项。
PE版支持VHDL和Verilog仿真器,以及一些SystemVerilog特性,但不支持VHDL-AMS。
PE版适用于中等大小的项目,提供了较SE版更多的功能和灵活性。
综上所述,ModelSim DE版适合专业的数字设计工程师处理复杂项目,ModelSim SE版适合学生或初学者学习和进行简单项目的仿真,而ModelSim PE版则提供了一些高级功能,适合中等规模的项目。选择合适的版本取决于需求和预算。

3)、modelsim参数解析

3)、Modelsim命令解析

(1) +incdir+:

如:vlog +incdir+YOUR_SOURCE_PATH  foo.v

  +incdir+YOUR_SOURCE_PATH 选项是指在verilog文件中出现`include "xxx.v"

时,包含文件的搜索路径。

缺省是搜索当前路径,然后是 YOUR_SOURCE_PATH 指定的路径。

(2) +define+:

+define+<macro_name>[=<macro_text>]

  允许用户在命令行中定义宏定义,等效于编译器指令:

`define <macro_name> <macro_text>

  用户可以指定多个宏定义,如下:

vlog +define+one=r1 +two=r2 +three=r3 test.v

  命令行的宏定义会覆盖在源文件中用`define定义的相同名字的宏定义

如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo

   开始仿真:

-c 选项让vsim工作在commandline模式;

-l 选项是输出log文件到vsim.log;

-do 选项是开始仿真后运行tcl脚本文件;

-L 选项是指定工作逻辑库;

work.foo是仿真的top level module。

4)、仿真脚本

xilinx:

vsim -L xilinxcorelib_ver -L unisims_ver -L unimacro_ver -L secureip -lib work -voptargs=\"+acc\" -t 1ps work.tb_top_nto1_pll glbl

lattice:

vsim -t ps -novopt +notimingchecks -L lattice_lib -L pcsd_work -L lattice_pmi -L lattice_ecp3 work.tb_fpga_src_top

七、FPGA器件资料

SERDES两种预加重的区别

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值