常用Verilog代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

新建文本文档//与非门第一种写法modulenand_2(y,a,b);outputy;inputa,b;nand(y,a,b);endmodule//与非门第二种写法modulenand_2(y,a,b);outputy;inputa,b;regy;always@(a,b)begincase({a,b})2'b00:y=1;2'b01:y=1;2'b10:y=1;2'b11:y=0;default:y='bx;endcaseendendmodule//或非门第一种写法modulenor_2(y,a,b);outputy;inputa,b;nor(y,a,b);endmodule//或非门第二种写法modulenor_2(y,a,b);outputy;inputa,b;regy;always@(a,b)begincase({a,b})2'b00:y=1;2'b01:y=0;2'b10:y=0;2'b11:y=0;default:y='bx;endcaseendendmodule//异非门第一种写法modulexor_2(a,b,y);outputy;inputa,b;xor(y,a,b);endmodule//异非门第二种写法第1页新建文本文档modulexor_2(a,b,y);outputregy;inputa,b;always@(a,b)begincase({a,b})2'b00:y=0;2'b01:y=1;2'b10:y=1;2'b11:y=0;default:y='bx;endcaseendendmodule//三态门第一种写法moduletri_gate(datain,dataout,en);outputdataout;inputdatain,en;assigndataout=en?datain:'bz;endmodule//三态门第二种写法moduletri_gate(datain,dataout,en);outputregdataout;inputdatain,en;alwaysif(en)dataout=datain;elsedataout='bz;endmodule//单向总线缓冲器moduletri_buffer(dout,din,en);outputreg[7:0]dout;input[7:0]din;inputen;alwaysif(en)dout=din;elsedout='bz;endmodule//双向总线缓冲器moduletri_bibuffer(en,dr,a,b);inout[7:0]a,b;//双向数据端口inputen,dr;//使能端,数据方向控制端reg[7:0]a,b;always@(*)beginif(dr)beginif(en)beginb=a;endelsebeginb='bz;endendelse第2页新建文本文档beginif(en)begina=b;endelsebegina='bz;endendendendmodule//使用always过程语句描述的简单算术逻辑单元`defineadd3'd0;`defineminus3'd1;`defineband3'd2;`definebor3'd3;`definebnot3'd;modulealu(out,opcode,a,b);outputreg[7:0]out;input[2:0]opcode;input[7:0]a,b;always@(opcodeoraorb)begincase(opcode)`add:out=a+b;`minus:out=a-b;`band:out=a&b;`bor:out=a|b;`bnot:out=~a;default:out=8'hx;endcaseendendmodule//8线-3线编码器moduleencode8_3(i,y);input[7:0]i;outputreg[2:0]y;always@(i)begincase(i[7:0])8'b00000001:y[2:0]=3'b000;8'b00000010:y[2:0]=3'b001;8'b00000100:y[2:0]=3'b010;8'b00001000:y[2:0]=3'b011;8'b00010000:y[2:0]=3'b100;8'b00100000:y[2:0]=3'b101;8'b01000000:y[2:0]=3'b110;8'b10000000:y[2:0]=3'b111;default:y[2:0]=3'b000;endcaseendendmodule//3_8译码器moduledecoder3_8(a,y);第3页新建文本文档input[2:0]a;outputreg[7:0]y;always@(a)begincase(a[2:0])3'b000:y=8'b00000001;3'b001:y=8'b00000010;3'b010:y=8'b00000100;3'b011:y=8'b00001000;3'b100:y=8'b00010000;3'b101:y=8'b00100000;3'b110:y=8'b01000000;3'b111:y=8'b10000000;default:y=8'b00000001;endcaseendendmodule//流水灯moduleLED(clk,oLED);inputclk;//50MHzclockinputoutputreg[7:0]oLED;reg[31:0]cnt;reg[2:0]shift;always@(posedgeclk)beginif(cnt4000000)cnt=cnt+1;//LEDRUNSEVERY200MSelsebegincnt=0;shift=shift+1;if(shift=8)oLED=1shift;elseshift=0;endendendmodule//七段数码管moduleLED_SEG7(CLK,RSTn,SEG);inputCLK;inputRSTn;outputreg[6:0]SEG;reg[31:0]cnt;reg[3:0]i;parameterT200MS=32'd10_000_000;parameterSEG0=7'h3f,SEG1=7'h06,SEG2=7'h5b,SEG3=7'h4f,SEG4=7'h66,SEG5=7'h6d,SEG6=7'h7d,SEG7=7'h07,SEG8=7'h7f,SEG9=7'h6f,SEGA=7'h77,SEGB=7'h7c,第4页新建文本文档SEGC=7'h39,SEGD=7'h5e,SEGE=7'h79,SEGF=7'h71;always@(posedgeCLKornegedgeRSTn)if(!RSTn)begincnt='b0;i=0;endelseif(cnt==T200MS)begini=i+1;cnt='b0;endelseif(cnt=T200MS)cnt=cnt+1'b1;always@(i)if(!RSTn)SEG=~SEG0;elsecase(i)0:SEG=~SEG0;1:SEG=~SEG1;2:SEG=~SEG2;3:SEG=~SEG3;4:SEG=~SEG4;5:SEG=~SEG5;6:SEG=~SEG6;7:SEG=~SEG7;8:SEG=~SEG8;9:SEG=~SEG9;4'hA:SEG=~SEGA;4'hB:SEG=~SEGB;4'hC:SEG=~SEGC;4'hD:SEG=~SEGD;4'hE:SEG=~SEGE;4'hF:SEG=~SEGF;default:SEG=SEG0;endcaseendmodule//两位数码管+流水灯(在一位数码管的基础上加多一位数码管和流水灯)moduleLED_SEG7(CLK,RSTn,SEG,SEG_2nd,RUNLED);inputCLK;inputRSTn;outputreg[6:0]SEG;outputreg[6:0]SEG_2nd;output[7:0]RUNLED;reg[31:0]cnt;reg[6:0]i;reg[3:0]shiwei;reg[3:0]gewei;parameterT200MS=32'd10_000_000;第5页新建文本文档parameterSEG0=7'h3f,SEG1=7'h06,SEG2=7'h5b,SEG3=7'h4f,SEG4=7'h66,SEG5=7'h6d,SEG6=7'h7d,SEG7=7'h07,SEG8=7'h7f,SEG9=7'h6f,SEGA=7'h77,SEGB=7'h7c,SEGC=7'h39,SEGD=7'h5e,SEGE=7'h79,SEGF=7'h71;always@(posedgeCLKornegedgeRSTn)if(!RSTn)begincnt='b0;i=0;shiwei=0;gewei=0;endelseif(cnt==T200MS)begini=i+1;if(i==100)i=1'b0;cnt='b0;shiwei=i/10;gewei=i%10;endelseif(cnt=T200MS)cnt=cnt+1'b1;always@(RSTnorshiwei)if(!RSTn)SEG_2nd=SEG8;//~SEG8Means8,andSEGmeansturnoffLEDelsecase(shiwei)0:SEG_2nd=SEG8;1:SEG_2nd=~SEG1;2:SEG_2nd=~SEG2;3:SEG_2nd=~SEG3;4:SEG_2nd=~SEG4;5:SEG_2nd=~SEG5;6:SEG_2nd=~SEG6;7:SEG_2nd=~SEG7;8:SEG_2nd=~SEG8;9:SEG_2nd=~SEG9;default:SEG_2nd=SEG8;endcasealways@(RSTnorgewei)if(!RSTn)SEG=~SEG0;elsecase(gewei)0:SEG=~SEG0;1:SEG=~SEG1;2:SEG=~SEG2;第6页新建文本文档3:SEG=~SEG3;4:SEG=~SEG4;5:SEG=~SEG5;6:SEG=~SEG6;7:SEG=~SEG7;8:SEG=~SEG8;9:SEG=~SEG9;default:SEG=~SEG0;endcaseLEDU1(.clk(CLK),.oLED(RUNLED));endmodule//用case语句描述的4选1MUXmodulemux4(y,d0,d1,d2,d3,g,a);outputregy;//选择输出端inputd0,d1,d2,d3;//4个数据源inputg;//便能端input[1:0]a;//两位地址码always@(d0ord1ord2ord3oraorg)beginif(g==0)y=0;elsecase(a[1:0])2'b00:y=d0;2'b01:y=d1;2'b10:y=d2;2'b11:y=d3;default:y=0;endcaseendendmodule//代码2:调用门元件实现的4选1MUXmodulemux4(y,d0,d1,d2,d3,g,a);outputregy;//选择输出端inputd0,d1,d2,d3;//4个数据源inputg;//便能端input[1:0]a;//两位地址码wirenota1;wirenota0;wirex1;wirex2;wirex3;wirex4;not(nota1,a[1]);not(nota0,a[0]);第7页新建文本文档and(x1,d0,nota1,nota0);and(x2,d1,nota1,a[0]);and(x3,d2,a[1],nota0);and(x4,d3,a[1],a[0]);or(y1,x1,x2,x3,x

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功