ImageVerifierCode 换一换
格式:PPT , 页数:100 ,大小:3.87MB ,
文档编号:4312178      下载积分:28 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-4312178.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(数字系统设计与Verilog-HDL学习课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

数字系统设计与Verilog-HDL学习课件.ppt

1、 XXXXXXXX大学大学XXXXXX学院学院1第第9章章 Verilog数字电路设计实践数字电路设计实践 主要内容主要内容2基本组合电路的设计基本组合电路的设计1 1ABFCD门级结构描述门级结构描述 module gate1(F,A,B,C,D);input A,B,C,D;output F;nand(F1,A,B);/调用门元件调用门元件and(F2,B,C,D);or(F,F1,F2);endmodule数据流描述数据流描述module gate2(F,A,B,C,D);input A,B,C,D;output F;assign F=(A&B)|(B&C&D);/assign持续赋值持

2、续赋值endmodule行为描述行为描述module gate3(F,A,B,C,D);input A,B,C,D;output F;reg F;always(A or B or C or D)/过程赋值过程赋值beginF=(A&B)|(B&C&D);endendmodule3基本组合电路的设计基本组合电路的设计2 2用用bufif1关键字描述的三态门关键字描述的三态门 module tri_1(in,en,out);input in,en;output out;tri out;bufif1 b1(out,in,en);/注意三态门端口的排列顺序注意三态门端口的排列顺序endmodule4用

3、用assign语句描述三态门语句描述三态门 用用MAX+PLUS II进行编译,生成上图所示的模块符号。进行编译,生成上图所示的模块符号。5基本组合电路的设计基本组合电路的设计 33-to-8 decodermodule decoder_38(out,in);output7:0 out;input2:0 in;reg7:0 out;always(in)begin case(in)3d0:out=8b11111110;3d1:out=8b11111101;3d2:out=8b11111011;3d3:out=8b11110111;3d4:out=8b11101111;3d5:out=8b1101

4、1111;3d6:out=8b10111111;3d7:out=8b01111111;endcase endendmodule628-3的优先编码器的优先编码器 作为条件语句,作为条件语句,if-else语句的分支是有优先顺序的。利用语句的分支是有优先顺序的。利用if-else语语句的特点,可以很方便地实现优先编码器。句的特点,可以很方便地实现优先编码器。下面的例子是一个下面的例子是一个8-3优先编码器,该编码器输人为优先编码器,该编码器输人为a、b、c、d、e、f、g和和h,输人信号高电平有效,输人信号高电平有效,h的优先级最高。的优先级最高。7续续8符号符号 用用QuartusII软件对上

5、面的代码综合后,生成一个模块符号,再加上输入输出软件对上面的代码综合后,生成一个模块符号,再加上输入输出端口,即构成了如下图所示的优先编码器电路。端口,即构成了如下图所示的优先编码器电路。9对该编码器进行仿真,得到如下图所示的波形对该编码器进行仿真,得到如下图所示的波形10基本组合电路的设计基本组合电路的设计 4奇偶校验位产生器奇偶校验位产生器 module parity(even_bit,odd_bit,input_bus);output even_bit,odd_bit;input7:0 input_bus;assign odd_bit=input_bus;/产生奇校验位产生奇校验位ass

6、ign even_bit=odd_bit;/产生偶校验位产生偶校验位endmodule11基本组合电路的设计基本组合电路的设计 5用用if-else语句描述的语句描述的4选选1 MUXmodule mux4_1(out,in0,in1,in2,in3,sel);output out;input in0,in1,in2,in3;input1:0 sel;reg out;always(in0 or in1 or in2 or in3 or sel)beginif(sel=2b00)out=in0;else if(sel=2b01)out=in1;else if(sel=2b10)out=in2;e

7、lse out=in3;endendmodule127段段LED数码管译码电路数码管译码电路输出信号的输出信号的7位分别接如下图数码管的位分别接如下图数码管的7个段,高位在左,低个段,高位在左,低位在右。位在右。例如当输出为例如当输出为“1101101”时,数码管的时,数码管的7个段:个段:g、f、e、d、c、b、a分别接分别接1、1、0、1、1、0、1;接有高电平的段发亮,于;接有高电平的段发亮,于是数码管显示是数码管显示“5”。共阴数码管及其电路共阴数码管及其电路13源程序源程序1415组合逻辑设计要点组合逻辑设计要点 16组合逻辑设计要点组合逻辑设计要点 17结论结论组合电路的输入一旦有

8、变化,输出马上跟着变化组合电路的输入一旦有变化,输出马上跟着变化组合电路一般都用组合电路一般都用assign语句语句当用当用always描述纯组合电路时,括号内的敏感列描述纯组合电路时,括号内的敏感列表要把表要把所有的输入所有的输入列出来列出来18基本时序电路的设计基本时序电路的设计 1 D-FF designs(基本基本D触发器触发器)module DFF(Q,D,CLK);output Q;input D,CLK;reg Q;always(posedge CLK)beginQ=D;endendmodule19基本时序电路的设计基本时序电路的设计 2 带异步清带异步清0、异步置、异步置1的的

9、D触发器触发器module DFF1(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always(posedge clk or negedge set or negedge reset)beginif(!reset)beginq=0;/异步清异步清0,低电平有效,低电平有效qn=1;end else if(!set)beginq=1;/异步置异步置1,低电平有效,低电平有效qn=0;end else beginq=d;qn=d;end endendmodule20基本时序电路的设计基本时序电路的设计 3 带同步

10、清带同步清0、同步置、同步置1的的D触发器触发器module DFF2(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always(posedge clk)beginif(reset)begin q=0;qn=1;end/同步清同步清0,高电平有效,高电平有效else if(set)begin q=1;qn=0;end/同步置同步置1,高电平有效,高电平有效else begin q=d;qn=d;end endendmodule21数据锁存器数据锁存器1.数据锁存器数据锁存器a 下面用下面用assign语句描述

11、了一个电平敏感(触发)的数据锁存器,该锁存语句描述了一个电平敏感(触发)的数据锁存器,该锁存器只能锁存一位数据器只能锁存一位数据always(clk or d)begin if(clk)q=d;endassign用always置换:222.数据锁存器数据锁存器b下面代码描述的是一个带置位和复位端的电平敏感型的下面代码描述的是一个带置位和复位端的电平敏感型的1位数据锁存器。位数据锁存器。always(clk or reset or set or d)begin if(reset)q=0;else if(set)q=1;else if(clk)q=d;end assign用always置换:23基

12、本时序电路的设计基本时序电路的设计 4 8位数据锁存器位数据锁存器module latch_8(qout,data,clk);output7:0 qout;input7:0 data;input clk;reg7:0 qout;always(clk or data)beginif(clk)qout=data;endendmodule24数据寄存器数据寄存器数据锁存器和数据寄存器的区别:数据锁存器和数据寄存器的区别:从寄存数据的角度看,锁存器和寄存器的功能是相从寄存数据的角度看,锁存器和寄存器的功能是相同的同的锁存器一般是由电平信号来控制(电平触发),属锁存器一般是由电平信号来控制(电平触发),

13、属于电平敏感型于电平敏感型寄存器一般由同步时钟信号控制(边沿触发)寄存器一般由同步时钟信号控制(边沿触发)25基本时序电路的设计基本时序电路的设计5 58位数据寄存器位数据寄存器module reg8(out_data,in_data,clk,clr);output7:0 out_data;input7:0 in_data;input clk,clr;reg7:0 out_data;always(posedge clk or posedge clr)beginif(clr)out_data=0;else out_data=in_data;endendmodule26移位寄存器移位寄存器设计了一

14、个设计了一个8位移位寄存器。该寄存器有位移位寄存器。该寄存器有1个时钟输个时钟输入端、入端、1个同步清个同步清0端。信号串行输入,端。信号串行输入,8位并行输位并行输出,每个时钟周期内输出信号左移出,每个时钟周期内输出信号左移1位,同时将串位,同时将串行输入的行输入的1位补充到输出信号的最低位。位补充到输出信号的最低位。27续续28基本时序电路的设计基本时序电路的设计6 6 可变模加法可变模加法/减法计数器减法计数器module updown_count(d,clk,clear,load,up_down,qd);input7:0 d;input clk,clear,load,up_down;o

15、utput7:0 qd;reg7:0 cnt;assign qd=cnt;always (posedge clk)beginif(!clear)cnt=8h00;/同步清同步清0,低电平有效,低电平有效else if(load)cnt=d;/同步预置同步预置else if(up_down)cnt=cnt+1;/加法计数加法计数else cnt=cnt-1;/减法计数减法计数 endendmodule29结论结论时序电路的输出是由时钟控制的(电平控制时序电路的输出是由时钟控制的(电平控制、边沿控制)、边沿控制)边沿控制的时序电路一定要用边沿控制的时序电路一定要用always语句描语句描述述30结

16、论结论1组合电路的输入一旦有变化,输出马上跟着变化组合电路的输入一旦有变化,输出马上跟着变化组合电路一般都用组合电路一般都用assign语句语句当用当用always描述纯组合电路时,括号内的敏感列表里要把描述纯组合电路时,括号内的敏感列表里要把所有的输入列出来所有的输入列出来31结论结论2时序电路的输出是由时钟控制的(电平控制、边沿控时序电路的输出是由时钟控制的(电平控制、边沿控制)制)边沿控制方式一定要用边沿控制方式一定要用always语句描述语句描述电平控制可以使用电平控制可以使用assign语句,也可以使用语句,也可以使用always语语句。但使用句。但使用always语句是要注意在敏感

17、列表里要把语句是要注意在敏感列表里要把时时钟信号钟信号和所有的输入信号都列出来。和所有的输入信号都列出来。326.3 多层次结构电路的设计多层次结构电路的设计本节将介绍怎样进行这种多层次结构电路的设计。本节将介绍怎样进行这种多层次结构电路的设计。多层次结构电路的描述既可以采用纯文本方式,也多层次结构电路的描述既可以采用纯文本方式,也可以用图形和文本输入相结合的方式。可以用图形和文本输入相结合的方式。这里用这里用2个例子来说明这两种设计方式。个例子来说明这两种设计方式。33简单的 Verilog HDL 模块例:module trist1(out,in,enable);output out;in

18、put in,enable;mytri tri_inst(out,in,enable);endmodule module mytri(out,in,enable);output out;input in,enable;assign out=enable?In:bz;endmodule34简单的 Verilog HDL 模块上述程序例子通过另一种方法描述了一个三态门。上述程序例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块:模块在这个例子中存在着两个模块:模块trist1 trist1 调用模块调用模块 mytrimytri 的实例元的实例元件件 tri_insttri_inst。

19、模块模块 trist1 trist1 是上层模块。模块是上层模块。模块 mytrimytri 则被称为子模块。则被称为子模块。通过这种结构性模块构造可构成特大型模块。通过这种结构性模块构造可构成特大型模块。356.3.1 图形与文本混合设计图形与文本混合设计 设计一个设计一个8位累加器位累加器ACC,用于对输入的用于对输入的8位数据位数据进行累加。进行累加。首先进行层次设计。可以把累加器分为两个模块,首先进行层次设计。可以把累加器分为两个模块,一个是一个是8位全加器,一个是位全加器,一个是8位寄存器。位寄存器。全加器负责对不断输入的数据和进位进行累加,寄全加器负责对不断输入的数据和进位进行累加

20、,寄存器负责暂存累加和,并把累加和输出并反馈到累存器负责暂存累加和,并把累加和输出并反馈到累加器输入端,以进行下一次的累加。加器输入端,以进行下一次的累加。在划分好模块后,再把每个模块的端口和连接关系在划分好模块后,再把每个模块的端口和连接关系设计好,就可以分别设计各个功能模块。设计好,就可以分别设计各个功能模块。361、8位全加器位全加器372、8位寄存器位寄存器383顶层连接顶层连接对对8 8位全加器和位全加器和8 8位寄存器分别进行编译,生成两个位寄存器分别进行编译,生成两个模块符号,再把这两个模块进行连接,加上编人端模块符号,再把这两个模块进行连接,加上编人端和输出端,就构成了完整的累

21、加器电路。如下图所和输出端,就构成了完整的累加器电路。如下图所示。示。累加器顶层电路累加器顶层电路accout396.3.2 纯文本描述纯文本描述 该文本描述与上图电路连接的效果是完全相同的。该文本描述与上图电路连接的效果是完全相同的。需注意是在调用需注意是在调用add8和和reg8这两个模块时,要注意模这两个模块时,要注意模块端口信号的一一对应。块端口信号的一一对应。406.5 数字跑表(以下内容自学)数字跑表(以下内容自学)以数字跑表的设计为例,介绍利用以数字跑表的设计为例,介绍利用Verilog HDL设计数字电路的完整设计数字电路的完整过程。过程。41结构与功能结构与功能设计一个数字跑

22、表,该跑表具有复位、暂停、秒表计设计一个数字跑表,该跑表具有复位、暂停、秒表计时等功能。时等功能。按照自上而下的设计思路,首先对数字跑表进行结构按照自上而下的设计思路,首先对数字跑表进行结构和功能的划分。和功能的划分。下图是数字跑表的结构示意图。下图是数字跑表的结构示意图。42 该跑表有该跑表有3 3个输入端,分别为时钟输入个输入端,分别为时钟输入(CLK)(CLK)、复位复位(CLR)(CLR)和和启动暂停启动暂停(PAUSE)(PAUSE)。复位信号高电平有效,可对整个系统异步清复位信号高电平有效,可对整个系统异步清0 0;当启动暂当启动暂停键为低电平时跑表开始计时,为高电平时暂停,变低后

23、在停键为低电平时跑表开始计时,为高电平时暂停,变低后在原来的数值基础上再计数。这两个控制信号的作用如表原来的数值基础上再计数。这两个控制信号的作用如表7.17.1所示。所示。为了便于显示,百分秒、秒和分钟信号皆采用为了便于显示,百分秒、秒和分钟信号皆采用BCDBCD码计数方码计数方式,并直接输出到式,并直接输出到6 6个数码管显示出来。个数码管显示出来。43源程序源程序444546474849仿真及波形图仿真及波形图50下载及验证下载及验证516.6 八位数字频率计八位数字频率计6.6.1 功能要求功能要求 设计一个设计一个8位频率计,可以测量从位频率计,可以测量从1Hz到到 99 999 9

24、99Hz的信号频率,并将被测信号的频率的信号频率,并将被测信号的频率在在8个数码管上显示出来。个数码管上显示出来。6.6.2 工作原理工作原理 采用一个标准的基准时钟,在单位时间采用一个标准的基准时钟,在单位时间(如如1s)里对里对被测信号的脉冲数进行计数,即为信号的频率。被测信号的脉冲数进行计数,即为信号的频率。52测频原理测频原理 f=N/t f=N/t 其中:其中:NN脉冲计数值脉冲计数值 t t 计数时间计数时间 由上式得知:由上式得知:频率是在单位时间(频率是在单位时间(1 1秒)内所产生的脉冲个数。秒)内所产生的脉冲个数。频率在数学表达式中用频率在数学表达式中用“f”f”表示,其相

25、应的单位有:表示,其相应的单位有:HzHz(赫)、赫)、kHzkHz(千赫)、千赫)、MHzMHz(兆赫)、兆赫)、GHzGHz(吉赫)吉赫)其中其中 1GHz=1000MHz1GHz=1000MHz,1MHz=1000kHz1MHz=1000kHz,1kHz=1000Hz1kHz=1000Hz53频率计至少包括:频率计至少包括:计数模块(计数电路)计数模块(计数电路)计数时间限定模块(控制电路)计数时间限定模块(控制电路)显示模块(电路)显示模块(电路)548位数字频率计的顶层框图如图721所示,整个系统可分为三个模块:控制模块、计数测量模块和锁存器模块。频率计原理框图频率计原理框图1Hz

26、B C D码七段数码管译码器55 控制模块的几个控制信号的时序关系如图控制模块的几个控制信号的时序关系如图7.22所示。从所示。从图中可看出,计数使能信号图中可看出,计数使能信号COUNT_EN在在1s的高电平的高电平后,利用其反相值的上跳沿产生一个锁存信号后,利用其反相值的上跳沿产生一个锁存信号LOAD,随后产生清随后产生清0信号上跳沿信号上跳沿COUNT_CLR。566.6.3 设计实现设计实现控制模块计数模块32位锁存器被测输入信号基准时钟频率值(输出到数码管显示)571.Fre_ctrl控制模块控制模块 module fre_ctrl(clk,rst,count_en,count_cl

27、r,load);output count_en,count_clr,load;input clk,rst;reg count_en,load;always(posedge clk)begin if(rst)begin count_en=0;load=1;end else begin count_en=count_en;load=count_en;/load信号的产生信号的产生 end end assign count_clr=clk&load;/count_clr信号的产生信号的产生 endmodule fre_ctrl控制模块的作用前面已经讲过,它用于产生3个控制信号。此模块用Verilog

28、描述见下例。注意:注意:使用阻塞赋值使用阻塞赋值58仿真图仿真图阻塞赋值结果阻塞赋值结果非阻塞赋值结果非阻塞赋值结果592.Count10计数模块计数模块encount_en clrcount_clrclk signal(低四位)clkcout(其余)module count10(out,cout,en,clr,clk);output3:0 out;output cout;input en,clr,clk;reg3:0 out;always(posedge clk or posedge clr)begin if(clr)out=0;else if(en)begin if(out=9)out=0

29、;else out=out+1;end end assign cout=(out=9)&en)?1:0;/进位信号进位信号 endmodule count10是一个带有计数使能输入端(EN)和异步清0端(CLR)的模为10的计数模块。当EN为高电平时开始计数,为低电平时停止计数。CLR为异步消0端,当它为高电平时,计数器输出为0。603.32位锁存器模块位锁存器模块latch_32din32位out module latch_32(qo,din,load);output31:0 qo;input31:0 din;input load;reg load;reg31:0 qo;always(pos

30、edge load)begin qo=din;end endmodule616.6.4 仿真与下载仿真与下载 将上面将上面8位数字频率计的顶层原理图用位数字频率计的顶层原理图用QuartusII进行编译,并进行功能仿真,如图进行编译,并进行功能仿真,如图7.24所所示是其仿真波形的一部分。从仿真波形图可以看出,改变输入信号的频率,频率计都能准示是其仿真波形的一部分。从仿真波形图可以看出,改变输入信号的频率,频率计都能准确地测出其频率,如图中所示,分别为确地测出其频率,如图中所示,分别为20Hz、17Hz和和8Hz。62下载下载 也可将该设计下载到实验板中进行实际验证。器件选择也可将该设计下载到

31、实验板中进行实际验证。器件选择EPF10K10器件,管脚锁定如下:器件,管脚锁定如下:CLK接接clock1,待测的信号待测的信号SIGNAL接接clock0,QOL31.0接接PI047PIO16(即数码管即数码管8、7、6、5、4、3、2、1)。然后进行编译,生成可下裁的然后进行编译,生成可下裁的.sof文件,将该文件下载到芯片中,文件,将该文件下载到芯片中,实验板模式选择实验板模式选择NO.0,可实际验证该设计。不断变换输入信号可实际验证该设计。不断变换输入信号SIGNAL的频率观察数码管显示的数值与实验板上的频率标称值的频率观察数码管显示的数值与实验板上的频率标称值是否相符。是否相符。

32、63 选择数据类型时常犯的错误 在过程块中对变量赋值时,忘了把它定义为寄存器 类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器reg类型了 把模块的输入信号定义为寄存器reg类型了。这是经常犯的三个错误!小结小结64只有两种主要的信号类型:-寄存器类型:reg 在always 块中被赋值的信号,往往代表 触发器,但不一定是触发器。-连线类型:wire 用 assign 关键词指定的组合逻辑的信号 或连线65(也可以是组(也可以是组合逻辑信号)合逻辑信号)66aout2BUFFbINVout167dout2AND2i1clkout1D QDFF68var

33、iable型变量与nets型变量的根本区别是:variable型变量需要被明确地赋值,并且在被重新赋值前一直保持原值。variable型变量必须通过过程赋值语句赋值!不能通过assign语句赋值!在过程块内被赋值的每个信号必须定义成variable型!69注意区分注意区分reg n-1:0 a;/a为为n位寄存器位寄存器reg a n-1:0;/a为为n个一位寄存器的存储器个一位寄存器的存储器0n-10n-1n-2地址70标量、矢量标量、矢量 标量标量线宽为线宽为1的连线类,或位宽为的连线类,或位宽为1的寄存器类。的寄存器类。如:如:wire a,b;reg c,d,f;矢量矢量线宽大于线宽大

34、于1的连线类,或位宽大于的连线类,或位宽大于1的寄存器类。的寄存器类。如:如:wire 4:0 a,b;wire 0:3 a;reg 6:0 c,d,f;规定左边为最高位,右边为最低位。规定左边为最高位,右边为最低位。71Verilog 与 C 的主要不同点 Verilog 有许多语法规则与 C 语言一致。但与 C 语言有根本的区别:-并行性-块的含义:initial 块 和 always块-两种赋值语句:阻塞 赋值 “=”非阻塞赋值 “=”72 注1:“always”块语句常用于描述时序逻辑,也可描述组合逻辑。注2:“always”块可用多种手段来表达逻辑关系,如用if-else语句或cas

35、e语句。注3:“always”块语句与assign语句是并发执行的,assign语句一定要放在“always”块语句之外!73不同抽象级别不同抽象级别的的VerilogVerilog HDL HDL模型模型采用的描述采用的描述级别级别越越高高,设计设计越越容易容易,程序,程序代码代码越越简单简单;但耗用器件资源更多。对特定综合器,可能无法将某但耗用器件资源更多。对特定综合器,可能无法将某些抽象级别高的描述转化为电路!些抽象级别高的描述转化为电路!基于门级描述的硬件模型不仅可以仿真,而且可综合,基于门级描述的硬件模型不仅可以仿真,而且可综合,且系统且系统速度快速度快。所有所有VerilogVer

36、ilog HDL HDL编译软件只是支持该语言的一个编译软件只是支持该语言的一个子集子集。尽量采用编译软件支持的语句来描述设计;或多个软尽量采用编译软件支持的语句来描述设计;或多个软件配合使用。件配合使用。一般用一般用算法级算法级(写出逻辑表达式)或(写出逻辑表达式)或RTLRTL级级来描述逻来描述逻辑功能,尽量避免用门级描述,除非对系统速度要求辑功能,尽量避免用门级描述,除非对系统速度要求比较高的场合才采用门级描述。比较高的场合才采用门级描述。74不同抽象级别不同抽象级别的的VerilogVerilog HDL HDL模型模型(1 1)采用什么描述级别更合适?)采用什么描述级别更合适?系统级

37、描述太抽象,有时无法综合成具体的物理系统级描述太抽象,有时无法综合成具体的物理电路;门级描述要求根据逻辑功能画出逻辑电路电路;门级描述要求根据逻辑功能画出逻辑电路图,对于复杂的数字系统很难做到;图,对于复杂的数字系统很难做到;而算法级和而算法级和RTLRTL级描述级别适中,代码不是很复级描述级别适中,代码不是很复杂,且一般容易综合成具体的物理电路,故建议杂,且一般容易综合成具体的物理电路,故建议尽量采用算法级和尽量采用算法级和RTLRTL级级来描述。来描述。(2 2)怎样减少器件逻辑资源的耗用?)怎样减少器件逻辑资源的耗用?当器件容量有限时,为减少器件逻辑资源的耗用,当器件容量有限时,为减少器

38、件逻辑资源的耗用,建议少用建议少用if-elseif-else语句和语句和casecase语句,尽量直接使用逻语句,尽量直接使用逻辑表达式来描述系统的逻辑功能;辑表达式来描述系统的逻辑功能;或者用或者用casecase语句取代语句取代if-elseif-else语句。语句。75设计技巧设计技巧建议:建议:(1 1)在进行设计前,一定要仔细分析并熟悉所)在进行设计前,一定要仔细分析并熟悉所需设计电路或系统的整个工作过程;合理划分需设计电路或系统的整个工作过程;合理划分功能模块;并弄清每个模块输入和输出间的逻功能模块;并弄清每个模块输入和输出间的逻辑关系!辑关系!(2 2)在调试过程中,仔细阅读并

39、理解错误信息)在调试过程中,仔细阅读并理解错误信息,随时查阅教材和课件上有关语法,纠正语法,随时查阅教材和课件上有关语法,纠正语法错误。错误。76设计技巧设计技巧1 1一个变量不能在多个一个变量不能在多个alwaysalways块中被赋值!块中被赋值!这个问题一定要注意!否则编译不能通过。这个问题一定要注意!否则编译不能通过。例例 带异步清零、异步置位的D触发器注注:当某个变量有多个触发:当某个变量有多个触发条件时,最好将它们放在一条件时,最好将它们放在一个个alwaysalways块中,并用块中,并用if-elseif-else语句描述在不同触发条件下语句描述在不同触发条件下应执行的操作!应

40、执行的操作!正确正确的写法的写法77设计技巧设计技巧错误错误的写法的写法注注:这里:这里q q和和qnqn在两个在两个alwaysalways块中都被赋值!块中都被赋值!因为因为alwaysalways块之间是并块之间是并行操作,造成某些语句行操作,造成某些语句可能是互相矛盾的,所可能是互相矛盾的,所以编译器无所适从,只以编译器无所适从,只能报错!能报错!78设计技巧设计技巧2 2在在alwaysalways块语句中,当敏感信号为两个以上的时钟边沿触发块语句中,当敏感信号为两个以上的时钟边沿触发信号时,应注意不要使用多个信号时,应注意不要使用多个if if语句!以免因逻辑关系描述不语句!以免因

41、逻辑关系描述不清晰而导致编译错误。清晰而导致编译错误。例例 在数码管扫描显示电路中,设计一个中间变量,将脉冲信号start转变为电平信号enable。always(posedge start or posedge reset)if(reset)enable=0;if(start)enable=1;编译后出现了多条警告信息,指明在语句编译后出现了多条警告信息,指明在语句always(posedge start or posedge reset)中,变量中,变量enable不能不能被分配新的值!被分配新的值!错误错误的写法的写法79设计技巧设计技巧其仿真波形如下:其仿真波形如下:注注:由于在最初一

42、段,:由于在最初一段,startstart和和resetreset均为均为0 0,导,导致致enableenable为不定态,则为不定态,则scan_datascan_data开始加开始加1 1计数计数(正确情况应是在按下(正确情况应是在按下startstart时时scan_datascan_data才开才开始 加始 加 1 1计 数,因为此时计 数,因为此时 re s e t=0re s e t=0,导 致,导 致enable=1enable=1。当。当startstart和和resetreset同时为同时为1 1时,时,enable为为0。)80设计技巧设计技巧 语句语句“else ena

43、ble=1;”隐含了隐含了reset无效、且无效、且start有效的意思,有效的意思,因此与因此与else if(start)enable=1;效果一样!效果一样!正确的仿真波形如下:正确的仿真波形如下:always(posedge start or posedge reset)if(reset)enable=0;else enable=1;注注:可见在最初一段,当可见在最初一段,当start和和reset均为均为0时,时,enable被认为初值为被认为初值为0,则,则scan_data不计数,保持初值为不计数,保持初值为0;一旦;一旦start有效时,则有效时,则scan_data才开始加才

44、开始加1计数。当计数。当start和和reset同时为同时为1时,先执行的是时,先执行的是“if(reset)enable=0;”,故,故enable仍为仍为0,则,则scan_data保持原值保持原值0。正确正确的写法的写法81设计技巧设计技巧3 3当输出信号为总线信号时,一定要在当输出信号为总线信号时,一定要在I/OI/O说明中指明其位宽!否则说明中指明其位宽!否则在生成逻辑符号时,输出信号被误认为是单个信号,而没有标明位在生成逻辑符号时,输出信号被误认为是单个信号,而没有标明位宽,就不会当成总线信号。宽,就不会当成总线信号。例例 声明一个位宽为5的输出信号run_cnt,其类型为reg型

45、变量。错误错误的写法的写法output run_cnt;reg4:0run_cnt;正确正确的写法的写法output4:0 run_cnt;/这里一定要指明位宽!这里一定要指明位宽!reg4:0run_cnt;823.13 3.13 设计技巧设计技巧4 4当要用到计数器时,一定要根据计数最大值事先当要用到计数器时,一定要根据计数最大值事先计算好所需的位宽!若位宽不够,则计数器不能计计算好所需的位宽!若位宽不够,则计数器不能计到你设定的最大值,当该计数器用作分频时,则输到你设定的最大值,当该计数器用作分频时,则输出时钟始终为出时钟始终为0 0,所设计电路将不能按预定功能正,所设计电路将不能按预定

46、功能正常工作!常工作!例例如某同学在做乐曲演奏电路实验时,对乐曲演奏子模块的仿真完全正确,high3:0、mid3:0、low3:0都有输出,但下载时音名显示数码管始终为000。这主要是因为他在分频子模块中clk_4Hz的分频用计数器count_4位宽设置不够,则clk_4Hz输出为0,故音名显示计数器high3:0、mid3:0、low3:0输出始终为0,电路不能正常工作。83设计技巧设计技巧module f20MHz_to_6MHz_4Hz(clkin,clr,clk_6M,clk_4);input clkin,clr;outputclk_6M,clk_4;regclk_6M,clk_4;

47、reg2:0count_6M;reg15:0count_4;parametercount_6M_width=3;parametercount_4_width=5000000;always(posedge clkin or posedge clr)beginif(clr)begin count_4=0;clk_4=0;endelse begin if(count_4=count_4_width-1)/此条件不可能满足!此条件不可能满足!begin count_4=0;clk_4=1;end else begin count_4=count_4+1;clk_4=0;end end endendmo

48、dule223=8388608,故计数器位宽故计数器位宽应为应为23,应写为,应写为22:0。若写。若写成成15:0,216=65536,则则clk_4一直为一直为0,则下载后数码管显,则下载后数码管显示一直为示一直为0,扬声器一直是一,扬声器一直是一个音调个音调错误错误的写法的写法84设计技巧设计技巧5 5注意程序书写规范:语句应注意缩进注意程序书写规范:语句应注意缩进,if-elseif-else语句注意对齐,应添加必要的语句注意对齐,应添加必要的注释!注释!6 6注意区分阻塞赋值和非阻塞赋值的区注意区分阻塞赋值和非阻塞赋值的区别。别。在一个源程序中,要么都采用阻塞赋值在一个源程序中,要么

49、都采用阻塞赋值语句,要么都采用非阻塞赋值语句,最语句,要么都采用非阻塞赋值语句,最好不要混合使用,否则可能逻辑关系出好不要混合使用,否则可能逻辑关系出错!错!为易于综合,建议均采用非阻塞赋值语为易于综合,建议均采用非阻塞赋值语句!句!85作业作业86实实 验验 实验五(一)实验五(一)7段段BCD码译码器设计码译码器设计(1)实验目的:)实验目的:通过设计通过设计7 7段段BCDBCD码译码器学习码译码器学习组合组合电路的设电路的设计方法。计方法。(2)实验原理:)实验原理:7段数码是纯组合电路,通常的小规模专用段数码是纯组合电路,通常的小规模专用IC,如,如74或或4000系列的器件只能作十

50、进制系列的器件只能作十进制BCD码译码,然而数码译码,然而数字系统中的数据处理和运算都是字系统中的数据处理和运算都是2进制的,所以输出表达都是进制的,所以输出表达都是16进制的,为了满足进制的,为了满足16进制数的译码显示,最方便的方法就是利进制数的译码显示,最方便的方法就是利用译码程序在用译码程序在FPGA/CPLD中来实现。下面作为中来实现。下面作为7段段BCD码译码码译码器,输出信号器,输出信号LED7S的的7位分别接如图位分别接如图6-21数码管的数码管的7个段,高个段,高位在左,低位在右。例如当位在左,低位在右。例如当LED7S输出为输出为“1101101”时,数码时,数码管的管的7

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|