集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1542|回复: 0

这是一个基于FPGA的电子万年历设计,哪个高手进来帮下忙

[复制链接]
buluohan 发表于 2012-4-23 20:06:42 | 显示全部楼层 |阅读模式
用Xilinx ISE Design Suite 13.2, Verilog HDL语言 Nexys3开发板。现在只实现了电子钟的功能,怎么加年月日和小时啊
  1. module main(clk,sw,an,seg,second_0,second_1,minute_0,minute_1 );
  2.    input clk;
  3.         input[7:0]   sw;
  4.         output[3:0]  an;
  5.         output[7:0]  seg;
  6.         output [30:0] second_0;
  7.    output[3:0]  second_1;
  8.    output [3:0]  minute_0;
  9.    output[3:0]  minute_1;
  10.         reg[3:0] an;
  11.         reg[7:0] seg;
  12.         reg[30:0]second_0;
  13.         reg[3:0]second_1;
  14.         reg[3:0]minute_0;
  15.         reg[3:0]minute_1;
  16.         reg[20:0]cnt;
  17.         reg a,b,c,d;
  18.         reg [1:0]temp;
  19.         reg [3:0] second_t_1;
  20.         reg [3:0] minute_t_0;
  21.         reg [3:0] minute_t_1;
  22.         initial
  23.         begin
  24.          a=0;
  25.          temp=2'b0;
  26.          second_0[30:0]=31'b0;
  27.          second_1[3:0]=4'b0;
  28.          minute_0[3:0]=4'b0;
  29.          minute_1[3:0]=4'b0;
  30.         end
  31.        
  32.          
  33.         always@(posedge clk)
  34.    begin
  35.    if(cnt[19]==1'b1)
  36.         cnt<=21'b0;
  37.         else
  38.         cnt<=cnt+1'b1;  
  39.    end
  40.        
  41.           always@(posedge clk)
  42.    begin
  43.         if(sw[7:6]!=2'b1)
  44.         begin
  45.    if(second_0[30:27]>=4'b1010)
  46.         second_0<=31'b0;                  
  47.         else
  48.         second_0<=second_0+1'b1;
  49.         end
  50.         else
  51.         begin
  52.         if(sw[5:4]==2'b0)
  53.         second_0[30:27]<=sw[3:0];
  54.         else
  55.          second_0<=second_0;
  56.         end
  57.    end
  58.        
  59.        
  60.    
  61.         always@(posedge clk)
  62.          begin
  63.           if(sw[7:6]!=2'b1)
  64.           begin
  65.           if(second_0[30:27]==4'b1010)
  66.            second_1<=second_1+1'b1;               
  67.           if(second_1>=4'b0110)
  68.            second_1<=4'b0;
  69.                 end
  70.                 else
  71.                 begin
  72.                 if(sw[5:4]==2'b1)
  73.                 second_1<=sw[3:0];
  74.                 end
  75.          end
  76.        
  77.         always@(posedge clk)
  78.          begin
  79.          if(sw[7:6]!=2'b1)
  80.          begin
  81.          if(second_1==4'b0110)
  82.           minute_0<=minute_0+1'b1;                 
  83.          if(minute_0>=4'b1010)
  84.           minute_0<=4'b0000;
  85.           end
  86.           else
  87.           begin
  88.           if(sw[5:4]==2'b10)
  89.           minute_0<=sw[3:0];
  90.           end
  91.          end
  92.          
  93.          always@(posedge clk)
  94.          begin
  95.          if(sw[7:6]!=2'b1)
  96.          begin
  97.          if(minute_0==4'b1010)
  98.           minute_1<=minute_1+1'b1;                 
  99.          if(minute_1>=4'b0110)
  100.           minute_1<=4'b0000;
  101.          end
  102.          else
  103.          begin
  104.          if(sw[5:4]==2'b11)
  105.          minute_1<=sw[3:0];
  106.          end
  107.           
  108.          end

  109.     always@(posedge clk)
  110.           begin
  111.           case(sw[7:6])
  112.           2'b00:
  113.           begin
  114.           if(second_1==second_t_1)
  115.           a<=1;
  116.           else
  117.           a<=0;
  118.           if(minute_0==minute_t_0)
  119.           b<=1;
  120.           else
  121.           b<=0;
  122.           if(minute_1==minute_t_1)
  123.           c<=1;
  124.           else
  125.           c<=0;
  126.           d<=a&b&c;
  127.           if(cnt[18:17]==4'b0)
  128.           begin
  129.            if(sw[5]!=1||d!=1)
  130.             case(second_0[30:27])
  131.                    4'b0:  begin seg<=8'b11000000;  end
  132.               4'b1:  begin seg<=8'b11111001;  end
  133.                    4'b10:  begin seg<=8'b10100100;  end
  134.                    4'b11:  begin seg<=8'b10110000;  end
  135.                    4'b100:  begin seg<=8'b10011001;  end
  136.                    4'b101:  begin seg<=8'b10010010;  end
  137.                    4'b110:  begin seg<=8'b10000010;  end
  138.                    4'b111:  begin seg<=8'b11111000;  end
  139.                    4'b1000:  begin seg<=8'b10000000;  end
  140.                    4'b1001:  begin seg<=8'b10010000;  end
  141.                   endcase
  142.                   else
  143.                   seg<=8'b11111110;
  144.           an<=4'b1110;
  145.          end
  146.         if(cnt[18:17]==4'b01)
  147.          begin
  148.            if(sw[5]!=1||d!=1)
  149.            case(second_1)
  150.               4'b0:  begin  seg<=8'b11000000;  end
  151.               4'b1:  begin  seg<=8'b11111001;  end
  152.                    4'b10:  begin  seg<=8'b10100100;  end
  153.                    4'b11:  begin  seg<=8'b10110000;  end
  154.                    4'b100:  begin  seg<=8'b10011001;  end
  155.                    4'b101:  begin  seg<=8'b10010010;  end
  156.                    4'b110:  begin seg<=8'b10000010;  end
  157.                    4'b111:  begin  seg<=8'b11111000;   end
  158.                    4'b1000:  begin seg<=8'b10000000;  end
  159.                    4'b1001:  begin  seg<=8'b10010000;  end
  160.                 endcase
  161.                 else
  162.                  seg<=8'b11110111;
  163.           an<=4'b1101;
  164.          end
  165.          if(cnt[18:17]==4'b10)
  166.          begin
  167.            if(sw[5]!=1||d!=1)
  168.            case(minute_0)
  169.               4'b0:   begin  seg<=8'b11000000;  end
  170.               4'b1:   begin  seg<=8'b11111001;  end
  171.                    4'b10:  begin  seg<=8'b10100100;  end
  172.                    4'b11:  begin  seg<=8'b10110000;  end
  173.                    4'b100: begin  seg<=8'b10011001;  end
  174.                    4'b101: begin  seg<=8'b10010010;  end
  175.                    4'b110: begin seg<=8'b10000010;  end
  176.                    4'b111:  begin  seg<=8'b11111000;   end
  177.                    4'b1000:  begin seg<=8'b10000000;  end
  178.                    4'b1001:  begin  seg<=8'b10010000;  end
  179.            endcase
  180.                 else
  181.                 seg<=8'b11110111;
  182.           an<=4'b1011;
  183.          end
  184.          if(cnt[18:17]==4'b11)
  185.          begin
  186.          if(sw[5]!=1||d!=1)
  187.           case(minute_1)
  188.               4'b0:  begin  seg<=8'b11000000;  end
  189.               4'b1:  begin  seg<=8'b11111001;  end
  190.                    4'b10:  begin  seg<=8'b10100100;  end
  191.                    4'b11:  begin  seg<=8'b10110000;  end
  192.                    4'b100:  begin  seg<=8'b10011001;  end
  193.                    4'b101:  begin  seg<=8'b10010010;  end
  194.                    4'b110:  begin seg<=8'b10000010;  end
  195.                    4'b111:  begin  seg<=8'b11111000;   end
  196.                    4'b1000:  begin seg<=8'b10000000;  end
  197.                    4'b1001:  begin  seg<=8'b10010000;  end
  198.            endcase
  199.                 else
  200.                 seg<=8'b11111110;
  201.           an<=4'b0111;
  202.          end
  203.          end
  204.          2'b1:  begin//2
  205.                 
  206.                                
  207.                                   temp<=sw[5:4];
  208.                                   case(temp)
  209.                                   2'b0: begin //0
  210.                                                   an<=4'b1110;
  211.                                                   seg<=8'b10000001;
  212.                                        
  213.                                                  
  214.                       case(second_0[30:27])
  215.                           4'b0:  begin seg<=8'b11000000;  end
  216.                      4'b1:  begin seg<=8'b11111001;  end
  217.                           4'b10:  begin seg<=8'b10100100;  end
  218.                           4'b11:  begin seg<=8'b10110000;  end
  219.                           4'b100:  begin seg<=8'b10011001;  end
  220.                           4'b101:  begin seg<=8'b10010010;  end
  221.                           4'b110:  begin seg<=8'b10000010;  end
  222.                           4'b111:  begin seg<=8'b11111000;  end
  223.                           4'b1000:  begin seg<=8'b10000000;  end
  224.                           4'b1001:  begin seg<=8'b10010000;  end
  225.                           endcase
  226.                    
  227.                 
  228.                                         end//0
  229.                                   2'b1: begin
  230.                                         
  231.                                         an<=4'b1101;
  232.                                                    seg<=8'b10000001;
  233.                                    case(second_1)
  234.                           4'b0:  begin seg<=8'b11000000;  end
  235.                      4'b1:  begin seg<=8'b11111001;  end
  236.                           4'b10:  begin seg<=8'b10100100;  end
  237.                           4'b11:  begin seg<=8'b10110000;  end
  238.                           4'b100:  begin seg<=8'b10011001;  end
  239.                           4'b101:  begin seg<=8'b10010010;  end
  240.                           4'b110:  begin seg<=8'b10000010;  end
  241.                           4'b111:  begin seg<=8'b11111000;  end
  242.                           4'b1000:  begin seg<=8'b10000000;  end
  243.                           4'b1001:  begin seg<=8'b10010000;  end
  244.                           endcase
  245.                                                   end
  246.                                   2'b10:begin
  247.                                       //if(sw[4]==1) minute_0<=sw[3:0];
  248.                                       an<=4'b1011;
  249.                                                  seg<=8'b10000001;
  250.                                                     case(minute_0)
  251.                           4'b0:  begin seg<=8'b11000000;  end
  252.                      4'b1:  begin seg<=8'b11111001;  end
  253.                           4'b10:  begin seg<=8'b10100100;  end
  254.                           4'b11:  begin seg<=8'b10110000;  end
  255.                           4'b100:  begin seg<=8'b10011001;  end
  256.                           4'b101:  begin seg<=8'b10010010;  end
  257.                           4'b110:  begin seg<=8'b10000010;  end
  258.                           4'b111:  begin seg<=8'b11111000;  end
  259.                           4'b1000:  begin seg<=8'b10000000;  end
  260.                           4'b1001:  begin seg<=8'b10010000;  end
  261.                           endcase
  262.                                       end
  263.                                   2'b11:begin
  264.                                   
  265.                                   an<=4'b0111;
  266.                                    seg<=8'b10000001;
  267.                                            case(minute_1)
  268.                           4'b0:  begin seg<=8'b11000000;  end
  269.                      4'b1:  begin seg<=8'b11111001;  end
  270.                           4'b10:  begin seg<=8'b10100100;  end
  271.                           4'b11:  begin seg<=8'b10110000;  end
  272.                           4'b100:  begin seg<=8'b10011001;  end
  273.                           4'b101:  begin seg<=8'b10010010;  end
  274.                           4'b110:  begin seg<=8'b10000010;  end
  275.                           4'b111:  begin seg<=8'b11111000;  end
  276.                           4'b1000:  begin seg<=8'b10000000;  end
  277.                           4'b1001:  begin seg<=8'b10010000;  end
  278.                           endcase
  279.                                   end
  280.                                   endcase
  281.                                   end
  282.                
  283.                 2'b10:  begin
  284.                         temp<=sw[5:4];
  285.                                   case(temp)
  286.                                   2'b0: begin
  287.                                           an<=4'b0000;
  288.                                                     seg<=8'b10001001;
  289.                                         end
  290.                                   2'b1:begin
  291.                                          an<=4'b1101;
  292.                                                    seg<=8'b10000001;
  293.                                                         second_t_1<=sw[3:0];
  294.                                                          case(second_t_1)
  295.                            4'b0:  begin seg<=8'b11000000;  end
  296.                      4'b1:  begin seg<=8'b11111001;  end
  297.                           4'b10:  begin seg<=8'b10100100;  end
  298.                           4'b11:  begin seg<=8'b10110000;  end
  299.                           4'b100:  begin seg<=8'b10011001;  end
  300.                           4'b101:  begin seg<=8'b10010010;  end
  301.                           4'b110:  begin seg<=8'b10000010;  end
  302.                           4'b111:  begin seg<=8'b11111000;  end
  303.                           4'b1000:  begin seg<=8'b10000000;  end
  304.                           4'b1001:  begin seg<=8'b10010000;  end
  305.                           endcase
  306.                                                        
  307.                                        end
  308.                                                  
  309.                                         2'b10:begin
  310.                                               an<=4'b1011;
  311.                                                         seg<=8'b10000001;
  312.                                                         minute_t_0<=sw[3:0];
  313.                                                          case(minute_t_0)
  314.                           4'b0:  begin seg<=8'b11000000;  end
  315.                      4'b1:  begin seg<=8'b11111001;  end
  316.                           4'b10:  begin seg<=8'b10100100;  end
  317.                           4'b11:  begin seg<=8'b10110000;  end
  318.                           4'b100:  begin seg<=8'b10011001;  end
  319.                           4'b101:  begin seg<=8'b10010010;  end
  320.                           4'b110:  begin seg<=8'b10000010;  end
  321.                           4'b111:  begin seg<=8'b11111000;  end
  322.                           4'b1000:  begin seg<=8'b10000000;  end
  323.                           4'b1001:  begin seg<=8'b10010000;  end
  324.                           endcase
  325.                                           
  326.                                               end
  327.                                         3'b11:begin
  328.                                               an<=4'b0111;
  329.                                                         seg<=8'b10000001;
  330.                                                         minute_t_1<=sw[3:0];
  331.                                                          case(minute_t_1)
  332.                           4'b0:  begin seg<=8'b11000000;  end
  333.                      4'b1:  begin seg<=8'b11111001;  end
  334.                           4'b10:  begin seg<=8'b10100100;  end
  335.                           4'b11:  begin seg<=8'b10110000;  end
  336.                           4'b100:  begin seg<=8'b10011001;  end
  337.                           4'b101:  begin seg<=8'b10010010;  end
  338.                           4'b110:  begin seg<=8'b10000010;  end
  339.                           4'b111:  begin seg<=8'b11111000;  end
  340.                           4'b1000:  begin seg<=8'b10000000;  end
  341.                           4'b1001:  begin seg<=8'b10010000;  end
  342.                           endcase
  343.                                               end
  344.                                          endcase
  345.                           
  346.               end        //3       
  347.                                  
  348.          endcase
  349.          end
  350.          
  351.          
  352. endmodule

复制代码
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-6-28 22:21 , Processed in 0.071825 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表