FPGA Coding Style - 代码优化.pptVIP

  • 4
  • 0
  • 约5.49千字
  • 约 28页
  • 2016-03-12 发布于安徽
  • 举报
FPGA Coding Style编码风格 -- 代码优化 编码风格 ◇ 你的HDL代码编写风格将影响综合结果 ◇ 清楚你的代码是“做什么的” ◇ 抛弃你的C语言习惯 ◇ 我们的目标:速度与面积 ◇ 一些基本原则 ◇ 几个实例 你的HDL编码风格将影响综合结果 assign c = n + n + 1; assign c = {n[6:0] ,1’b0} + 1’b1; always@(posedge clk or negedge rst_n) if(!rst_n) begin n2 = 8’b0; c = 8’b0; end else begin n2 = {n[6:0],1’b0}; c = n2 + 1’b1; end 描述2: 描述3: 描述1: 同样实现 c = 2*n + 1 清楚你的代码是“做什么的” always@(posedge clk or negedge rst_n) if(!rst_n) cnt = 10’d0; else begin cnt = cnt + 1’b1; if (cnt = 10’d639) cnt = 10’d0; if (fst) cnt = 10’d0; end always@(posedge clk or negedge rst_n) if(!rst_n) cnt = 10’d0; else begin cnt = cnt + 1’b1; if (cnt == 10’d639) cnt = 10’d0; if (fst) cnt = 10’d0; end 例1: 例2: 抛弃你的C语言习惯 always@(posedge clk or negedge rst_n) if(!rst_n) cnt = 10h0; else if (cnt = 10d639 || (sync == 1b0 sync_buf==1)) cnt = 10h0; else cnt = cnt + 1; 例2: 例1: assign data = (frame_head_valid) ? frame_head_reg : (rtl8305_mtxen_dly) ? rtl8305_mtxd_dly : (frame_tail_valid) ? frame_tail_reg : 8h00; 我们的目标:速度与面积 功能实现 稳定性 速度 面积 可测试性 可维护性 可读性 可复用性 可移植性 一些基本原则 ◇ 了解你的器件和综合实现工具 ◇ 可能的话,尽量让综合器自己推断逻辑 ◇ 用寄存器切割组合逻辑路径 ◇ 合理选用 CASE 和 IF/ELSE 语句 ◇ 避免 CASE 和 IF/ELSE 多层嵌套 ◇ 使用三段式状态机和ONE-HOT编码提升性能 实例:初始代码(同步复位) fmax = 180.213 MHz 初始代码 always@(posedge clk) if (!rst_n || !fst) cnt = 10’b0; else if (cnt = 10’d639) cnt = 10’b0; else cnt = cnt + 1’b1; 优化:修改计数器归零条件(同步复位) fmax = 201.776 MHz if (cnt = 10’d639) ↓ if (cnt == 10’d639) 优化:修改if-else嵌套为case结构(同步复位) fmax = 201.776 MHz if (cnt == 10’d608) … else if (cnt == 10’d618) … else if (c

文档评论(0)

1亿VIP精品文档

相关文档