微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 问些简单的问题

问些简单的问题

时间:10-02 整理:3721RD 点击:
上次发了些问题,但由于自己的原因,所以没能表达明白。
那我重新说下。
我最近刚学verilog语言,作业要求做一个放快速度的数字时钟,我们实验用的芯片是ep1c6t114c8n。
现在有两种数码管,四联和二连的各一个。
我在做四联向2联进位时,发生了错误,即进位并没有安预定目标进一位,而是进了15位。
于是我认为是因为忘记设置同步进位了,但是设置完同步计数器后,却发现没有进位了。
但找不出代码什么错误。
请各位大侠一定要帮忙,原因肯定出在计数器上,显示部分没问题。
四联数码管的计数器代码分别如下
其中,秒个位与分个位显示于进位方式一致,秒十位和分十位进位方式一致。
秒个位:ov_in是进位输入,ov_out是进位输出
module count0(clk,ov_in,count,ov_out);
input  clk,ov_in;
output [3:0] count;
reg    [3:0] count;
output ov_out;
reg    ov_out;
always @(posedge clk)
   begin
           if(ov_in==1)
     begin
         count<=count+1'b1;
    end
         if(count==4'b1010)
              count<=4'b0000;
  end
always @(count)
     begin
            if(count==4'b1010)
                ov_out<=1'b1;
            else  
                ov_out<=1'b0;
            end
endmodule
秒十位:low用来表示低位显示为,ov_in是进位输入,ov_out是进位输出
module count6(clk,low,ov_in,count,ov_out);
input  ov_in;
input [3:0] low;
input clk;
output [3:0] count;
reg    [3:0] count,count1;
output ov_out;
reg    ov_out;
always @(posedge clk)
     begin
         if(ov_in==1)
    begin
        count1<=count1+1'b1;
        count<=count+1'b1;
  end
         if(count==4'b0110)
            count<=4'b0000;
         if((count1==4'b0101 && low==4'b1001))
   begin
           count1<=4'b0000;
   end
end
always @(count)
     begin
          if(count==4'b0110)
                ov_out<=1'b1;
          else  
                 ov_out<=1'b0;
          end
endmodule
分个位:同秒个位
分十位:同时个位

二联数码管计数器代码为
其中ov_in1,ov_in2,ov_in3,ov_in4,用来描述进位信号,即当进位全一时在开始计数,count_h4bit,count_l4bit为小时的个位十位。
module count(clk_8m,ov_in1,ov_in2,ov_in3,ov_in4,count_h4bit,count_l4bit);
input  ov_in1,ov_in2,ov_in3,ov_in4,clk_8m;
output [3:0]count_h4bit,count_l4bit;
reg    [3:0]count_h4bit,count_l4bit;
always @(posedge clk_8m)
          begin
                 if(ov_in1==1 && ov_in2==1 && ov_in3==1 && ov_in4==1 )
                      begin
                          count_l4bit<=count_l4bit+4'b0001;
                 if(count_l4bit==4'd10)
                        begin
                            count_l4bit<=0;
                            count_h4bit<=count_h4bit+4'b0001;
                 if(count_l4bit==4'b0100 & count_h4bit==4'b0010)
                         begin
                             count_h4bit<=0;
                             count_l4bit<=0;
end
end
end
end

endmodule
框图部分如下:(有点乱。)

你后仿真过吗? 没有详细看程序,但是感觉你程序写的不太好,没有层次感,我今晚看看方针测试一下



    用quartus2仿真后没什么问题。但实际走有问题,我很郁闷

并列if隐含了优先级关系,即最后一个if的优先级高。不知道你是否考虑到了。
写成if...else if...else if ...else的模式。
这样条件的优先级别你心中就有数了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top