|
我用Quartus编译下面的程序的时候,出现下列错误:
Warning: Output pins are stuck at VCC or GND
Warning (13410): Pin "beep_en" is stuck at GND
Warning (13410): Pin "motor_en" is stuck at GND
Warning (13410): Pin "motor_dir" is stuck at GND
Warning (13410): Pin "seg[7]" is stuck at VCC
这里面最后一个我倒是明白,因为本来就一直是高电平,但是前三个为什么一直是低电平呢?我明明在程序中有赋值的啊?
请教一下 谢谢啊 十万火急呢!哎~
module LCD_test(mode,clk,beep_en,motor_en,motor_dir,dig,seg);
input [1:0]mode;
input clk;
output beep_en,motor_en,motor_dir;
output [7:0]dig,seg;
reg beep_en;
reg motor_en,motor_dir;
reg [7:0]dig_r,seg_r;
reg [3:0]disp_dat;
assign dig = dig_r; //输出数码管选择
assign seg = seg_r; //输出数码管译码结果
reg[24:0]count; //定义计数寄存器
reg sec; //定义标志位
//秒信号产生部分
always @(posedge clk) //定义clock上升沿触发
begin
count = count + 1'b1;
if(count == 25'd24000000) //0.5S到了吗?
begin
count = 25'd0; //计数器清零
sec = ~sec; //置位秒标志
end
end
reg[23:0]hour; //定义现在时刻寄存器
//数码管动态扫描显示部分
always @(posedge clk) //count[17:15]大约1ms改变一次
begin
case(count[17:15]) //选择扫描显示数据
3'd0:disp_dat = hour[3:0]; //秒个位
3'd1:disp_dat = hour[7:4]; //秒十位
3'd2:disp_dat = 4'ha; //显示"-"
3'd3:disp_dat = hour[11:8]; //分个位
3'd4:disp_dat = hour[15:12]; //分十位
3'd5:disp_dat = 4'ha; //显示"-"
3'd6:disp_dat = hour[19:16]; //时个位
3'd7:disp_dat = hour[23:20]; //时十位
endcase
case(count[17:15]) //选择数码管显示位
3'd0:dig_r = 8'b11111110; //选择第一个数码管显示
3'd1:dig_r = 8'b11111101; //选择第二个数码管显示
3'd2:dig_r = 8'b11111011; //选择第三个数码管显示
3'd3:dig_r = 8'b11110111; //选择第四个数码管显示
3'd4:dig_r = 8'b11101111; //选择第五个数码管显示
3'd5:dig_r = 8'b11011111; //选择第六个数码管显示
3'd6:dig_r = 8'b10111111; //选择第七个数码管显示
3'd7:dig_r = 8'b01111111; //选择第八个数码管显示
endcase
end
always @(posedge clk)
begin
case(disp_dat)
4'h0:seg_r = 8'hc0; //显示0
4'h1:seg_r = 8'hf9; //显示1
4'h2:seg_r = 8'ha4; //显示2
4'h3:seg_r = 8'hb0; //显示3
4'h4:seg_r = 8'h99; //显示4
4'h5:seg_r = 8'h92; //显示5
4'h6:seg_r = 8'h82; //显示6
4'h7:seg_r = 8'hf8; //显示7
4'h8:seg_r = 8'h80; //显示8
4'h9:seg_r = 8'h90; //显示9
4'ha:seg_r = 8'hbf; //显示-
default:seg_r = 8'hff; //不显示
endcase
end
reg time_en;
reg [1:0]buffer; //duqumoshi
always @(posedge sec )
begin
if(time_en)
hour<=24'd0;
else
begin
buffer=mode;
case(buffer)
2'b01:
begin //模式1
if(hour[7:4] == 4'h6) //1 minute
begin
hour=24'd0;
beep_en=1'b1;
motor_en=1'b1;
time_en=1'b1;
end
else
begin
beep_en=1'b0;
motor_en=1'b0;
time_en=1'b0;
hour[3:0] = hour[3:0] + 1'b1; //秒加1
if(hour[3:0] == 4'ha)
begin
hour[3:0] = 4'h0;
hour[7:4] = hour[7:4] + 1'b1; //秒的十位加一
motor_dir =~motor_dir; //电机反转
end
end
end
2'b10: //模式2
begin
if(hour[11:8] == 4'h2) //2 minute
begin
hour=24'd0;
beep_en=1'b1;
motor_en=1'b1;
time_en=1'b1;
end
else
begin
beep_en=1'b0;
motor_en=1'b0;
time_en=1'b0;
hour[3:0] = hour[3:0] + 1'b1; //秒加1
if(hour[3:0] == 4'ha)
begin
hour[3:0] = 4'h0;
hour[7:4] = hour[7:4] + 1'b1; //秒的十位加一
motor_dir =~motor_dir; //电机反转
if(hour[7:4] == 4'h6)
begin
hour[7:4] = 4'h0;
hour[11:8] = hour[11:8] + 1'b1;//分个位加一
end
end
end
end
2'b11:
begin //模式3
if(hour[7:4] == 4'h6) //1 minute
begin
hour=24'd0;
beep_en=1'b1;
motor_en=1'b1;
time_en=1'b1;
end
else
begin
beep_en=1'b0;
motor_en=1'b0;
time_en=1'b0;
hour[3:0] = hour[3:0] + 1'b1; //秒加1
if(hour[3:0] == 4'ha)
begin
hour[3:0] = 4'h0;
hour[7:4] = hour[7:4] + 1'b1; //秒的十位加一
end
end
end
endcase
end
end
endmodule |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|