ispMACH 4000系列CPLD优化参数设置指南

需积分: 2 2 下载量 135 浏览量 更新于2024-09-13 收藏 383KB PDF 举报
"ispMACH 4000系列CPLD的优化参数配置是提升设计效率和系统性能的关键步骤。对于使用Lattice ispLEVER开发平台的工程师来说,理解和应用这些参数至关重要。本指南强调了在开始设计之前阅读手册的重要性,并推荐采用统一的设计参数方法以增强设计的稳定性和版本管理。同时,为了获得更佳的优化效果和设计可靠性,更新到ispLEVER 5及以上版本是必要的。以下是一些关键的ispMACH 4000系列CPLD constraint选项: 1. Dt_synthesis: - 当设置为Yes,合成工具可以利用宏单元内的T触发器节省乘积项(PT)资源。通常建议设置为Yes。 2. Xor_synthesis: - 如果设计中寄存器的输入包含异步输入引脚信号,建议设置为No,以避免资源浪费和可能的错误。 3. Nodes_collapsing_mode: - Fmax: 以最大化速度为目标,适用于对性能有严格要求的情况。 - Area: 以最佳资源利用率为目标,当宏单元占用较高但无特定性能需求时考虑。 - Speed: 平衡速度和资源利用率,通常是通用的最佳选择。建议首先尝试Speed选项。 4. Max_pterm_collapse: - 这个选项定义了每个宏单元可以使用的最大乘积项数量。默认值通常足够,但在布线失败时,可以降低该值至最大值的60%~80%以提高布线成功率。 5. Max_fanin: - 定义每个宏单元的最大扇入数。默认值通常适用,但如果遇到fit失败(如ispLEVER警告GLB输入超过36),可以降低至最大值的60%~80%。 在进行CPLD设计时,应根据具体需求灵活调整这些参数,并进行多次尝试以找到最佳配置。在资源充足但布线失败的情况下,合理调整Max_pterm_collapse和Max_fanin可以有效改善设计的实现可能性。理解并熟练掌握这些参数对于优化ispMACH 4000系列CPLD的设计至关重要,能够显著提高设计质量和性能。"

MODULE ispmach TITLE 'simple alu' "program alu8_16.abl" DECLARATIONS clk pin 68; alu_f1,alu_f0,b_sel,oe pin 87..84; D7..D0 pin 24,23,26,25, 28,27,30,29; Y7..Y0 pin 32..39; carry,zero pin 80, 81; Acc_7..Acc_0 pin 77..70; B7..B0,A7..A0,a_sel node istype 'com'; c8..c1,c0 node istype 'com'; Acc7..Acc0 node istype 'reg,keep'; alu_f=[alu_f1,alu_f0]; A=[A7..A0]; B=[B7..B0]; D=[D7..D0]; Y=[Y7..Y0]; Acc=[Acc7..Acc0]; EQUATIONS when b_sel then B=Acc; else B=[0,0,0,0,0,0,0,0]; when alu_f==[0,1] then {c0=1;a_sel=1;} when a_sel then A=!D; else A=D; Acc:=Y; Acc.CLK=clk; [Acc_7..Acc_0]=Acc; [Acc_7..Acc_0].oe=oe; when (alu_f==[0,0])#(alu_f==[0,1]) then { Y0=B0&A0&c0 # B0&!A0&!c0 #!B0&A0&!c0 # !B0&!A0&c0; Y1=B1&A1&c1 # B1&!A1&!c1 #!B1&A1&!c1 # !B1&!A1&c1; Y2=B2&A2&c2 # B2&!A2&!c2 #!B2&A2&!c2 # !B2&!A2&c2; Y3=B3&A3&c3 # B3&!A3&!c3 #!B3&A3&!c3 # !B3&!A3&c3; Y4=B4&A4&c4 # B4&!A4&!c4 #!B4&A4&!c4 # !B4&!A4&c4; Y5=B5&A5&c5 # B5&!A5&!c5 #!B5&A5&!c5 # !B5&!A5&c5; Y6=B6&A6&c6 # B6&!A6&!c6 #!B6&A6&!c6 # !B6&!A6&c6; Y7=B7&A7&c7 # B7&!A7&!c7 #!B7&A7&!c7 # !B7&!A7&c7; c1=B0&A0 # B0&c0 # A0&c0; c2=B1&A1 # B1&c1 # A1&c1; c3=B2&A2 # B2&c2 # A2&c2; c4=B3&A3 # B3&c3 # A3&c3; c5=B4&A4 # B4&c4 # A4&c4; c6=B5&A5 # B5&c5 # A5&c5; c7=B6&A6 # B6&c6 # A6&c6; c8=B7&A7 # B7&c7 # A7&c7; } when alu_f==[1,0] then Y=B&A; when alu_f==[1,1] then { Y0=B0#A0; Y1=B1#A1; Y2=B2#A2; Y3=B3#A3; Y4=B4#A4; Y5=B5#A5; Y6=B6#A6; Y7=B7#A7; } when (alu_f==[0,0]) then carry= c8; when (alu_f==[0,1]) then carry=!c8; when [Y7..Y0]==^h00 then zero=1; END

2023-06-11 上传