CCIE 发表于 2010-6-26 01:27:47

在Max7000中用七段数码管计数,急!!

本帖最后由 fpgaw 于 2010-7-13 15:04 编辑

在Max700064slc44-10中,com1~4分别是数码管的开关,低电平有效
想让4个数码管从0000计数到7777,因为板上资源的限制,最高位是7不是9,
下面的代码在ModelSim中仿真结果正确,可是在板子上却跑不起来,
请大家帮忙分析一下,先谢谢了
module work(clk,com1,com2,com3,com4,a,b,c,d,e,f,g);
input clk;
output com1,com2,com3,com4,a,b,c,d,e,f,g;
reg com1,com2,com3,com4,a,b,c,d,e,f,g;
reg switch;
reg count1,count2,count3,count4;

initial
begin
com1=1;
com2=1;
com3=1;
com4=1;
a=0;
b=0;
c=0;
d=0;
e=0;
f=0;
g=0;
switch=2'b00;
count1=3'b000;
count2=3'b001;
count3=3'b010;
count4=3'b011;
end

always @ (posedge clk)

   switch=switch+1;



always @ (switch)
   begin
   case(switch)
   2'b00: begin com1=0;com2=1;com3=1;com4=1;end
   2'b01: begin com2=0;com1=1;com3=1;com4=1;end
   2'b10: begin com3=0;com1=1;com2=1;com4=1;end
   2'b11: begin com4=0;com1=1;com2=1;com3=1;end
   endcase
   end

always @ (com1 or com2 or com3 or com4)
   begin
   
    if(com1==0)
   case(count1)
    3'b000: {a,b,c,d,e,f,g}=7'b1111110;
    3'b001: {a,b,c,d,e,f,g}=7'b0110000;
    3'b010: {a,b,c,d,e,f,g}=7'b1101101;
    3'b011: {a,b,c,d,e,f,g}=7'b1111001;
    3'b100: {a,b,c,d,e,f,g}=7'b0110011;
    3'b101: {a,b,c,d,e,f,g}=7'b1011011;
    3'b110: {a,b,c,d,e,f,g}=7'b1011111;
    3'b111: {a,b,c,d,e,f,g}=7'b1110000;
endcase
   
   
else if(com2==0)
    begin
   if(count3==3'b111)
   count2=count2+1;
   case(count2)
    3'b000: {a,b,c,d,e,f,g}=7'b1111110;
    3'b001: {a,b,c,d,e,f,g}=7'b0110000;
    3'b010: {a,b,c,d,e,f,g}=7'b1101101;
    3'b011: {a,b,c,d,e,f,g}=7'b1111001;
    3'b100: {a,b,c,d,e,f,g}=7'b0110011;
    3'b101: {a,b,c,d,e,f,g}=7'b1011011;
    3'b110: {a,b,c,d,e,f,g}=7'b1011111;
    3'b111: {a,b,c,d,e,f,g}=7'b1110000;
endcase
    end

else if(com3==0)
    begin
   if(count4==3'b111)
      count3=count3+1;
   case(count3)
    3'b000: {a,b,c,d,e,f,g}=7'b1111110;
    3'b001: {a,b,c,d,e,f,g}=7'b0110000;
    3'b010: {a,b,c,d,e,f,g}=7'b1101101;
    3'b011: {a,b,c,d,e,f,g}=7'b1111001;
    3'b100: {a,b,c,d,e,f,g}=7'b0110011;
    3'b101: {a,b,c,d,e,f,g}=7'b1011011;
    3'b110: {a,b,c,d,e,f,g}=7'b1011111;
    3'b111: {a,b,c,d,e,f,g}=7'b1110000;
endcase
   end

else if(com4==0)
    begin
    count4=count4+1;
   case(count4)
    3'b000: {a,b,c,d,e,f,g}=7'b1111110;
    3'b001: {a,b,c,d,e,f,g}=7'b0110000;
    3'b010: {a,b,c,d,e,f,g}=7'b1101101;
    3'b011: {a,b,c,d,e,f,g}=7'b1111001;
    3'b100: {a,b,c,d,e,f,g}=7'b0110011;
    3'b101: {a,b,c,d,e,f,g}=7'b1011011;
    3'b110: {a,b,c,d,e,f,g}=7'b1011111;
    3'b111: {a,b,c,d,e,f,g}=7'b1110000;
endcase
   end

end

endmodule

longt 发表于 2010-6-26 02:31:00

initial语句是不可综合的<br>
你的板子是直接能运行仿真代码的吗?<br>
没见过<br>
如果不是,需要综合的话<br>
initial在综合的时候是被忽略的。<br>
建议用reset

ATA 发表于 2010-6-26 03:22:38

哦,我是用Quartus5.1进行编译的<br>
谢谢你的提醒~~~~<br>
不过就算initial被忽略了,按照逻辑,也应该能计数的吧?

UFO 发表于 2010-6-26 05:21:43

没有initial,没有reset,电路的起始状态是个x<br>
x+1=?

HANG 发表于 2010-6-26 06:49:08

呵呵,好像是这个原因,是我想错了~~~<br>
谢谢你的指导!

CTT 发表于 2010-6-26 07:09:57

学习了,不过楼主能把你修改后的程序贴出来吗?

interig 发表于 2010-6-26 07:53:11

原帖由 tingwhere 于 2006-12-13 11:35 发表<br>
学习了,不过楼主能把你修改后的程序贴出来吗? 将顶楼的initial语句更改为reset

CTT 发表于 2010-6-26 08:10:12

begin<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; if(count3==3'b111)<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;count2=count2+1;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>
case(count2)......<br>
<br>
有哪位能把这段黑体代表的意思说一下,为什么count3=7的时候要对count2+1啊?

Sunlife 发表于 2015-6-24 09:44:19

initial语句是不可综合的<br>
你的板子是直接能运行仿真代码的吗?<br>
没见过<br>
如果不是,需要综合的话<br>
initial在综合的时候是被忽略的。<br>
建议用reset
页: [1]
查看完整版本: 在Max7000中用七段数码管计数,急!!