Presentation is loading. Please wait.

Presentation is loading. Please wait.

FPGA设计.

Similar presentations


Presentation on theme: "FPGA设计."— Presentation transcript:

1 FPGA设计

2 内容 1FPGA设计流程 2设计举例 3FPGA设计基本原则 4其它

3 典型的FPGA设计流程 设计输入 前仿真(功能仿真) 综合(优化、综合、映射) 布局布线 后仿真(时序仿真) 生成下载文件,进行板级调试

4 FPGA设计的基本原则 系统原则 硬件原则 同步设计原则 面积和速度的平衡和互换

5 系统原则 原则: FPGA/CPLD的资源情况: 返回
  一般是由底层可编程硬件单元、BLOCK RAM资源、布线资源、可配置的IO单元、时钟资源等组成。                    返回    

6 可编程的硬件单元 底层的可编程硬件单元=FF+LUT  FF --触发器  LUT --查找表                   返回

7 时钟资源 锁相环(Phase-Locked Loop,PLL) 延迟锁定环(Delay-Locked Loop,DLL) 返回

8 硬件原则 1.评判一段HDL代码的优劣标准: 2.举例:比较Verilog和C语言的区别
  其描述并实现的硬件电路的性能(包括面  积和速度两个方面)。 2.举例:比较Verilog和C语言的区别 C: For(I=0;I<16;I++) { function(); } Verilog: reg [3:0]counter; rst_n or negedge clk) clk) begin begin if(!rst_n) case(counter) counter<=4’b0; ’b0000: else ’b0001: counter <= counter+1; …… end endcase end     

9 C: Verilog: if() … ) if() … else… else … 2)swithch(variable) ) case (var) { value1: … case value1 …break; value2: … case value2 … break; … … … … default: … } endcase 解决办法: 一:使用if() …;if() …;的结构描述出不带优先级的“平行”条件判断语句; 二:使用软件将优先级树优化掉                       返回

10 同步设计原则 异步电路特点: 1.电路的核心逻辑用组合逻辑电路实现。比 如异步的FIFO/RAM读写信号,地址译码 等电路;
2.电路的主要信号,输出信号等并不依赖于  任何一个时钟信号。不是由时钟信号驱动  FF产生; 3.异步时序电路的最大缺点是容易产生毛刺。 

11 同步时序电路的特点: 同步时序电路设计的几个问题: 1.电路的核心逻辑用各种各样的触发器实现
2.电路的主要信号、输出信号等都是由某个时  钟沿驱动触发器产生出来的; 3.同步时序电路可以很好的避免毛刺。 同步时序电路设计的几个问题: 1.是否同步时序电路一定比异步电路更多使用  逻辑资源? 2.如何实现同步时序电路的延时? 3.同步时序电路的时钟如何产生?                    返回     

12 面积与速度的平衡和互换原则 概念: 面积与速度的平衡: 面积与速度的互换: 面积:指一个设计消耗的FPGA/CPLD的逻辑 资源的数量
速度:指设计在芯片上稳定运行,所能够达到   的最高频率 面积与速度的平衡:    对面积和速度的要求,和产品的质量和 成本有直接关系。 面积与速度的互换:

13 速度的优势换面积的节约: 从理论上讲,一个设计如果时序余量较大,那么就能通过功能 模块的复用减少设计消耗的面积。 面积复制换速度的提高: 如果,一个设计的时序要求比较高,普通方法达不到设计频率, 那么一般可以通过将数据流串并转换,并行复制多个操作模块, 对整个设计采取“乒乓操作”和“串并转换”的思想进行运作,在 芯片输出模块再对数据进行“并串转换”。这样从宏观上看整个 芯片满足了处理速度的要求。

14                   返回

15 其它 阻塞赋值与非阻塞赋值的区别和用法 module non_block (a,c,clk); 非阻塞赋值 input a;
input clk; output c; reg b,c; clk) begin b<=a; c<=b;  end  endmodule

16

17 module non_block (a,c,clk); 阻塞赋值
  input a;   input clk; output c; reg b,c; clk) begin b=a; c=b; end endmodule

18

19 两种赋值方式的使用 规则: 1.在always块中,组合逻辑设计使用阻塞赋 值“=”。

20 module test(a,b,c,d,y); module test(a,b,c,d,y);
input a,b,c,d;  input a,b,c,d; output y;   output y; reg y,tmp1,tmp2; reg y,tmp1,tmp2; or b or c or d) or b or c or d or tmp1 or tmp2) begin  begin tmp1<=a & b; tmp1<=a & b; tmp2<=c & d; tmp2<=c & d; y <=tmp1 | tmp2; y <=tmp1 | tmp2; end  end endmodule endmodule                        返回

21 module test(d,clk,q3); 解决方法-:module test(d,clk,q3);
input d,clk;       input d,clk; output q3;       output q3; reg q1,q2,q3;       reg q1,q2,q3; clk) clk) begin        begin q1 = d;         q3 = q2; q2 = q1;          q2 = q1; q3 = q2;         q1 = d; end         end endmodule     endmodule

22 返回 解决二:module test(d,clk,q3); 解决三: module test(d,clk,q3);
input d,clk;           input d,clk; output q3;          output q3; reg q1,q2,q3;          reg q1,q2,q3; clk)         clk) q1 = d;            q3 = q2; clk) clk) q2 = q1;           q2 = q1; clk)         clk) q3 = q2;           q1 = d; endmodule          endmodule                       返回

23 module test() module test()
input a,b,clk,rst_n; input a,b,clk,rst_n; output q; output q; reg q; reg q; (negedge clk or negedge rst_n) (negedge clk or negedge rst_n) begin begin if(!rst_n) q <= 1’b0; if(!rst_n) q <= 1’b0; else begin else begin tmp = a & b; tmp <= a & b; q <= tmp; q = tmp; end end end end end module end module

24 谢谢大家!


Download ppt "FPGA设计."

Similar presentations


Ads by Google