|
为什么我的输出都接地啦??????????????
module hx711(clk,reset,out_reg,ADDO,ADSK);
input clk,reset;
inout reg ADDO=1,ADSK;
output [23:0] out_reg;
reg [23:0] out_reg;
reg [4:0] count;
reg [1:0] case_3;
reg [2:0] case_2,case_1;
reg [1:0] t;
reg mclk;
always @(posedge clk or negedge reset) begin
if(!reset) begin
end
else begin
case(case_3)
0:begin
ADDO<=1'b1;
ADSK<=1'b0;
out_reg<=24'd0;
case_3<=2'd1;
end
1:begin
if(ADDO==1'd0)
case_3<=2'd2;
end
2:begin
cnt_1us_clear <= 0;
case_3<=2'd3;
end
3:begin
if(cnt_1us >= 10)
if(count>=5'd24) begin
case(case_1)
0:begin
cnt_1us_clear <= 0;
ADSK<=1;
case_1<=3'd1;
end
1:begin
if(cnt_1us >= 20) begin
ADSK<=0;
cnt_1us_clear <= 1;
case_1<=3'd2;
end
else
cnt_1us_clear <= 0;
end
2:begin
cnt_1us_clear <= 0;
case_1<=3'd3;
end
3:begin
if(cnt_1us >= 20) begin
if(t==2'd0) begin
cnt_1us_clear <= 1;
case_1<=3'd3;
t<=0;
end
else begin
case_1<=3'd0;
cnt_1us_clear <= 1;
t=t+2'd1;
end
end
end
4:begin
ADSK<=1;
case_1<=3'd4;
cnt_1us_clear <= 0;
end
5:begin
if(cnt_1us >= 100) begin
case_1<=3'd5;
cnt_1us_clear <= 1;
end
end
6:begin
//out<=out_reg;
count<=5'd0;
case_1<=2'd0;
case_3<=2'd0;
case_2<=2'd0;
end
endcase
end
else begin
case(case_2)
0:begin
cnt_1us_clear <= 1;
case_2<=3'd1;
end
1:begin
ADSK<=1'b1;
case_2<=3'd2;
cnt_1us_clear <= 0;
end
2:begin
if(cnt_1us >= 20) begin
out_reg<={out_reg[22:0],out_reg[23]};
case_2<=3'd3;
cnt_1us_clear <= 1;
end
else
cnt_1us_clear <= 0;
end
3:begin
cnt_1us_clear <= 0;
ADSK<=1'd0;
case_2<=3'd4;
end
4:begin
if(cnt_1us >= 20) begin
if(ADDO)
out_reg<=out_reg+24'd1;
count<=count+1'b1;
case_2<=3'd0;
cnt_1us_clear <= 1;
end
else
cnt_1us_clear <= 0;
end
endcase
end
end
endcase
end
end
//assign out=out_reg;
reg [19:0] cnt_1us; // 1us延时计数子
reg cnt_1us_clear; // 请1us延时计数子
reg [5:0] cnt; // 计数子
always @ (posedge clk or negedge reset)
if (!reset)
cnt <= 0;
else
if (cnt == 49)
cnt <= 0;
else
cnt <= cnt + 1'b1;
reg clk_1us; // 1MHz 时钟
always @ (posedge clk or negedge reset)
if (!reset)
clk_1us <= 0;
else
if (cnt <= 24) // 24 = 50/2 - 1
clk_1us <= 0;
else
clk_1us <= 1;
always @ (posedge clk_1us)
if (cnt_1us_clear)
cnt_1us <= 0;
else
cnt_1us <= cnt_1us + 1'b1;
endmodule
out_reg编译时总是接地啊
编译后,只占了3个LE啊 |
|