|
发表于 2011-7-21 09:01:23
|
显示全部楼层
module encoder(clk,reset,encoder_a,encoder_b,count_data);
input clk;
input reset;
input encoder_a;
input encoder_b;
output [31:0]count_data;
reg [1:0]current_state;
reg [1:0]next_state;
reg [31:0]count_data;
always@(posedge clk)
if(!reset)
begin
current_state<=2'b00;
next_state<=2'b00;
end
else
begin
current_state<=next_state;
next_state<={encoder_a,encoder_b};
end
always@(posedge clk)
if(!reset)
count_data<=2'b00;
else
case(current_state):
2'b00:
if(next_state==2'b01)
count_data<count_data+32'b1;
else if(next_state=2'b10)
count_data<count_data-32'b1;
else
count_data<=count_data;
2'b01:
if(next_state==2'b11)
count_data<count_data+32'b1;
else if(next_state=2'b00)
count_data<count_data-32'b1;
else
count_data<=count_data;
2'b11:
if(next_state==2'b10)
count_data<count_data+32'b1;
else if(next_state=2'b01)
count_data<count_data-32'b1;
else
count_data<=count_data;
2'b10:
if(next_state==2'b00)
count_data<count_data+32'b1;
else if(next_state=2'b11)
count_data<count_data-32'b1;
else
count_data<=count_data;
default:
count_data<=count_data;
endcase
endmodule
我用verilog HDL写了一个,已通过测试。VHDL的语言不是很熟,回头看看语法去 |
|