CPLD代码¶
-
参考文档
- TD_User_Guide_V6.2.pdf
- SWUG106_HDL_Coding_Synthesis_User_Guide.pdf
- SWUG110_BitWizard_User_Guide.pdf
- SWUG200_Timing_Constraints_User_Guide.pdf
-
注意事项
- 上述参考文档在TD菜单栏help里面或者安装根目录doc里面
1. 开漏输出¶
- EF5可以图形界面设置OpenDrain

- 其它型号目前只能代码实现
- 例化: out_z.v
2. 外部单bit异步信号¶
- 进来打两拍同步再使用
module syn_pwm(
input i_rst,
input i_clk,
input i_pwm,
output o_syn_pwm
);
reg [1:0] r_pwm;
// 上电刚运行时刻两个时钟的输出电平, 关心则异步复位
always @(posedge i_clk or posedge i_rst) begin
if (i_rst)
r_pwm[1:0] <= 2'b00;
else
r_pwm[1:0] <= {r_pwm[0], i_pwm};
end
// 上电刚运行时刻两个时钟的输出电平, 不关心则直接打拍即可,无需复位
// always @(posedge i_clk) begin
// r_pwm[1:0] <= {r_pwm[0], i_pwm};
// end
assign o_syn_pwm = r_pwm[1]; //异步信号打两拍
endmodule
3. 异步多值复位¶
- 安路底层硬件不支持多值复位,如果复位需要多值,需要改成同步复位
4. 组合逻辑不建议锁存¶
// sel为0时,data保持原值,生成锁存器,安路不支持组合逻辑的锁存器
assign out = (sel) ? in : out;
// 组合逻辑修改为时序逻辑
always @(posedge i_clk) out <= (sel) ? in : out;
5. 引脚和时序约束¶
5.1 安路adc(引脚约束)是单独一个文件¶

5.2 时序约束必须加上(推荐SDC图形界面)¶
- 告诉工程板上晶振频率和pll使用情况,下图为最简单例子
- 不加时序约束 高低温/频率高于100Mhz/资源比较满 等等可能容易出现问题,工程本身时序问题也没法暴露
- 比如CLK 200Mhz,则周期5ns,工程有时序约束后知道这些信息,会尽可能让
寄存器1的D口输入数据到寄存器2的D口输入数据小于一个周期5ns,如果大于5ns,
则会发生时序违例,这个时候只能优化代码或者降频使用,因为内部延时太大了


create_clock -name i_clk -period 40 -waveform {0 20} [get_ports {i_clk}] # 板上晶振频率
derive_clocks # pll自动推断
6. pll需要修改为安路的¶
7. Hitless移植/StateHoldIO¶
- L 模块替换为EF5_LOGIC_IOTRIBUF原语

8. 工程设置¶
8.1 加载时间¶
- 加载频率可以打到最高
- 加载位宽mspix4打到最高
3和4影响上电运行后加载时间,均是倍数关系,
x4比x1快四倍,22Mhz比2Mhz快11倍 - EF2/EF3无I2C硬核的器件如果需要JTAG保持IO,则位宽只能x1模式
8.2 未使用IO状态设置¶
- 未使用IO程序运行状态
8.3 保持IO开关¶
- FreezeIO开关,如果要StateHold IO必须打开
8.4 I2C硬核设置¶
- Bin文件生成开关
- 程序未运行时候iic引脚功能
- 程序运行时候iic引脚功能
| 配置项入口 | 参数截图 |
|---|---|
![]() |
![]() |
![]() |
![]() |



