hl1200aa 发表于 2009-9-21 20:18:23

刚刚做的加法计数器,骑兵,欢迎拍砖,狠狠的拍。

显示电路很简单,就是一个4位数码管加4个8550三极管,没有画图直接焊了。
顺便问下,减法计算器要怎么做?想来好久都想不出来。


// test3.v

/**************************************************************
** 模块名称:test3
**************************************************************/
module test3(
             clk48M, //48M时钟输入
             RSTn, //复位信号,高电平复位
             a, //key1
             b, //key2
             q, //led1
             q2, //led2
             DIGIT, //数码管输出
             SEG //数码管段位输出
             );

input clk48M;
input RSTn;
input a;
input b;

output DIGIT;
output SEG;
output q;
output q2;

reg count; //分频计数器
reg count2;//数码管扫描计数器
reg DIGIT;
reg SEG;
reg cach1;
reg cach2;
reg cach3;
reg cach4;

assign q = a & b;
assign q2 = a | b;


always@(posedge clk48M or negedge RSTn)
begin
    if(!RSTn) //异步复位
      begin
      cach1=4'b0000;
      cach2=4'b0000;
      cach3=4'b0000;
      cach4=4'b0000;

      DIGIT=8'hff;
      SEG=4'b1111;

      count=23'h0;
      count2=16'h0;
      //计数器赋初值
      end
      else
      begin
         fork
             count=count+1;
             count2=count2+1;
         join
         if(count==24'hff_ff_ff)
             begin
               cach1=cach1+1;
               if(cach1==4'h0a)
                   fork
                     cach1=4'h0;
                     cach2=cach2+1;
                   join
                   if(cach2==4'h0a)
                     fork
                     cach2=4'h0;
                     cach3=cach3+1;
                     join
                     if(cach3==4'h0a)
                     fork
                         cach3=4'h0;
                         cach4=cach4+1;
                     join
                     if(cach4==4'h0a)
                         cach4=4'h0;
             end
             if(count2==16'h00)
               begin
               SEG=4'b1111;                     //熄灯
               end
             else if(count2==16'h100)
               begin
               case(cach1)                                                //七段译码
                           4'h0:DIGIT = 8'hc0;                                //显示0
                           4'h1:DIGIT = 8'hf9;                                //显示1
                             4'h2:DIGIT = 8'ha4;                                //显示2
                             4'h3:DIGIT = 8'hb0;                                //显示3
                           4'h4:DIGIT = 8'h99;                                //显示4
                           4'h5:DIGIT = 8'h92;                                //显示5
                           4'h6:DIGIT = 8'h82;                                //显示6
                           4'h7:DIGIT = 8'hf8;                                //显示7
                           4'h8:DIGIT = 8'h80;                                //显示8
                           4'h9:DIGIT = 8'h90;                                //显示9
                              4'ha:DIGIT = 8'h88;                                //显示a
                           4'hb:DIGIT = 8'h83;                                //显示b
                           4'hc:DIGIT = 8'hc6;                                //显示c
                           4'hd:DIGIT = 8'ha1;                                //显示d
                           4'he:DIGIT = 8'h86;                                //显示e
                           4'hf:DIGIT = 8'h8e;                                //显示f
               endcase
               SEG=4'b1110;
               end
             else if(count2==16'h3fff)
               begin
               SEG=4'b1111;
               end
             else if(count2==16'h4100)
               begin
               case(cach2)                                                //七段译码
                           4'h0:DIGIT = 8'hc0;                                //显示0
                           4'h1:DIGIT = 8'hf9;                                //显示1
                             4'h2:DIGIT = 8'ha4;                                //显示2
                             4'h3:DIGIT = 8'hb0;                                //显示3
                           4'h4:DIGIT = 8'h99;                                //显示4
                           4'h5:DIGIT = 8'h92;                                //显示5
                           4'h6:DIGIT = 8'h82;                                //显示6
                           4'h7:DIGIT = 8'hf8;                                //显示7
                           4'h8:DIGIT = 8'h80;                                //显示8
                           4'h9:DIGIT = 8'h90;                                //显示9
                              4'ha:DIGIT = 8'h88;                                //显示a
                           4'hb:DIGIT = 8'h83;                                //显示b
                           4'hc:DIGIT = 8'hc6;                                //显示c
                           4'hd:DIGIT = 8'ha1;                                //显示d
                           4'he:DIGIT = 8'h86;                                //显示e
                           4'hf:DIGIT = 8'h8e;                                //显示f
               endcase
               SEG=4'b1101;
               end
             else if(count2==16'h7fff)
               begin
               SEG=4'b1111;
               end
             else if(count2==16'h8100)
               begin
               case(cach3)                                                //七段译码
                           4'h0:DIGIT = 8'hc0;                                //显示0
                           4'h1:DIGIT = 8'hf9;                                //显示1
                             4'h2:DIGIT = 8'ha4;                                //显示2
                             4'h3:DIGIT = 8'hb0;                                //显示3
                           4'h4:DIGIT = 8'h99;                                //显示4
                           4'h5:DIGIT = 8'h92;                                //显示5
                           4'h6:DIGIT = 8'h82;                                //显示6
                           4'h7:DIGIT = 8'hf8;                                //显示7
                           4'h8:DIGIT = 8'h80;                                //显示8
                           4'h9:DIGIT = 8'h90;                                //显示9
                              4'ha:DIGIT = 8'h88;                                //显示a
                           4'hb:DIGIT = 8'h83;                                //显示b
                           4'hc:DIGIT = 8'hc6;                                //显示c
                           4'hd:DIGIT = 8'ha1;                                //显示d
                           4'he:DIGIT = 8'h86;                                //显示e
                           4'hf:DIGIT = 8'h8e;                                //显示f
               endcase
               SEG=4'b1011;
               end
             else if(count2==16'hbfff)
               begin
               SEG=4'b1111;
               end
             else if(count2==16'hc100)
               begin
               case(cach4)                                                //七段译码
                           4'h0:DIGIT = 8'hc0;                                //显示0
                           4'h1:DIGIT = 8'hf9;                                //显示1
                             4'h2:DIGIT = 8'ha4;                                //显示2
                             4'h3:DIGIT = 8'hb0;                                //显示3
                           4'h4:DIGIT = 8'h99;                                //显示4
                           4'h5:DIGIT = 8'h92;                                //显示5
                           4'h6:DIGIT = 8'h82;                                //显示6
                           4'h7:DIGIT = 8'hf8;                                //显示7
                           4'h8:DIGIT = 8'h80;                                //显示8
                           4'h9:DIGIT = 8'h90;                                //显示9
                              4'ha:DIGIT = 8'h88;                                //显示a
                           4'hb:DIGIT = 8'h83;                                //显示b
                           4'hc:DIGIT = 8'hc6;                                //显示c
                           4'hd:DIGIT = 8'ha1;                                //显示d
                           4'he:DIGIT = 8'h86;                                //显示e
                           4'hf:DIGIT = 8'h8e;                                //显示f
               endcase
               SEG=4'b0111;
               end
      end
end

endmodule

Fourier00 发表于 2009-9-21 22:01:35

最好去看看代码规范啊,很多 ,摩托罗拉的就不错,看到这种代码风格很多人都不愿意看下去啊

leafing 发表于 2009-9-21 22:16:54

真值表,画出状态转移图,写状态机
页: [1]
查看完整版本: 刚刚做的加法计数器,骑兵,欢迎拍砖,狠狠的拍。