ok FPGA设计高级进阶(
2 目标目标 • 掌握FPGA的基本设计原则掌握FPGA的基本设计原则 • 乒乓结构、流水线设计乒乓结构、流水线设计 • 异步时钟域的处理异步时钟域的处理 • 状态机的设计状态机的设计 • 毛刺的消除毛刺的消除 • 掌握FPGA设计的注意事项掌握FPGA设计的注意事项 • 从文档到设计完成从文档到设计完成 • 从设计实例加深设计思想从设计实例加深设计思想 3 提纲提纲 • FPGA的基本设计原则FPGA的基本设计原则 • FPGA设计的注意事项FPGA设计的注意事项 • 设计实例设计实例 •交织器交织器 •数据适配器数据适配器 4 推荐书籍推荐书籍 •Verilog • Verilog数字系统设计教程Verilog数字系统设计教程 夏宇闻北京航天航空大学出版社 • 硬件描述语言Verilog硬件描述语言Verilog刘明业等译 清华大学出版社 •FPGA • 基于FPGA的系统设计(英文版)基于FPGA的系统设计(英文版) Wayne Wolf 机械工业出版社 • Altera FPGA/CPLD设计(高级篇)Altera FPGA/CPLD设计(高级篇) EDA先锋工作室 人民邮电出版社 •IC设计 • Reuse ology manual for system-on-a-chip designsReuse ology manual for system-on-a-chip designs 3rd ed. M ichael Keating, Pierre Bricaud. . • 片上系统片上系统:可重用设计方法学可重用设计方法学沈戈,等译电子工业出版社, 2004 • Writing testbenches : functional verification of HDL models / J anick Bergeron Writing testbenches : functional verification of HDL models / J anick Bergeron Boston : Kluwer Academic, c2000 5 推荐文章推荐文章 •http://www.sunburst- • Verilog Coding Styles For Improved Simulation Efficiency • State Machine Coding Styles for Synthesis • Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs • Synchronous Resets? Asynchronous Resets? I am so confused! • Nonblocking Assignments in Verilog Synthesis, Coding Styles That Kill! 6 FPGA设计的两条思路设计的两条思路 • 控制通路(上午) • 有限状态机的设计 • 异步时钟域的处理 • 数据通路(下午) • 关注算法到结构的映射 7 FPGA设计基本原则设计基本原则 8 目标目标 • 完成本单元的学习后你将会 • 加深FPGA设计常用的设计思想和技巧 • 了解为什么才用流水线设计 • 掌握处理异步时钟的方法 • 掌握状态机的设计 • 了解毛刺消除的方法 9 FPGA设计流程设计流程 综合综合 - Translate Design into Device Specific Primitives - Optimization to Meet Required Area always @ (state or in) begin next_state = A; next_out = 1’b0; case(state) A: begin if(inx) begin next_state = C; next_out = 1’b1; end else begin next_state = A; next_out = in; end B: ******** C: ******** default : begin next_state = A; next_out = 1’b0; end endcase end 58 One-hot Encode parameter A = 3 b001, B=3 b010,C = 3 b100; always @ (state or in) begin next_state = A; next_out = 1’b0; case(state) A: begin if(inx) begin next_state = C; next_out = 1’b1; end else begin next_state = A; next_out = in; end B: ******** C: ******** default : begin next_state = A; next_out = 1’b0; end endcase end 59 状态机的输出状态机的输出 always @ (posedgeclkor negedgerst) begin if(!rst) begin state = A; out=1’b0; end else begin state = next_state; out = next_out; end end 60 状态机的置位和复位状态机的置位和复位 • 异步置位和复位 –与时钟无关 –需要在敏感信号列表中加入触发条件? • 同步置位和复位 –只在时钟有效跳变沿到来时,才对状态机进 行置位或复位 –敏感信号列表中不能列出触发条件 61 异步置位和复位异步置位和复位 always @ (posedge clk or posedge rst or posedge set) begin if(rst) q=0; else if(set) q=1; else q=d; end always @ (posedge clk or negedge rst or negedge set) begin if(!rst) q=0; else if(!set) q=1; else q=d; end 62 同步置位和复位同步置位和复位 always @ (posedge clk) begin if(rst) q=0; else if(set) q=1; else q=d; end always @ (posedge clk) begin if(!rst) q=0; else if(!set) q=1; else q=d; end 63 Moore状态机的状态机的Verilog实现实现 `timescale 1ns/100ps module state4 (clock, reset, out); reset, clock; output [1: 0] out; reg [1: 0] out; parameter //状态变量枚举状态变量枚举 stateA = 4‘b0000, sta