FPGA设计基础第3章FPGA设计入门课件.ppt
《FPGA设计基础第3章FPGA设计入门课件.ppt》由会员分享,可在线阅读,更多相关《FPGA设计基础第3章FPGA设计入门课件.ppt(76页珍藏版)》请在三一办公上搜索。
1、第三章 FPGA设计入门,有效的建模风格是控制综合结果的最有力手段。绝大多数系统设计都是使用HDL来实现。利用Verilog HDL进行FPGA设计规则、方法和技巧。,Page 1,组合逻辑电路,是指数字电路在任何时刻的输出仅仅取决于该时刻数字电路的输入,而与电路原来的状态 无关。组合逻辑电路分类:门电路 编码器、译码器和选择器 数据缓冲器,时序逻辑电路,时序逻辑电路就是指数字电路在任何时刻的输出不仅 仅取决于该时刻数字电路的输入,还取决于电路原来 的状态。时钟:进程敏感信号同步与异步复位 同步复位:复位语句是在以时钟为进程中执行 异步复位:进程敏感信号包括时钟和复位信号 分类:触发器 计数器
2、:同步:在时钟下,各触发器状态同时变化 异步:上一位数据是下个触发器的时钟信号,3.1 系统的抽象层次与Verilog,一个系统可以在不同的抽象层次上进行描述,也可以从不同的描述域(行为结构物理)进行描述。1、系统描述的三个“域”行为域说明一个特定的系统完成什么功能 结构域说明不同的实体之间是如何连接的 物理域则说明如何构造出一个实际的器件,Page 3,3.1 系统的抽象层次与Verilog,Verilog可以在三个域、五个抽象层次上描述一个系统。行为模型-着重于描述系统的功能,忽略系统的实现(系统级或体系结构级,也可能是算法级)。结构模型-较为详细地至少描述到寄存器数据流的方式,大体的描述
3、到了系统的结构和实现(RTL/门级/开关级)。,Page 4,3.1 系统的抽象层次与Verilog,2、系统描述的五个层次 工程师可以在系统级、算法级、RTL(Register Transfer Level 寄存器传输)级、逻辑级和电路级五个层次上描述一个系统,其中系统级的抽象层次最高,而电路级的抽象层次最低。抽象层次越高,所包含的细节信息就越少,抽象层次越低,所包含的细节就越多。,Page 5,Page 6,3.1 系统的抽象层次与Verilog,module adder(a,b,c0,c,sum);input 3:0 a,b;input c0;output 3:0 sum;output
4、c;wire 4:0 mid_res;assign mid_res=a+b+c0;assign sum=mid_res3:0;assign c=mid_res4;endmodule,例如:行为级建模4bit全加器。因为在系统设计初期,人们更关心所设计系统的逻辑功能,还未关心系统的性能。行为级功能确认后,可进一步细化得到结构模型。,Page 7,3.1 系统的抽象层次与Verilog,行为级综合有时也称为高层次综合(highlevel synthesis),高层次综合工具对行为级描述电路的综合效果没有用RTL级描述的电路综合的效果好,故大部分的电路是在RTL级进行描述的。我们通常用 Verilo
5、g 在RTL级描述一个设计,借助于自动综合工具,设计人员可以将RTL级代码快速且便捷地变换成逻辑级描述。,Page 8,3.1 系统的抽象层次与Verilog,RTL级描述的典型模型,Page 9,3.1 系统的抽象层次与Verilog,对于有些特殊的电路,我们有时也采用“门级描述”来描述结构模型-即通过逻辑门及其互连线描述电路。在Verilog中可以通过三种实例化语句描述结构模型。Verilog內建的基本逻辑门 用户定义原语UPD Module实例语句(Book P86/87分别有RTL描述和门级描述例子),Page 10,3.2 用Verilog建立数字电路模型,设计的最终目标是将设计电路
6、映射到具体的物理器件上。Verilog功能强大,用途范围广泛,语句丰富,但其中只有部分子集描述的设计可以通过EDA工具综合成具体的电路-Verilog可综合子集。良好的建模风格是控制综合结果的最有力的手段。,Page 11,3.2.1 代码的书写风格,编写代码的目的是对系统进行精确的描述,进行人-机(人-人)交流1、完备清晰的版本信息2、简洁扼要的功能说明,端口说明、变量说明,注释信息3、规范的端口定义,端口、变量命名规则4、模块互连时采用“显式关联方式”,Page 12,3.2.2 可综合代码的编码风格,always(posedge clk)begin begin begin q1=d;q3
7、=q2;q1=d;q2=q1;q2=q1;q2=q1;q3=q2;q1=d;q3=q2;end end end/A 1/B/C,1、正确地理解和使用“阻塞/非阻塞”赋值,备注:综合结果见 P91、P92 图示。例3.2 见 ModelSim 例集,例3.1 三级移位寄存器的设计。,B、C:三移位寄存器,A:D触发器,Page 13,Page 14,3.2.2 可综合代码的编码风格,建议:在用always过程建立组合电路时,使用阻塞赋值(=),在用always过程描述时序电路时,使用非阻塞赋值语句(=)。小技巧:在用always过程建立组合电路时,所有的RHS变量都要加入到敏感变量表中。备注:理
8、解 Book P94,例3.3,Page 15,3.2.2 可综合代码的编码风格,2、组合电路设计,注意:在使用 always 过程描述组合电路时,要对每一种输入的组合,都必须有一个值与之对应,否则会导致锁存器产生(组合电路不建议使用锁存器)。,结构原语连续赋值语句always 语句,a可综合组合电路的三种描述形式,Page 16,3.2.2 可综合代码的编码风格,b 简单组合电路设计方法,1、定义入/出逻辑变量2、列真值表,写表达式,化简3、电路图设计4、实验验证,手工设计步骤,HDL设计步骤,1、定义入/出逻辑变量2、列真值表,写表达式3、Verilog 编码4、仿真验证5、综合(优化、电
9、路实现),Page 17,例3.7 半加器,3.2.2 可综合代码的编码风格,module HA(a,b,c,s);input a,b;output c,s;wire c,s;wire 1:0 adder;assign adder=a+b;assign s=adder0;assign c=adder1;endmodule,备注:多种描述方法描述同样功能。,Page 18,3.2.2 可综合代码的编码风格,例3.8 全加器,/实例化半加器,结构描述“全加器”module FA(a,b,c_i,s,c_o)input a,b,c_i;output s,c_o;wire c,s,c1;HA HA_1
10、(.a(a),.b(b),.c(c),.s(s);HA HA_2(.a(s),.b(c),.c(c1),.s(s);assign c_o=c|c1;endmodule,Page 19,3.2.2 可综合代码的编码风格,/根据功能描述“全加器”module FA(a,b,c_i,s,c_o);input a,b,c_i;output s,c_o;wire 1:0 full_adder;/2比特变量,高位为进位,低位为和。assign full_adder=a+b+c_i;assign s=full_adder0;assign c_o=full_adder1;endmodule,3.2.2 可综合
11、代码的编码风格,可以利用多个“1位全加器”构成多位的二进制加法器,即所谓的“行波加法器”。,Page 20,Page 21,3.2.2 可综合代码的编码风格,module adder_3(a,b,c0,s,cy);input 2:0 a,b;input c0;output 2:0 s;output cy;wire c1,c2;FA_1 FA1(.a(a0),.b(b0),.c_i(c0),.s(s0),.c_o(c1);FA_1 FA2(.a(a1),.b(b1),.c_i(c1),.s(s1),.c_o(c2);FA_1 FA3(.a(a2),.b(b2),.c_i(c2),.s(s2),.
12、c_o(cy);endmodule,实例化1位全加器,设计“3位全加器”,Page 22,3.2.2 可综合代码的编码风格,例3.10 多路选择器可以通过CASE结构与IF-THEN-ELSE结构实现。要注意的是:case 结构无优先级特征if else 结构隐含着优先级电路综合的结果有些差别。,module single_if(a,b,c,d,sel,z);input a,b,c,d;input 3:0 sel;output z;reg z;always(a or b or c or d or sel)begin if(sel3)z=d;else if(sel2)z=c;else if(se
13、l1)z=b;else if(sel0)z=a;else z=0;endendmodule,选择控制端sel3:0高位有高优先级,Page 23,module case1(a,b,c,d,sel,z);input a,b,c,d;input 1:0 sel;output z;reg z;always(a or b or c or d or sel)begin casex(sel)2b00:z=d;2b01:z=c;2b10:z=b;2b11:z=a;default:z=1b0;endcase endendmodule,选择控制端sel1:0无优先级,Page 24,Page 25,c 组合电路
14、设计中应注意的问题,3.2.2 可综合代码的编码风格,不要有逻辑反馈(不能产生组合环)在敏感变量表中列全所有的敏感信号(RHS中以及“条件”中的信号都要进入敏感信号表)避免设计中无意间产生锁存器(case 语句有 default,if 语句 else 末分支,EXP 3.13),Page 26,有组合环,Page 27,3.2.2 可综合代码的编码风格,3、三态总线接口电路的设计,三态总线接口电路主要应用于微机接口(使能时传送,禁能时高阻)。三态总线接口电路设计使用“连续赋值”(assign)语句,其中一个分支被赋值成高阻z状态。,Page 28,3.2.2 可综合代码的编码风格,单向三态总线
15、,assign data_to_bus=(bus_enable)?(core_log_to_bus):8hz;,Page 29,3.2.2 可综合代码的编码风格,双向三态总线,Page 30,module bi_dir_bus(rst_n,wr_clk,wr_en,rd_en,addr,data_to_from_bus);input rst_n;/复位信号;input wr_clk;/写数据时钟;input wr_en;/写使能;input rd_en;/读使能;input 1:0 addr;/地址;inout 7:0 data_to_from_bus;/双向数据总线;,reg 7:0 reg
16、1,reg2,reg3,reg4;wire 7:0 core_logic;assign data_to_from_bus=(rd_en)?core_logic:8hz;always(negedge rst_n or posedge wr_clk)if(!rst_n)reg1=8h 00;else if(wr_en,Page 31,./reg2,reg3 同样的处理.always(negedge rst_n or posedge wr_clk)if(!rst_n)reg4=8h 00;else if(wr_en endmodule,3.2.2 可综合代码的编码风格-双向三态总线,3.2.3 时序
17、电路的设计,1、时序电路的基本概念,时序电路的模型(通常)时序电路的输出不仅与当前的输入有关,而且与电路过去的状态也有关系。时序电路由存储元件(记忆功能,FF实现)和组合电路(用于完成运算)组成。FPGA中,一般使用D触发器作为存储元件。,备注:触发器-时钟沿工作,锁存器-时钟电平工作。,Page 32,Page 33,3.2.3 时序电路的设计,触发器的建立时间(tsu)、保持时间(th)tsu-触发器的时钟信号有效沿到来前,数据稳定 不变的时间。th-触发器的时钟信号有效沿到来以后,数据保持稳定不变的时间。,Page 34,3.2.3 时序电路的设计,同步电路/异步电路,如果时序电路中的所
18、有D触发器的时钟端(锁存器除外)都与同一个时钟相连接,则称为同步时序电路,否则就称为是异步时序电路。本课程只研究同步电路设计。同步电路设计相对简单,设计出的电路可靠性高。,Page 35,3.2.3 时序电路的设计,时钟树,在同步设计中,要求时钟信号必须在同一时间到达电路中每个寄存器的时钟输入端,而且时钟信号经过输入管脚到达触发器的路径延时很小。在FPGA中,给专用的I/O模块配置了速度非常快的时钟驱动缓存器,这些缓冲器驱动输入时钟信号到芯片内部的时钟树上。时钟树的结构像一个树,它的每个分支都驱动固定数目的触发器,每个分支都有相同的长度。时钟驱动能快速驱动整个时钟树,时钟信号延时最小,一致性最
19、好。,Page 36,3.2.3 时序电路的设计,时钟类型(四种类型),全局时钟-有专用的全局时钟管脚,直接连接到器件中的每个寄存器的时钟端,以提供最小的时钟信号延迟和时钟歪斜(skew)。门控时钟-由逻辑门和时钟进行逻辑操作后产生的时钟。设计不当的门控时钟往往容易产生毛刺,从而影响电路的可靠性。,Page 37,3.2.3 时序电路的设计,行波时钟-用一个D触发器的输出作另一个触发器的时钟输入。在数字电路设计中经常用到此种设计方案。要特别关注电路的时序,也是时序仿真的特别关照点。多级逻辑时钟-当产生门控时钟的组合逻辑超过一级门电路时,电路的可靠性变得很难控制,系统中避免采用。,Page 38
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 设计 基础 入门 课件
链接地址:https://www.31ppt.com/p-2166858.html