在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 initial语句是不可综合的<br>
你的板子是直接能运行仿真代码的吗?<br>
没见过<br>
如果不是,需要综合的话<br>
initial在综合的时候是被忽略的。<br>
建议用reset 哦,我是用Quartus5.1进行编译的<br>
谢谢你的提醒~~~~<br>
不过就算initial被忽略了,按照逻辑,也应该能计数的吧? 没有initial,没有reset,电路的起始状态是个x<br>
x+1=? 呵呵,好像是这个原因,是我想错了~~~<br>
谢谢你的指导! 学习了,不过楼主能把你修改后的程序贴出来吗? 原帖由 tingwhere 于 2006-12-13 11:35 发表<br>
学习了,不过楼主能把你修改后的程序贴出来吗? 将顶楼的initial语句更改为reset begin<br>
if(count3==3'b111)<br>
count2=count2+1; <br>
case(count2)......<br>
<br>
有哪位能把这段黑体代表的意思说一下,为什么count3=7的时候要对count2+1啊? initial语句是不可综合的<br>
你的板子是直接能运行仿真代码的吗?<br>
没见过<br>
如果不是,需要综合的话<br>
initial在综合的时候是被忽略的。<br>
建议用reset
页:
[1]