这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 60的实现,不知道问题出现在哪里

共14条 1/2 1 2 跳转至

60的实现,不知道问题出现在哪里

工程师
2012-11-02 22:11:17     打赏
module shixian60(sys_clk,
                sys_rstn,
    sm_seg,
    sm_bit,
    );
//输入、输出信号
input           sys_clk;//全局时钟,50MHZ
input           sys_rstn;//复位信号,低电平有效
output  [7:0]   sm_seg;//数码管段码
output  [7:0]   sm_bit;//数码管位码
//寄存器定义
reg     [7:0]   sm_seg;//数码管段码输出寄存器
reg     [7:0]   sm_bit;//数码管位码输出寄存器
reg     [4:0]   dataout_buf;//数据输出寄存器
reg     [2:0]   disp_dat;//显示数据寄存器
reg     [35:0]  delay_cnt;//延时寄存器
reg     ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
     if(!sys_rstn)
      delay_cnt<=16'd0;
  else
      begin
       if(delay_cnt==36'd49_999_999_999)
    delay_cnt<=16'd0;
    else
        delay_cnt<=delay_cnt+1'b1;
   end
 end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
            begin
                ge<=4'd0;
   end
  else
      begin
   if(delay_cnt==26'd49_999_999)
       begin
     if(ge==4'd10)
         ge<=4'd0;
     else
         ge<=ge+1'b1;
       end
   end
 end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
            begin
                shi<=4'd0;
   end
  else
      begin
   if(delay_cnt==36'd49_999_999_999)
       begin
     if(shi==4'd6)
         shi<=4'd0;
     else
         shi<=shi+1'b1;
       end
   end
    end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
         disp_dat<=1'b0;
  else
      begin
       if(delay_cnt==16'd49_999)
        disp_dat<=disp_dat+1'b1;
    else
        disp_dat<=disp_dat;
   end
 end
 //----------
always@(disp_dat)
    begin
        case(disp_dat)
            1'b0:sm_bit=8'b1111_1110;
   1'b1:sm_bit=8'b1111_1101;
   default:sm_bit=8'b1111_1100;
  endcase
 end
//---------数码管动态显示位选-------------
always@(sm_bit)
    begin
     case(sm_bit)
      8'b1111_1110:dataout_buf=ge;
   8'b1111_1101:dataout_buf=shi;
   default:dataout_buf=8;
  endcase
 end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
    begin
     case(dataout_buf)
      4'h0:sm_seg=8'hc0;//'0'
   4'h1:sm_seg=8'hf9;//'1'
   4'h2:sm_seg=8'ha4;//'2'
   4'h3:sm_seg=8'hb0;//'3'
   4'h4:sm_seg=8'h99;//'4'
   4'h5:sm_seg=8'h92;//'5'
   4'h6:sm_seg=8'h82;//'6'
   4'h7:sm_seg=8'hf8;//'7'
   4'h8:sm_seg=8'h80;//'8'
   4'h9:sm_seg=8'h90;//'9'
   4'ha:sm_seg=8'h88;//'a'
   4'hb:sm_seg=8'h83;//'b'
   4'hc:sm_seg=8'hc6;//'c'
   4'hd:sm_seg=8'ha1;//'d'
   4'he:sm_seg=8'h86;//'e'
   4'hf:sm_seg=8'h8e;//'f'
   default:sm_seg=8'hc0;//'0'
  endcase
 end
endmodule
不知道错误在哪里,希望大神帮一下小弟



关键词: 实现     不知道     问题     出现     在哪里     begin    

工程师
2012-11-02 22:21:08     打赏
2楼
数据不会跑,考虑并行实现6进制跟10进制

高工
2012-11-03 00:05:50     打赏
3楼
你的ge和shi寄存器位宽定义的有问题吧!其他地方没细看!

专家
2012-11-03 10:32:46     打赏
4楼
仔细仔细检查代码!!

高工
2012-11-03 12:45:09     打赏
5楼
可以quartus II功能仿真看看先

专家
2012-11-04 09:03:41     打赏
6楼
看了一下,跟三楼的一样,你的个 十的位宽没定义好?

你定义的是 reg ge,shi;
结果下面使用的时候是:if(ge == 4'd10)   shi也是一样的,都是用的4位。

工程师
2012-11-04 09:30:20     打赏
7楼
修改过后还是不行,肯定还有其它问题

专家
2012-11-04 10:38:03     打赏
8楼

位宽的问题不止刚说的,你好好看看。


你这个是需要实现一个  一秒计数一次,循环计数60次?
如果是要实现这个功能,你思路有点误区。


院士
2012-11-04 12:30:26     打赏
9楼
好难啊~~

我还是下线去看书吧~~ 555 .....

工程师
2012-11-04 13:00:43     打赏
10楼
module shixian60(sys_clk,
                sys_rstn,
    sm_seg,
    sm_bit,
    );
//输入、输出信号
input           sys_clk;//全局时钟,50MHZ
input           sys_rstn;//复位信号,低电平有效
output  [7:0]   sm_seg;//数码管段码
output  [7:0]   sm_bit;//数码管位码
//寄存器定义
reg     [7:0]   sm_seg;//数码管段码输出寄存器
reg     [7:0]   sm_bit;//数码管位码输出寄存器
reg     [4:0]   dataout_buf;//数据输出寄存器
reg     [1:0]   disp_dat;//显示数据寄存器
reg     [27:0]  delay_cnt;//延时寄存器
reg     [3:0]   ge,shi;//
//------------------------设定扫描1KHZ------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
     if(!sys_rstn)
      delay_cnt<=28'd0;
  else
      begin
       if(delay_cnt==28'd49_999)
    delay_cnt<=28'd0;
    else
        delay_cnt<=delay_cnt+1'b1;
   end
 end
//--------------秒个位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
            begin
                ge<=4'd0;
   end
  else
      begin
   if(delay_cnt==28'd49_999_999)
       begin
     if(ge==4'd10)
         ge<=4'd0;
     else
         ge<=ge+1'b1;
       end
   end
 end
//--------------秒十位计时器计时------------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
            begin
                shi<=4'd0;
   end
  else
      begin
   if(delay_cnt==28'd499_999_999)
       begin
     if(shi==4'd6)
         shi<=4'd0;
     else
         shi<=shi+1'b1;
       end
   end
    end
//------动态扫描位扫描中间变量----------------------
always@(posedge sys_clk or negedge sys_rstn)
    begin
        if(!sys_rstn)
         disp_dat<=1'b0;
  else
      begin
       if(delay_cnt==28'd49_999)
        disp_dat<=disp_dat+1'b1;
    else
        disp_dat<=disp_dat;
   end
 end
 //----------
always@(disp_dat)
    begin
        case(disp_dat)
            1'b0:sm_bit=8'b1111_1110;
   1'b1:sm_bit=8'b1111_1101;
   default:sm_bit=8'b1111_1100;
  endcase
 end
//---------数码管动态显示位选-------------
always@(sm_bit)
    begin
     case(sm_bit)
      8'b1111_1110:dataout_buf=ge;
   8'b1111_1101:dataout_buf=shi;
   default:dataout_buf=8;
  endcase
 end
//-----------------将十进制数转换成BCD七段码---------
always@(dataout_buf)
    begin
     case(dataout_buf)
      4'h0:sm_seg=8'hc0;//'0'
   4'h1:sm_seg=8'hf9;//'1'
   4'h2:sm_seg=8'ha4;//'2'
   4'h3:sm_seg=8'hb0;//'3'
   4'h4:sm_seg=8'h99;//'4'
   4'h5:sm_seg=8'h92;//'5'
   4'h6:sm_seg=8'h82;//'6'
   4'h7:sm_seg=8'hf8;//'7'
   4'h8:sm_seg=8'h80;//'8'
   4'h9:sm_seg=8'h90;//'9'
   4'ha:sm_seg=8'h88;//'a'
   4'hb:sm_seg=8'h83;//'b'
   4'hc:sm_seg=8'hc6;//'c'
   4'hd:sm_seg=8'ha1;//'d'
   4'he:sm_seg=8'h86;//'e'
   4'hf:sm_seg=8'h8e;//'f'
   default:sm_seg=8'hc0;//'0'
  endcase
 end
endmodule
标记颜色的都是改过后的,我的思路是:个位每一秒记一次,十位是每十秒记一次,估计是always的使用方法不会用。好多细节的东西没有注意到

共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]