📄 qep4.v
字号:
module qep4 (qep_out,a_in,b_in,clk_in,clr_in,en_in,a0_in);
input a_in,b_in;
input en_in;
input clr_in;
input clk_in;
input a0_in;
output [7:0] qep_out;
reg [7:0] qep_out_reg;
reg [1:0] state,prestate;
reg [15:0] qep_reg;
reg a0_reg;
reg [1:0] en_in_reg;
assign qep_out=(en_in)?qep_out_reg:8'bz;
always @( posedge clk_in)
begin
if(!clr_in)
begin
qep_reg[15:0]<=16'b0;
prestate<=2'b0;
state<=2'b0;
end
else
begin
state[1]<=a_in;
state[0]<=b_in;
prestate<=state;
case({prestate[1:0],state[1:0]})
4'b0010: qep_reg<=qep_reg+16'b1;
4'b0001: qep_reg<=qep_reg-16'b1;
4'b0100: qep_reg<=qep_reg+16'b1;
4'b0111: qep_reg<=qep_reg-16'b1;
4'b1011: qep_reg<=qep_reg+16'b1;
4'b1000: qep_reg<=qep_reg-16'b1;
4'b1101: qep_reg<=qep_reg+16'b1;
4'b1110: qep_reg<=qep_reg-16'b1;
default: qep_reg<=qep_reg;
endcase
end
end
always@(posedge clk_in)
begin
if(!clr_in)
begin
a0_reg<=1'b0;
qep_out_reg<=8'b0;
en_in_reg<=2'b00;
end
else
begin
a0_reg<=a0_in;
//en_in_reg[3]<=en_in_reg[2];
//en_in_reg[2]<=en_in_reg[1];
en_in_reg[1]<=en_in_reg[0];
en_in_reg[0]<=en_in;
if(en_in_reg==2'b01)
begin
case(a0_reg)
1'b0:qep_out_reg<=qep_reg[7:0];
1'b1:qep_out_reg<=qep_reg[15:8];
default:qep_out_reg<=8'bz;
endcase
end
else
qep_out_reg<=qep_out_reg;
end
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -