一、位宽不匹配
不带位宽进行减法:
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,否则容易捕捉数据出错
全局clk和secondary clk需要分区域约束
secondary clk约束频率时需要保持时间的要求0.05ns
70ea和95ea属于同一片子,ip和bit通用,但推荐出版本时,要以实际的型号生成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)、vivado中mcs文件的产生方法:tcl脚本
write_cfgmem -force -format MCS -size 64 -interface SPIx1 -loadbit "up 0x0 E:/*/fpga_top.bit" E:/*/fpga_top
其中
- -size 64为芯片大小
- E:/*/fpga_top.bit 为bit文件所在位置
- E:/*/fpga_top 为mcs文件产生的位置
- 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两种预加重的区别