Download presentation
Presentation is loading. Please wait.
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
17
module non_block (a,c,clk); 阻塞赋值
input a; input clk; output c; reg b,c; clk) begin b=a; c=b; end endmodule
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
谢谢大家!
Similar presentations