关闭

关闭

关闭

封号提示

内容

首页 verilog_FPGA实例.pdf

verilog_FPGA实例.pdf

verilog_FPGA实例.pdf

上传者: tiebanliuchunrui 2014-02-25 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《verilog_FPGA实例pdf》,可适用于IT/计算机领域,主题内容包含交流QQ:一、组合逻辑实验实验X译码器程序实验二-十进制译码器实验BCD码七段数码管显示译码器实验-编码器实验-优先编码器实验十二进制编码器实验三选符等。

交流QQ:一、组合逻辑实验实验X译码器程序实验二-十进制译码器实验BCD码七段数码管显示译码器实验-编码器实验-优先编码器实验十二进制编码器实验三选一数据选择器实验半加器实验全加器实验半减器实验全减器实验多位数值比较器实验奇偶校验实验补码生成实验位硬件加法器的设计实验位并行乘法器实验七人表决器实验格雷码变换二、时序逻辑实验实验D触发器实验JK触发器实验四位移位寄存器实验异步计数器实验同步计数器实验可逆计数器实验步长可变的加减计数器实验含异步清和同步时钟使能的位加法计数器实验顺序脉冲发生器实验序列信号发生器实验用状态机实现串行数据检测器实验分频器实验Moore状态机实验Mealy状态机实验三层电梯实验性线反馈移位寄存器(LFSR)设计实验正负脉宽数控调制信号发生器三、存储器设计实验只读存储器(ROM)实验SRAM实验FIFO四、扩展接口实验实验流水灯实验VGA彩色信号显示控制器设计交流QQ:实验PS键盘接口实验实验PS鼠标接口实验五、综合实验实验函数发生器实验自动售货机实验移位相加位硬件乘法器电路设计一、组合逻辑实验实验X译码器程序Decoder:todecoderwithanenablecontmoduledecoder(y,en,a)output:yinputeninput:areg:yalways(enora)EN和A是敏感信号if(!en)如果使能信号为低无效y='belsecase(a)'b:y='b最低位为低'b:y='b'b:y='b'b:y='b'b:y='b'b:y='b'b:y='b'b:y='bdefault:y='bx否则为不确定信号endcaseendmodule实验二-十进制译码器Decoder:binarytodecimaldecoderwithanenablecontrolmodulebd(y,en,a)output:yinputeninput:areg:y交流QQ:always(enora)EN和A是敏感信号if(!en)如果使能信号为低无效y='belsebeginif(a>)y<=a这里完成了二进制到十进制的译码elsey<=aend为了方便在平台上进行观察验证这里把数据的个位和十位分别用个LED进行显示,均为二进制Endmodule实验BCD码七段数码管显示译码器moduledecode(decodeout,a)output:decodeoutinput:areg:decodeoutalways(a)begincase(a)用case语句进行译码abcdefg'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'h:decodeout='b'ha:decodeout='b'hb:decodeout='b'hc:decodeout='b'hd:decodeout='b'he:decodeout='b'hf:decodeout='bdefault:decodeout='bxendcaseendendmodule交流QQ:实验-编码器acodermodulecoder(dout,din)output:doutinput:dinreg:doutalways(din)case(din)'b:dout<='b'b:dout<='b'b:dout<='b'b:dout<='b'b:dout<='b'b:dout<='b'b:dout<='b'b:dout<='bdefault:dout<='bxendcaseendmodule实验-优先编码器moduleencoder(d,d,d,d,d,d,d,d,x,y,v)outputx,y,vinputd,d,d,d,d,d,d,dregx,y,valways(dordordordordordordord)if(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==){x,y,v}='belseif(d==)交流QQ:{x,y,v}='belse{x,y,v}='bxxxendmodule实验十二进制编码器decimaltobinaryencodermoduleencoder(y,a)output:yinput:ainput为十位:为个位reg:yalways(a)A是敏感信号beginif(a>)y<=a这里完成了十进制到二进制的编码elsey<=aend为了方便在平台上进行观察验证这里把数据的个位用个进制数据表示十位用bit进行显示endmodule实验三选一数据选择器modulemuxto(dout,a,b,c,sel)output:doutinput:a,b,cinput:selreg:doutRTLmodelingalways(aorborcorsel)case(sel)'b:dout<=a'b:dout<=b'b:dout<=cdefault:dout<='bxendcaseendmodule交流QQ:实验半加器数据流方式描述的位半加器modulehalfadder(sum,cout,a,b)inputa,boutputsum,coutassignsum=a^bassigncout=abcarryoutendmodule附录:各种不同的描述方式:调用门元件实现的位半加器modulehalfadd(a,b,sum,cout)inputa,boutputsum,coutand(cout,a,b)xor(sum,a,b)endmodule采用行为描述的位半加器modulehalfadd(a,b,sum,cout)inputa,boutputsum,coutregsum,coutalways(aorb)begincase({a,b})真值表描述'b:beginsum=cout=end'b:beginsum=cout=end'b:beginsum=cout=end'b:beginsum=cout=endendcaseendendmodule采用行为描述的位半加器modulehalfadd(a,b,sum,cout)inputa,boutputsum,coutregsum,coutalways(aorb)beginsum=a^bcout=abendendmodule交流QQ:实验全加器bitfulladder位全加器modulefulladd(a,b,cin,sum,cout)inputa,b,cinoutputsum,coutassign{cout,sum}=abcinendmodule附录:各种不同的描述方式实现的位全加器调用门元件实现的位全加器modulefulladd(a,b,cin,sum,cout)inputa,b,cinoutputsum,coutwires,m,m,mand(m,a,b),(m,b,cin),(m,a,cin)xor(s,a,b),(sum,s,cin)or(cout,m,m,m)endmodule数据流描述的位全加器modulefulladd(a,b,cin,sum,cout)inputa,b,cinoutputsum,coutassignsum=a^b^cinassigncout=(ab)|(bcin)|(cina)endmodule行为描述的位全加器modulefulladd(a,b,cin,sum,cout)inputa,b,cinoutputsum,coutregsum,cout在always块中被赋值的变量应定义为reg型regm,m,malways(aorborcin)beginsum=(a^b)^cinm=abm=bcinm=acincout=(m|m)|mendendmodule交流QQ:混合描述的位全加器modulefulladd(a,b,cin,sum,cout)inputa,b,cinoutputsum,coutregcout,m,m,m在always块中被赋值的变量应定义为reg型wiresxorx(s,a,b)调用门元件always(aorborcin)always块语句beginm=abm=bcinm=acincout=(m|m)|mendassignsum=s^cinassign持续赋值语句endmodule实验半减器modulehalfsub(diff,subout,x,y)outputdiff,suboutinputx,yregdiff,subout行为描述always(xory)case({x,y})'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=enddefault:begindiff=xsubout=xendendcaseendmodule实验全减器modulefullsub(diff,subout,x,y,subin)outputdiff,suboutinputx,y,subinregdiff,subout行为描述always(xoryorsubin)交流QQ:case({x,y,subin})'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=end'b:begindiff=subout=enddefault:begindiff=xsubout=xendendcaseendmodule实验多位数值比较器modulecomp(ABB,AEB,ASB,A,B,I,I,I)outputABB,AEB,ASBABB表示A>BAEB表示A=B,ASB表示A<Binput:A,BinputI,I,II表示上一级的A>BI表示上一级的A=B,I表示上一级的A<BregABB,AEB,ASB行为描述always(AorBorIorIorI)if(A>B){ABB,AEB,ASB}='belseif(A<B){ABB,AEB,ASB}='belseA=B,但是考虑到前一级的情况beginif(I)I表示上一级的A>B{ABB,AEB,ASB}='belseif(I){ABB,AEB,ASB}='bI表示上一级的A<Belse{ABB,AEB,ASB}='bendendmodule实验奇偶校验奇偶校验位产生器moduleparity(evenbit,oddbit,inputbus)outputevenbit,oddbitinput:inputbusassignoddbit=^inputbus产生奇校验位交流QQ:assignevenbit=~oddbit产生偶校验位endmodule实验补码生成modulecompo(dout,din)output:doutinput:dinreg:doutalways(din)if(din=='b)正数最高位为符号位说明是正数正数补码是其本身dout=dinelse负数dout={din,~din:'b}最高位符号位不变数据位加一构成其补码endmodule实验位硬件加法器的设计位硬件加法器moduleaddb(cout,sum,a,b,cin)output:sumoutputcoutinput:a,binputcinassign{cout,sum}=abcinendmodule实验位并行乘法器位并行乘法器modulemult(outcome,a,b)parametersize=inputsize:a,b两个操作数output*size:outcome结果assignoutcome=a*b乘法运算符endmodule实验七人表决器for语句描述的七人投票表决器modulevoter(pass,vote)交流QQ:outputpass通过为高电平否则为低电平input:vote个投票输入#通过为高否定为低reg:sumintegeriregpassalways(vote)beginsum=for(i=i<=i=i)for语句if(votei)sum=sumif(sum)pass=若超过人赞成则pass=elsepass=endendmodule实验格雷码变换moduleBINGARY(EN,DATAIN,DATAOUT)inputENinput:DATAINoutput:DATAOUTassignDATAOUT=(DATAIN^DATAIN)ENassignDATAOUT=(DATAIN^DATAIN)ENassignDATAOUT=(DATAIN^DATAIN)ENassignDATAOUT=DATAINENendmodule二、时序逻辑实验实验D触发器modulemyDFF(q,qn,d,clk,set,reset)inputd,clk,set,resetoutputq,qnregq,qnalways(posedgeclk)beginif(reset)beginq<=qn<=同步清高电平有效endelseif(set)beginq<=qn<=同步置高电平有效交流QQ:endelsebeginq<=dqn<=~dendendendmodule实验JK触发器带异步清、异步置的JK触发器moduleJKFF(CLK,J,K,Q,RS,SET)inputCLK,J,K,SET,RSoutputQregQalways(posedgeCLKornegedgeRSornegedgeSET)beginif(!RS)Q<='belseif(!SET)Q<='belsecase({J,K})'b:Q<=Q'b:Q<='b'b:Q<='b'b:Q<=~Qdefault:Q<='bxendcaseendendmodule实验四位移位寄存器位移位寄存器moduleshifter(din,clk,clr,dout)inputdin,clk,clroutput:doutreg:doutalways(posedgeclk)beginif(clr)dout<='b同步清高电平有效elsebegindout<=dout<<输出信号左移一位dout<=din输入信号补充到输出信号的最低位end交流QQ:endendmodule分频器部分获得便于试验观察的时钟信号moduleclkdiv(clkout,clkin)inputclkinoutputclkoutregclkoutreg:counter=parametercnt=MHzisthesysclk,=FAFalways(posedgeclkin)begincounter<=counterif(counter==cnt)beginclkout<=!clkoutcounter<=endendendmodule实验异步计数器行为描述方式实现的位异步计数器modulecounter(clk,clr,q,q,q,q)inputclk,clroutputq,q,q,qregq,q,q,qregqt,qt,qt,qtregqr,qr,qr,qralways(posedgeclkornegedgeclr)if(!clr)qr<=elseqr<=!qralways(posedgeqrornegedgeclr)if(!clr)qr<=elseqr<=!qralways(posedgeqrornegedgeclr)if(!clr)qr<=elseqr<=!qralways(posedgeqrornegedgeclr)交流QQ:if(!clr)qr<=elseqr<=!qrassign{q,q,q,q}={qr,qr,qr,qr}endmodule分频器部分获得便于试验观察的时钟信号moduleclkdiv(clkout,clkin)inputclkinoutputclkoutregclkoutreg:counter=parametercnt=MHzisthesysclk,=FAFalways(posedgeclkin)begincounter<=counterif(counter==cnt)beginclkout<=!clkoutcounter<=endendendmodule实验同步计数器VerilogHDL程序带异步清的同步计数器modulecounter(Q,CR,CLK)inputCLK,CRoutput:Qreg:Qalways(posedgeCLKornegedgeCR)beginif(!CR)Q<='belsebeginif(Q==)Q<=elseQ<=Qendendendmodule分频器部分获得便于试验观察的时钟信号moduleclkdiv(clkout,clkin)交流QQ:inputclkinoutputclkoutregclkoutreg:counter=parametercnt=MHzisthesysclk,=FAFalways(posedgeclkin)begincounter<=counterif(counter==cnt)beginclkout<=!clkoutcounter<=endendendmodule实验可逆计数器同步清零的可逆计数器modulecounter(Q,CLK,CR,UD)inputCLK,CR,UDoutput:Qreg:cntinitialbegincnt<='bendassignQ=cntalways(posedgeCLK)beginif(!CR)cnt<='b同步清低电平有效elsebeginif(UD)cnt=cnt加法计数elsecnt=cnt减法计数endendendmodule分频器部分获得便于试验观察的时钟信号moduleclkdiv(clkout,clkin)inputclkinoutputclkoutregclkout

职业精品

用户评论

0/200
    暂无评论

精彩专题

上传我的资料

热门资料

资料评价:

/12
禁止下载

意见
反馈

返回
顶部

Q