跳转至

CPLD代码

  • 参考文档

    1. TD_User_Guide_V6.2.pdf
    2. SWUG106_HDL_Coding_Synthesis_User_Guide.pdf
    3. SWUG110_BitWizard_User_Guide.pdf
    4. SWUG200_Timing_Constraints_User_Guide.pdf
  • 注意事项

    1. 上述参考文档在TD菜单栏help里面或者安装根目录doc里面

1. 开漏输出

  • EF5可以图形界面设置OpenDrain

  • 其它型号目前只能代码实现
  • 例化: out_z.v
    // assign o_pin = i_sig ? 1'bz : 1'b0;
    // assign o_led[3:0] = r_cnt[23:20];
    out_z #(
        .WIDTH(4)
    ) u_out_z(
        .i_sig(r_cnt[23:20]),
        .o_pin(o_led[3:0])
    );   
    

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. 异步多值复位

  • 安路底层硬件不支持多值复位,如果复位需要多值,需要改成同步复位
    always @(posedge i_clk) begin // 正确写法, 复位是变量情况只能同步复位
    // always @(posedge i_clk or posedge i_rst) begin // 错误写法, 安路底层硬件不支持异步复位为多值
        if(i_rst)
            r_data[3:0] <= i_sig[3:0];
        else
            r_data[3:0] <= r_data[3:0] + 1'b1;
    end
    

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 加载时间

  1. 加载频率可以打到最高
  2. 加载位宽mspix4打到最高
    3和4影响上电运行后加载时间,均是倍数关系,
    x4比x1快四倍,22Mhz比2Mhz快11倍
  3. EF2/EF3无I2C硬核的器件如果需要JTAG保持IO,则位宽只能x1模式

8.2 未使用IO状态设置

  1. 未使用IO程序运行状态

8.3 保持IO开关

  1. FreezeIO开关,如果要StateHold IO必须打开

8.4 I2C硬核设置

  1. Bin文件生成开关
  2. 程序未运行时候iic引脚功能
  3. 程序运行时候iic引脚功能
配置项入口 参数截图