⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qep4.v

📁 基于地址总线接口的四倍频编码器信号接口的 FPGA实现 Verilog HDL的
💻 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 + -