已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章简单系统设计,VerilogHDL基本的硬件描述方式:1.结构描述2.数据流描述3.行为描述,2选1多路选择器元件图,2选1多路选择器逻辑电路图,2选1多路选择器设计,2选1数据选择器,modulemux2_1(a,b,s,y);inputa,b,s;/定义输入端口outputy;/定义输出端口assigny=(s=0)?a:b;endmodule,第2章简单系统设计,2.1组合逻辑电路设计2.2时序逻辑电路设计2.3双向电路和三态控制电路设计2.4有限状态机设计2.5数字系统仿真,2.1组合逻辑电路设计,2.1.1多路选择器的逻辑表达式描述,modulemux2_1(a,b,s,y);inputa,b,s;/定义输入端口outputy;/定义输出端口assigny=(aendmodule,多路选择器的门原语描述,modulemux2_1(a,b,s,y);inputa,b,s;/定义输入端口outputy;/定义输出端口wirens,as,bs;not(ns,s);and(as,a,ns);and(bs,b,s);or(y,as,bs);endmodule,多路选择器的条件语句描述,modulemux2_1(a,b,s,y);inputa,b,s;/定义输入端口outputy;/定义输出端口regy;always(a,b,s)beginif(!s)y=a;elsey=b;endendmodule,多路选择器的仿真输出,2.1.2VerilogHDL模块的模板,module();inputinput_port_list;outputoutput_port_list;wireresult_signal;assign=;always()begin/ifsentence/othersentenceend();gate_type_keyword();endmodule,2.1.3常用组合逻辑电路设计,一、全加器设计,半加器模块设计,modulehalf_adder(a,b,so,co);inputa,b;outputso,co;assignso=ab;assignco=aendmodule,全加器顶层设计,moduleadder_top(a,b,ci,so,co);inputa,b,ci;outputso,co;wirec1,c2;half_adderu1(.a(a),.b(b),.so(s1),.co(c1);half_adderu2(.a(s1),.b(ci),.so(so),.co(c2);assignco=c1|c2;endmodule,全加器仿真结果,使用行为描述的全加器,moduleadder(a,b,ci,so,co);parameterwidth=8;inputwidth1:0a;inputwidth1:0b;inputci;outputwidth-1:0so;outputco;wirewidth:0sum;assignsum=a+b+ci;assignso=sumwidth1:0;assignco=sumwidth;endmodule,全加器行为描述的综合结果,全加器行为描述的仿真结果,二、编译码器,1编码器(1)使用case语句程序是使用case语句进行描述的编码器的源程序。,使用分支语句的编码器,moduleencoder(a0,a1,a2,a3,y0,y1);inputa0,a1,a2,a3;outputy0,y1;wire3:0a;reg1:0y;assigna=a3,a2,a1,a0;assigny0=y0;assigny1=y1;always(a)begincase(a)4b0001:y=2b00;4b0010:y=2b01;4b0100:y=2b10;4b1000:y=2b11;default:y=2bxx;endcaseendendmodule,使用分支语句的编码器综合结果,使用分支语句的编码器仿真结果,使用条件语句的编码器,moduleencoder(a0,a1,a2,a3,y0,y1);inputa0,a1,a2,a3;outputy0,y1;reg1:0y;assigny0=y0;assigny1=y1;always(a0,a1,a2,a3)beginif(a0)y=2b00;elseif(a1)y=2b01;elseif(a2)y=2b10;elsey=2b11;endendmodule,使用条件语句的编码器综合结果,使用条件语句的编码器仿真结果,三、译码器设计,moduledecoder(a,y);input2:0a;output7:0y;reg7:0y;always(a)begincase(a)3b000:y=8b00000001;3b001:y=8b00000010;3b010:y=8b00000100;3b011:y=8b00001000;3b100:y=8b00010000;3b101:y=8b00100000;3b110:y=8b01000000;3b111:y=8b10000000;endcaseendendmodule,译码器仿真输出,2.2时序逻辑电路设计,2.2.1简单D触发器设计,moduled_flip_flop(d,ck,q);inputd,ck;outputq;regq;always(posedgeck)q=d;endmodule,1带有异步清零和异步置位的D触发器设计,moduled_flip_flop(aclr,aset,d,ck,q);inputaclr,aset,d,ck;outputq;regq;always(posedgeaclrorposedgeasetorposedgeck)beginif(aclr)q=1b0;elseif(aset)q=1b1;elseq=d;endendmodule,2带有同步清零和同步置位的D触发器设计,moduled_flip_flop(sclr,sset,d,ck,q);inputsclr,sset,d,ck;outputq;regq;always(posedgeck)beginif(sclr)q=1b0;elseif(sset)q=1b1;elseq=d;endendmodule,2.2.2D触发器VerilogHDL描述的语言现象说明,一、VerilogHDL语言中触发器的生成从D触发器程序中可以看到,VerilogHDL描述D触发器时,首先需要定义一个reg型的变量,而这个变量的名字可以是输出端口,也可以是内部信号。定义好这样一个变量后,再通过一个always语句块来描述电路的时序行为。,二、边沿敏感信号类型以及同步、异步操作VerilogHDL语言中使用posedge和negedge关键字来描述一个边沿敏感型信号,分别表示上升沿(positiveedge)和下降沿(negativeedge)。posedge和negedge关键字除了用于描述边沿敏感型信号以外,还可以用在异步事件的描述中,这时posedge一般表示一个异步事件在信号高电平时有效,而negedge则表示异步事件在信号低电平时有效。,2.2.3常用同步时序逻辑电路的设计,1数据锁存器设计,moduleDataLatch(Latch,DataIn,DataOut);parameterwidth=8;inputLatch;inputwidth-1:0DataIn;outputwidth-1:0DataOut;regwidth-1:0DataOut;always(Latch,DataIn)if(Latch)DataOut=DataIn;endmodule,2数据锁存器综合结果,W:CL118:C:ProgramsDataLatchDataLatch.v:11:4:11:5|LatchgeneratedfromalwaysblockforsignalDataOut7:0,probablycausedbyamissingassignmentinaniforcasestatement.,3数据寄存器设计,moduleDataRegister(nReset,Clock,DataIn,DataOut);parameterwidth=8;inputnReset;inputClock;inputwidth-1:0DataIn;outputwidth-1:0DataOut;regwidth-1:0DataOut;always(negedgenResetorposedgeClock)if(!nReset)DataOut=0;elseDataOut=DataIn;endmodule,数据寄存器综合结果,简单加法计数器设计,moduleCounter(nReset,Clock,Data);inputnReset;inputClock;output7:0Data;reg7:0Data;always(negedgenResetorposedgeClock)beginif(!nReset)Data=8h00;elseData=Data+1;endendmodule,简单加法计数器综合结果,简单加法计数器仿真结果,异步复位,具有同步复位的加法计数器设计,moduleCounter(nReset,Clock,Data);inputnReset;inputClock;output7:0Data;reg7:0Data;always(posedgeClock)beginif(!nReset)Data=8h00;elseData=Data+1;endendmodule,具有同步复位的加法计数器综合结果,具有同步复位的加法计数器仿真结果,同步复位,异步复位无效,具有异步复位和同步使能的加减计数器设计,moduleCounter(nReset,Enable,Direction,Clock,Data);inputnReset,Enable,Direction,Clock;output7:0Data;reg7:0Data;always(negedgenResetorposedgeClock)beginif(!nReset)Data=0;elsebeginif(Enable)beginif(Direction)Data=Data+1;elseData=Data-1;endendendendmodule,具有异步复位和同步使能的加减计数器综合结果,具有异步复位和同步使能的加减计数器仿真结果,同步使能,异步复位,计数方向控制,2.2.4异步时序逻辑电路,moduleAsynchronousSequentialCircuit(A,D,Clock,Q);inputA,D,Clock;outputQ;regQ1,Q2;assignQ=Q2;always(posedgeClock)Q1=(Q2|A);always(posedgeQ1)Q2=D;endmodule,简单异步时序逻辑电路综合结果,W:c:programsasynchronoussequentialcircuitasynchronoussequentialcircuit.v:9:2:9:7|NetQ1appearstobeaclocksourcewhichwasnotidentified.Assumingdefaultfrequency.,2.3双向电路和三态控制电路设计,2.3.1三态门设计,moduleTriGate(Enable,DataIn,DataOut);inputEnable;input7:0DataIn;output7:0DataOut;assignDataOut=Enable?DataIn:8bzzzz_zzzz;endmodule,三态门设计,三态门设计,一般地,可以将z赋给某一输出端口或变量来获得三态控制门电路,一个z表示一个逻辑位。在综合时z是一个不确定的值,不同的综合器可能会给出不同的结果,因而对于综合前的行为仿真结果与综合后的功能仿真结果也可能是不同的,有时虽然能通过综合,但却不能获得正确的时序仿真结果,所以建议尽可能不要将z用作比较值,或者用于表达式或操作数。无论是设计外围端口上的三态门还是设计器件内部的三态门,在VerilogHDL表达上都是一样的,在综合与仿真上也不会有问题。但如果最终实现的目标器件是FPGA/CPLD器件,是否能被适配进去,则必须根据具体器件系列来确定。,2.3.2双向端口设计,moduleBiDirPort(Control,DataIn,BiDirQ,TriStateQ);inputControl;inputDataIn;inoutBiDirQ;outputTriStateQ;assignTriStateQ=Control?1bz:BiDirQ;assignBiDirQ=Control?DataIn:1bz;endmodule,双向端口设计,双向端口设计,双向端口设计,用inout模式设计双向端口也必须考虑三态的使用,因为双向端口的设计与三态端口的设计十分相似,都必须考虑端口的三态控制。这是由于双向端口在完成输入功能时,必须使原来呈输出模式的端口呈高阻态,否则,待输入的外部数据势必会与端口处原有电平发生“线与”,导致无法将外部数据正确地读入,从而实现“双向”的功能。在端口BiDirQ履行输入功能时,将其设定为高阻态输出,使BiDirQ成为真正的双向端口。,2.3.3三态总线电路设计,moduleMultipleDriver(Enable,DataIn0,DataIn1,DataIn2,DataIn3,DataOut);input1:0Enable;inputDataIn0,DataIn1,DataIn2,DataIn3;outputDataOut;regDataOut;always(Enable,DataIn0,DataIn1,DataIn2,DataIn3)beginif(Enable=2b00)DataOut=DataIn0;elseDataOut=1bz;if(Enable=2b01)DataOut=DataIn1;elseDataOut=1bz;if(Enable=2b10)DataOut=DataIn2;elseDataOut=1bz;if(Enable=2b11)DataOut=DataIn3;elseDataOut=1bz;endendmodule,三态总线电路设计,三态总线电路设计,除了DataIn3外,其余3个1位输入端都悬空没能用上,显然是因为恰好将DataIn3安排作为always语句块中DataOut的最后一个激励信号的原因。,三态总线电路设计,moduleMultipleDriver(Enable,DataIn0,DataIn1,DataIn2,DataIn3,DataOut);input1:0Enable;inputDataIn0,DataIn1,DataIn2,DataIn3;outputDataOut;assignDataOut=(Enable=2b00)?DataIn0:1bz;assignDataOut=(Enable=2b01)?DataIn1:1bz;assignDataOut=(Enable=2b10)?DataIn2:1bz;assignDataOut=(Enable=2b11)?DataIn3:1bz;endmodule,三态总线电路设计,三态总线电路设计,由于在module模块中使用了4个并列的assign并行语句,因此能综合正确电路结构。对于同一信号有并行的4个赋值源,在实际电路上完全可能发生“线与”。,2.4有限状态机设计,时序机,两种类型的有限状态机,Mealy型有限状态机,Moore型有限状态机,时序机的描述方式,时序图状态转移表状态转移图算法状态机图,时序机的描述方式,时序图举例,静态随机存储器写周期时序图,状态转移图,FSM的状态转移图(STG,StateTransitionGraph)是一种有向图,图中带有标记的节点或顶点,并与时序机的状态一一对应。当系统处于弧线起点的状态时,用有向边或弧线表示在输入信号的作用下可能发生的状态转移。对于一个同步时序机的给定STG,设计的任务就是确定下一状态和输出逻辑。对于有效的STG而言,其每个顶点必须表示一个惟一的状态;每个弧线则表示在指定输入信号的作用下,从给定状态到下一个状态的转移,并且从一个节点出发的各弧线必须对应一个惟一的输入。,状态转移图设计举例,本例中一个串行发送的BCD码Bin被转换成一个余3码串行比特流Bout,给BCD码对应的十进制数加上3,并将其转换为等价的二进制数就得到了该十进制数的余3码。,BCD-余3码转换器状态转移图,BCD-余3码转换器程序(1),moduleBCD2Excess3(nReset,Clock,Bin,Bout);inputnReset;inputClock;inputBin;outputBout;regBout;parameterS0=7b0000001,S1=7b0000010,S2=7b0000100,S3=7b0001000,S4=7b0010000,S5=7b0100000,S6=7b1000000;reg6:0State;always(negedgenResetorposedgeClock)beginif(!nReset)Reset;elseDoFSM;end,taskReset;beginBout=1b0;State=S0;endendtask,BCD-余3码转换器程序(2),taskDoFSM;begincase(State)S0:beginif(Bin)beginBout=1b0;State=S2;endelsebeginBout=1b1;State=S1;endendS1:beginif(Bin)beginBout=1b0;State=S4;endelse,beginBout=1b1;State=S3;endendS2:beginBout=Bin;State=S4;endS3:beginBout=Bin;State=S5;endS4:beginif(Bin)beginBout=1b0;State=S6;endelsebegin,Bout=1b1;State=S5;endendS5:beginBout=Bin;State=S0;endS6:beginif(Bin=0)Bout=1b1;State=S0;enddefault:beginBout=1b0;State=S0;endendcaseendendtaskendmodule,BCD-余3码转换器综合结果,BCD-余3码转换器综合后的状态转移图,BCD-余3码转换器仿真结果,串行线码介绍,NRZ-Manchester串行线码转换器状态转移图,NRZ-Manchester串行线码转换器程序,moduleNRZ_To_Manchester(nReset,Clock,Bin,Bout);inputnReset;inputClock;inputBin;outputBout;regBo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 7017-2025电阻器非线性测量方法
- 妊娠期卒中患者并发症预防策略
- 妊娠期主动脉夹层术后再狭窄的防治策略
- 保育员卫生试题及答案
- 大数据驱动的重金属暴露预测分析
- 大数据赋能医疗资源优化配置
- 大数据在社区肥胖干预效果评估中的应用
- 多院区医疗数据隐私保护的管理策略
- 多胎妊娠合并贫血的纠正方案
- 2026年会计实务(应付账款管理)试题及答案
- 静脉采血不良事件分析与改进
- JJF 2216-2025电磁流量计在线校准规范
- 2024-2025学年广东省深圳市福田区六年级(上)期末数学试卷
- 发改价格〔2007〕670号建设工程监理与相关服务收费标准
- 道岔滚轮作用原理讲解信号设备检修作业课件
- 小学师徒结对师傅工作总结
- 廉洁征兵培训课件
- 农业机械行业调研报告
- 金融行业风险控制与投资策略研究
- 北京巿通州区2025届高二数学第一学期期末考试试题含解析
- 幼儿园大班语言活动《新年礼物》课件
评论
0/150
提交评论