1、module dff_asyn(q,qn,d,clk,set,reset);always (posedge clk or negedge set or negedge reset)【例4.13】4位计数器的仿真代码timescale 1ns/1nsinclude “count4.v”module coun4_tp;reg clk,reset;wire3:0 out;parameter DELY=100;count4 mycount(out,reset,clk);always #(DELY/2) clk=clk;initialbegin clk=0;reset=0;#DELY reset=1;#
2、DELY reset=0;#(DELY*20) $finish;initial $monitor($time,”clk=%d reset=%d out=%d,clk,reset,out);【例4.14】带同步复位的4位模10BCD码计数器module count10(cout,qout,reset,clk);input reset,clk;output reg3:0 qout; if(reset) qout=0; else if(qout9) qout=qout+1; else qoutassign cout=(qout=9)?1:0;【例6.1】用case语句描述的4选1数据选择器modul
3、e mux4_1(out,in0,in1,in2,in3,se1);input in0,in1,in2,in3;input1:0 se1; output reg out;always (in0 or in1 or in2 or in3 or se1) case(se1) 2b00: out=in0; 2b01: out=in1; 2b10: out=in2; 2b11: out=in3; default:out=2box; endcase【例6.2】同步置数、同步清零的计数器module count(out,data,load,reset,clk);input load,clk,reset;
4、input7:0 data;output reg7: if(!reset) out=8h00; else if(load) out=data; else out=out+1;【例6.4】用initial过程语句对测试变量赋值timescale 1ns/1nsmodule test;reg a,b.c;initial begin a=0;b=1;c=0; #50 a=1;b=0; #50 a=0;c1; #50 b=1; #50 b=0; #50 $finish;【例6.5】用begin-end串行块产生信号波形timescale 10ns/1nsmodule wave1;parameter C
5、YCLE=10;reg wave; begin wave=0; #(CYCLE/2) wave=1; #(CYCLE/2) wave=0; #(CYCLE/2) $stop;initial $monitor($time,”wave=%b”,wave);【例6.15】模为60的8421BCD码加法计数器module count60(qout,cout,data,load,reset,clk); output cout; if(reset) qout else if(load) qout=data; else begin if(qout3:0=9) begin qout3:0 if (qout7:
6、4=5) qout7:4 else qout7:=qout7:4+1; end else qout3:=qout3:0+1;assign cout=(qout=8d59)?【例6.17】BCD码7段数码管译码器module decode4_7(a,b,c,d,e,f,g,D3,D2,D1,D0);input D3,D2,D1,D0;output reg a,b,c,d,e,f,g;always (*) case(D3,D2,D1,D0) 4d0:a,b,c,d,e,f,g=7b1111110; 4d1:a,b,c,d,e,f,g=7b0110000; 4d2:a,b,c,d,e,f,g=7b1
7、101101; 4d3:a,b,c,d,e,f,g=7b1111001; 4d4:a,b,c,d,e,f,g=7b0110011; 4d5:a,b,c,d,e,f,g=7b1011011; 4d6:a,b,c,d,e,f,g=7b1011111; 4d7:a,b,c,d,e,f,g=7b1110000; 4d8:a,b,c,d,e,f,g=7b1111111; 4d9:a,b,c,d,e,f,g=7b1111011; default: endcase【例6.18】用case语句描述的下降沿触发的JK触发器module jk_ff(clk,j,k,q);input clk,j,k; output
8、 reg q;always (negedge clk) case(j,k) 2b00:q=q; 2b01: 2b10: 2b11:=q;endcase例6.36 用if else 描述的模12分频器module fdivi12(teset,clkin,clkout,qout);input reset,clkin:output reg clkout;output reg4:always (posedge clkin) if(!reset) begin clkout qout=0; end eles begin if(qout=5) qoutclkout=clkout:例6.37 模12分频器re
9、set) qout11) qout+qout+1;reset) clkout else if(qout=11) clkout=1; else clkout例6.38.模12分频器assign clkout=(qout=11)?:0;例7.2 用case语句描述的4选1 muxmodule mux4_1b(out,in1,in2,in3,in4,s0,s1);input in1,in2,in3,in4,s0,s1;output reg out; case(s0,s1) 2b00:out=in1;b01:out=in2;b10:out=in3;b11:out=in4;out=2bx;例8.1 用状
10、态机设计模5计数器module fam(clk,clr,z,qout);input clk,clr; output reg z; output reg2:always (posedge clk or posedge clr)begin if(clr) qout else case(qout) 3b000:=3b001;b001:b010;b010:b011;b011:b100;b100:b000;always (qout)begin case(qout) z=1b1;b0;例8.2 用状态机设计模5计数器(单过程描述)。module fsm1(clk,clr,z,qout);begin qou
11、t例 8.3101序列检测器的描述(cs,ns,ol各用一个过程描述)module fsm1_set101(clk,clr,x,z);input clk,clr,x; reg10 state,next_state;parameter s0=2b00,s1=2b01,s2=2b11,s3=2b10;/*状态编码,采用格雷编码方式*/always (posedge clk or posedge clr)begin if(clr) state=s0; else state=next_state;always (state or x)begin case (state) s0:begin if(x)
12、next_state=s1; else next_state s1:=s2; s2:=s3; next_stateend casealways (state)begin case(state) s3=:z=1end module例8.4采用两个过程对序列检测器进行描述(cs+ns,ol双过程描述)module fsm2_set101(clk,clr,x,z); reg10 state;b01,s1=2=state;begin if(x) state else state state s3 :end module 例8.5 序列检测器(CS,NS+OL双过程描述)。module fsm3_seq
13、101(clk,clr,x,z); reg1:0 state,next_state;parameter S0=2b00,S1=2b01,S2=2b11,S3=2=S0;always (state or x) S0:begin if(x) begin next_state=S1; else begin next_state S1:=S2; S2:=S3; S3: begin next_state例8.6 序列检测器(CS+NS+OL单过程描述)。module fsm4_seq101(clk,clr,x,z);0 state; else case(state)begin if(x) begin s
14、tate else begin state begin state例8.71111序列检测器的Verilog描述(单过程描述CS+NS+OL)module fsm_seq1111(x,z,clk,reset);input x,clk,reset;output reg z;parameter s0=d0,s1=d1,s2=d2,s3=d3,s4=d4;begin if(reset) begin statez else casex(state)begin if(x=0) begin state z else begin state=b) begin n=a-b; m=4b0001; else begin mb0000; n=a;state=b) begin m=m+1;n=n-b;s2: begin result=m;yu=n;default:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2