您好,欢迎访问三七文档
3-8译码器moduledecoder_38(out,in);output[7:0]out;input[2:0]in;reg[7:0]out;always@(in)begincase(in)3'd0:out=8'b11111110;3'd1:out=8'b11111101;3'd2:out=8'b11111011;3'd3:out=8'b11110111;3'd4:out=8'b11101111;3'd5:out=8'b11011111;3'd6:out=8'b10111111;3'd7:out=8'b01111111;endcaseendendmodule3-8优先编码器moduleencoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);outputnone_on;output[2:0]outcode;inputa,b,c,d,e,f,g,h;reg[3:0]outtemp;assign{none_on,outcode}=outtemp;always@(aorborcordoreorforgorh)beginif(h)outtemp=4'b0111;elseif(g)outtemp=4'b0110;elseif(f)outtemp=4'b0101;elseif(e)outtemp=4'b0100;elseif(d)outtemp=4'b0011;elseif(c)outtemp=4'b0010;elseif(b)outtemp=4'b0001;elseif(a)outtemp=4'b0000;elseouttemp=4'b1000;end基本D触发器endmodulemoduleDFF(Q,D,CLK);outputQ;inputD,CLK;regQ;always@(posedgeCLK)beginQ=D;end带异步清0、异步置1的D触发器endmodulemoduleDFF1(q,qn,d,clk,set,reset);inputd,clk,set,reset;outputq,qn;regq,qn;always@(posedgeclkornegedgesetornegedgereset)beginif(!reset)beginq=0;//异步清0,低电平有效qn=1;endelseif(!set)beginq=1;//异步置1,低电平有效qn=0;endelsebeginq=d;qn=~d;endendmodule4位串并转换器moduleserial_pal(clk,reset,en,in,out);inputclk,reset,en,in;output[3:0]out;reg[3:0]out;always@(posedgeclk)beginif(reset)out=4'h0;elseif(en)out={out,in};//使用连接运算符endendmodule用for语句描述的七人投票表决器modulevoter7(pass,vote);outputpass;input[6:0]vote;reg[2:0]sum;integeri;regpass;always@(vote)beginsum=0;for(i=0;i=6;i=i+1)//for语句if(vote[i])sum=sum+1;if(sum[2])pass=1;//若超过4人赞成,则pass=1elsepass=0;endendmodule模为60的BCD码加法计数器modulecount60(qout,cout,data,load,cin,reset,clk);output[7:0]qout;outputcout;input[7:0]data;inputload,cin,clk,reset;reg[7:0]qout;always@(posedgeclk)//clk上升沿时刻计数beginif(reset)qout=0;//同步复位elseif(load)qout=data;//同步置数elseif(cin)beginif(qout[3:0]==9)//低位是否为9,是则beginqout[3:0]=0;//回0,并判断高位是否为5if(qout[7:4]==5)qout[7:4]=0;elseqout[7:4]=qout[7:4]+1;//高位不为5,则加1endelse//低位不为9,则加1qout[3:0]=qout[3:0]+1;endendassigncout=((qout==8'h59)&cin)?1:0;//产生进位输出信号endmoduleCase实现的4选1数据选择器modulemux4_1(out,in0,in1,in2,in3,sel);outputout;inputin0,in1,in2,in3;input[1:0]sel;regout;always@(in0orin1orin2orin3orsel)//敏感信号列表case(sel)2'b00:out=in0;2'b01:out=in1;2'b10:out=in2;2'b11:out=in3;default:out=2'bx;endcaseEndmodule8位计数器modulecounter8(out,cout,data,load,cin,clk);output[7:0]out;outputcout;input[7:0]data;inputload,cin,clk;reg[7:0]out;always@(posedgeclk)beginif(load)out=data;//同步预置数据elseout=out+1+cin;//加1计数endassigncout=&out&cin;//若out为8‘hFF,cin为1,则cout为1Endmodule比较器modulecompare(equal,a,b);input[1:0]a,b;outputequal;assignequal=(a==b)?1:0;endmodule4位二进制加减计数器modulecounter(rst,clk,q,m);inputrst,clk,m;output[3:0]q;reg[3:0]q;always@(posedgeclk)if(!rst)q=0;elseif(m==0)if(q==15)q=0;elseq=q+1;elseif(m==1)if(q==0)q=15;elseq=q-1;endmodule4位BCD码加减计数器modulecounter(rst,clk,q,m);inputrst,clk,m;output[3:0]q;reg[3:0]q;always@(posedgeclk)if(!rst)q=0;elseif(m==0)if(q==9)q=0;elseq=q+1;elseif(m==1)if(q==0)q=9;elseq=q-1;endmodule
本文标题:verilog程序
链接地址:https://www.777doc.com/doc-5277583 .html