您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 定时器设计——Verilog代码及仿真实例
Verilog代码modulealarm_block(inputwirerst,clk,hrs,mins,alarm,outputwire[4:0]alarm_hr,outputwire[5:0]alarm_min);wirehour_s,min_s;alarm_countercounter1(rst,hour_s,min_s,clk,alarm_hr,alarm_min);state_machinealarm_state(rst,alarm,hrs,mins,clk,hour_s,min_s);endmodulemodulestate_machine(inputwirerst,alarm,hrs,mins,clk,outputreghrs_out,mins_out);parameterIDLE=2'b00,SET_HRS=2'b01,SET_MINS=2'b11;reg[1:0]state,next;always@(posedgeclkorposedgerst)if(rst)state=IDLE;elsestate=next;always@(alarmorhrsorminsorstate)case(state)IDLE:if(!alarm)beginnext=IDLE;hrs_out=0;mins_out=0;endelseif(alarm&hrs&!mins)beginnext=SET_HRS;hrs_out=1;mins_out=0;endelseif(alarm&!hrs&mins)beginnext=SET_MINS;hrs_out=0;mins_out=1;endSET_HRS:beginif(alarm&hrs&!mins)beginnext=SET_HRS;hrs_out=1;endelsebeginnext=IDLE;hrs_out=0;endmins_out=0;endSET_MINS:beginif(alarm&!hrs&mins)beginnext=SET_MINS;mins_out=1;endelsebeginnext=IDLE;mins_out=0;endhrs_out=0;enddefault:beginnext=2'bx;hrs_out=1'bx;mins_out=1'bx;endendcaseendmodulemodulealarm_counter(inputwirerst,hr_set,min_set,clk,outputreg[4:0]hrs,outputreg[5:0]mins);//setalarmminutesalways@(posedgeclkorposedgerst)if(rst)mins=0;elseif(min_set&!hr_set)if(mins==6'b111011)mins=6'b0;elsemins=mins+6'b000001;//setalarmhoursalways@(posedgeclkorposedgerst)if(rst)hrs=0;elseif(hr_set&!min_set)if(hrs==5'b10111)hrs=5'b0;elsehrs=hrs+5'b00001;endmodulemoduleAlarm_sm_2(inputwirerst,clk,compare_in,toggle_on,outputregring);parameterIDLE=1'b0,ACTI=1'b1;regstate,next;always@(posedgeclkorposedgerst)if(rst)state=IDLE;elsestate=next;always@(stateorcompare_inortoggle_on)case(state)IDLE:if(toggle_on&compare_in)beginnext=ACTI;ring=1;endelsebeginnext=IDLE;ring=0;endACTI:if(toggle_on)beginnext=ACTI;ring=1;endelsebeginnext=IDLE;ring=0;enddefault:beginnext=1'bx;ring=1'bx;endendcaseendmodulemodulecomparator(inputwire[4:0]alarm_hr,time_hr,inputwire[5:0]alarm_min,time_min,outputregcompare_out);always@(*)if((alarm_hr==time_hr)&&(alarm_min==time_min))compare_out=1;elsecompare_out=0;endmodulemoduleconvertor_ckt(input[4:0]hour,input[5:0]min,output[13:0]disp1,disp2);wire[13:0]disp1_0;segment_decodersegment_decoder_hr({1'b0,hour},disp1_0);segment_decodersegment_decoder_min(min,disp2);Hours_filterfilter(disp1_0,disp1);endmodulemodulesegment_decoder(inputwire[5:0]num,outputreg[13:0]disp);always@(num)case(num)6'b000000:disp=14'b0111111_0111111;6'b000001:disp=14'b0111111_0000110;6'b000010:disp=14'b0111111_1011011;6'b000011:disp=14'b0111111_1001111;6'b000100:disp=14'b0111111_1100110;6'b000101:disp=14'b0111111_1101101;6'b000110:disp=14'b0111111_1111101;6'b000111:disp=14'b0111111_0000111;6'b001000:disp=14'b0111111_1111111;6'b001001:disp=14'b0111111_1101111;6'b001010:disp=14'b0000110_0111111;6'b001011:disp=14'b0000110_0000110;6'b001100:disp=14'b0000110_1011011;6'b001101:disp=14'b0000110_1001111;6'b001110:disp=14'b0000110_1100110;6'b001111:disp=14'b0000110_1101101;6'b010000:disp=14'b0000110_1111101;6'b010001:disp=14'b0000110_0000111;6'b010010:disp=14'b0000110_1111111;6'b010011:disp=14'b0000110_1101111;6'b010100:disp=14'b1011011_0111111;6'b010101:disp=14'b1011011_0000110;6'b010110:disp=14'b1011011_1011011;6'b010111:disp=14'b1011011_1001111;6'b011000:disp=14'b1011011_1100110;6'b011001:disp=14'b1011011_1101101;6'b011010:disp=14'b1011011_1111101;6'b011011:disp=14'b1011011_0000111;6'b011100:disp=14'b1011011_1111111;6'b011101:disp=14'b1011011_1101111;6'b011110:disp=14'b1001111_0111111;6'b011111:disp=14'b1001111_0000110;6'b100000:disp=14'b1001111_1011011;6'b100001:disp=14'b1001111_1001111;6'b100010:disp=14'b1001111_1100110;6'b100011:disp=14'b1001111_1101101;6'b100100:disp=14'b1001111_1111101;6'b100101:disp=14'b1001111_0000111;6'b100110:disp=14'b1001111_1111111;6'b100111:disp=14'b1001111_1101111;6'b101000:disp=14'b1100110_0111111;6'b101001:disp=14'b1100110_0000110;6'b101010:disp=14'b1100110_1011011;6'b101011:disp=14'b1100110_1001111;6'b101100:disp=14'b1100110_1100110;6'b101101:disp=14'b1100110_1101101;6'b101110:disp=14'b1100110_1111101;6'b101111:disp=14'b1100110_0000111;6'b110000:disp=14'b1100110_1111111;6'b110001:disp=14'b1100110_1101111;6'b110010:disp=14'b1101101_0111111;6'b110011:disp=14'b1101101_0000110;6'b110100:disp=14'b1101101_1011011;6'b110101:disp=14'b1101101_1001111;6'b110110:disp=14'b1101101_1100110;6'b110111:disp=14'b1101101_1101101;6'b111000:disp=14'b1101101_1111101;6'b111001:disp=14'b1101101_0000111;6'b111010:disp=14'b1101101_1111111;6'b111011:disp=14'b1101101_1101111;default:disp=14'bx;endcaseendmodulemoduleHours_filter(inputwire[13:0]num,outputreg[13:0]num_disp);always@(*)if(num[13:7]==7'b011_1111)num_disp={7'b0,num[6:0]};elsenum_disp=num;endmodulemoduleMux(inputwirealarm,mode,inputwire[4:0]alarm_hr,time_hr,inputwire[5:0]alarm_min,time_min,outputreg[1:0]am_pm_display,outputreg[4:0]hours,outputreg[5:0]minutes);always@(*)begin//outputhoursandminuteshours=alarm?alarm_hr:time_hr;minutes=alarm?alarm_min:time_min;//12hourssystemor24hourssystemandsetam_pm_displayif(mode)case(hours)0:beginam_pm_display=2'b10;hours=5'b01100;end1:am_pm_disp
本文标题:定时器设计——Verilog代码及仿真实例
链接地址:https://www.777doc.com/doc-6154996 .html