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

📄 zerojustv.v

📁 我自己写的过零点判断模块
💻 V
字号:
module zerojustv(clk,clear,Din,Dout,aorb);

input clk,clear;
input [7:0]Din;
output Dout,aorb;

parameter           s80 =43'b000000000000_0000000000_0000000000_0000000000_1;
parameter 	        s81 =43'b000000000000_0000000000_0000000000_0000000001_0;
parameter 		    s82 =43'b000000000000_0000000000_0000000000_0000000010_0;
parameter 			s83 =43'b000000000000_0000000000_0000000000_0000000100_0;
parameter 			s84 =43'b000000000000_0000000000_0000000000_0000001000_0;
parameter 			s85 =43'b000000000000_0000000000_0000000000_0000010000_0;
parameter 			s90 =43'b000000000000_0000000000_0000000000_0000100000_0;
parameter 			s91 =43'b000000000000_0000000000_0000000000_0001000000_0;
parameter 			s92 =43'b000000000000_0000000000_0000000000_0010000000_0;
parameter 			s61 =43'b000000000000_0000000000_0000000000_0100000000_0;
parameter 			s62 =43'b000000000000_0000000000_0000000000_1000000000_0;
parameter 			s101=43'b000000000000_0000000000_0000000001_0000000000_0;
parameter 			s102=43'b000000000000_0000000000_0000000010_0000000000_0;
parameter 			s201=43'b000000000000_0000000000_0000000100_0000000000_0;
parameter 			s202=43'b000000000000_0000000000_0000001000_0000000000_0;
parameter 			s4  =43'b000000000000_0000000000_0000010000_0000000000_0;
parameter 			s5  =43'b000000000000_0000000000_0000100000_0000000000_0;
parameter 			s6  =43'b000000000000_0000000000_0001000000_0000000000_0;
parameter 			s671=43'b000000000000_0000000000_0010000000_0000000000_0;
parameter 			s672=43'b000000000000_0000000000_0100000000_0000000000_0;
parameter 			s673=43'b000000000000_0000000000_1000000000_0000000000_0;
parameter 			s674=43'b000000000000_0000000001_0000000000_0000000000_0;
parameter 			s675=43'b000000000000_0000000010_0000000000_0000000000_0;
parameter 			s676=43'b000000000000_0000000100_0000000000_0000000000_0;
parameter 			s677=43'b000000000000_0000001000_0000000000_0000000000_0;
parameter 			s678=43'b000000000000_0000010000_0000000000_0000000000_0;
parameter 			s7  =43'b000000000000_0000100000_0000000000_0000000000_0;
parameter 			s71 =43'b000000000000_0001000000_0000000000_0000000000_0;
parameter 			s0  =43'b000000000000_0010000000_0000000000_0000000000_0;
parameter 			s1  =43'b000000000000_0100000000_0000000000_0000000000_0;
parameter 			s2  =43'b000000000000_1000000000_0000000000_0000000000_0;
parameter 			s231=43'b000000000001_0000000000_0000000000_0000000000_0;
parameter 			s232=43'b000000000010_0000000000_0000000000_0000000000_0;
parameter 			s233=43'b000000000100_0000000000_0000000000_0000000000_0;
parameter 			s234=43'b000000001000_0000000000_0000000000_0000000000_0;
parameter 			s235=43'b000000010000_0000000000_0000000000_0000000000_0;
parameter 			s236=43'b000000100000_0000000000_0000000000_0000000000_0;
parameter 			s237=43'b000001000000_0000000000_0000000000_0000000000_0;
parameter 			s238=43'b000010000000_0000000000_0000000000_0000000000_0;
parameter 			s3  =43'b000100000000_0000000000_0000000000_0000000000_0;
parameter 			s31 =43'b001000000000_0000000000_0000000000_0000000000_0;
parameter 			s72 =43'b010000000000_0000000000_0000000000_0000000000_0;	parameter 			s32 =43'b100000000000_0000000000_0000000000_0000000000_0;		
reg[42:0] current_state,next_state;
always @(negedge clear or negedge clk) begin
if(!clear) begin
	current_state<=s80;
	
	 end
else 
    current_state<=next_state;
end

reg Dout,aorb;	
reg ini;		
always @(posedge clk or negedge clear) begin
if(!clear) begin
Dout<=1'b0;
aorb<=1'b0;
ini<=1'b0;end
else
case(current_state)
	s80: begin Dout<=1'b0;
		 aorb<=1'b1;
		 ini<=2'd0;
		 next_state<=s81;end
    s81: begin Dout<=1'b0;
		 next_state<=s82;end
	s82: begin Dout<=1'b0;
		 next_state<=s83;end
	s83: begin Dout<=1'b0;
		 next_state<=s84;end
	s84: begin Dout<=1'b0;
		 next_state<=s85;end 
	s85: begin Dout<=1'b0;
		 next_state<=s90;end 
		
	s90: if(Din[7]==0) next_state<=s91;//决定判断初始值正或负的方向
		 else next_state<=s61;	
	s91: if(Din[7]==0) next_state<=s92;
		 else next_state<=s101;	
	s92: if(Din[7]==0) begin next_state<=s4;ini<=1'b1; end//确定初始值为正
		 else next_state<=s61;
	
	s61: if(Din[7]==1) next_state<=s62;
		 else next_state<=s201;	
	s62: if(Din[7]==1) begin next_state<=s0;ini<=1'b1; end//确定初始值为负
		 else next_state<=s61;
		
	s101:if(Din[7]==1) next_state<=s102;
		 else next_state<=s90;	
	s102:if(Din[7]==1) begin next_state<=s0;ini<=1'b1; end //确定初始值为负
		 else next_state<=s90;	
		
	s201:if(Din[7]==0) next_state<=s202;
	     else next_state<=s90;
	s202:if(Din[7]==0) begin next_state<=s4;ini<=1'b1;  end//确定初始值为正
	     else next_state<=s90;	
	
	s4:	 begin
			Dout<=1'b0;
			aorb<=1'b1;
			 if(Din[7]==0) next_state<=s4;
			 else next_state<=s5;end
	
	s5:   begin aorb<=1'b1;
             if(Din[7]==0) next_state<=s4;
			 else next_state<=s6;end 
	s6:   begin aorb<=1'b1;
             if(Din[7]==0) next_state<=s4;
			 else next_state<=s671;end
	s671: begin aorb<=1'b1;
             if(Din[7]==0) next_state<=s4;
			 else next_state<=s672;end
	s672: begin aorb<=1'b1;
          if(Din[7]==0) next_state<=s4;
			 else next_state<=s673;end
	s673: begin aorb<=1'b1;
          if(Din[7]==0) next_state<=s4;
			 else next_state<=s674;end
	s674: begin aorb<=1'b1;
          if(Din[7]==0) next_state<=s4;
			 else next_state<=s677;end
//	s675: begin aorb<=1'b1;
//          if(Din[7]==0) next_state<=s4;
//			 else next_state<=s676;end
//	s676: begin aorb<=1'b1;
//          if(Din[7]==0) next_state<=s4;
//			 else next_state<=s677;end
	s677: begin aorb<=1'b1;
          if(Din[7]==0) next_state<=s4;
			 else next_state<=s678;end
	s678: begin aorb<=1'b1;
          if(Din[7]==0) next_state<=s4;
			 else  next_state<=s7;end //确定由正值变为负值
			
	s7:   begin	if(ini<=1'b0) 
			Dout<=1'b1;	
			else begin Dout<=1'b0; ini<=1'b0; end	
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s0;//启动负变正判别过程
			else next_state<=s71; end
	s71:  begin
			aorb<=1'b0;
			Dout<=1'b0;
			if(Din[7]==0) next_state<=s0;//启动负变正判别过程
			else next_state<=s72;  end
	s72:  begin
			Dout<=1'b0;
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s0;//启动负变正判别过程
			else next_state<=s71;  end
			
	s0:   begin
			Dout<=1'b0;
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s1;
			else next_state<=s0;  end
	s1:   begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s2;
			else next_state<=s0;  end
	s2:   begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s231;
			else next_state<=s0;  end
	s231: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s232;
			else next_state<=s0;  end
	s232: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s233;
			else next_state<=s0;  end
	s233: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s234;
			else next_state<=s0;  end
	s234: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s237;
			else next_state<=s0;  end
//	s235: begin
//			aorb<=1'b0;
//			if(Din[7]==0) next_state<=s236;
//			else next_state<=s0;  end
//	s236: begin
//			aorb<=1'b0;
//			if(Din[7]==0) next_state<=s237;
//			else next_state<=s0;  end
	s237: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s238;
			else next_state<=s0;  end
	s238: begin
			aorb<=1'b0;
			if(Din[7]==0) next_state<=s3;//确定由负值变为正值
			else next_state<=s0;  end
			
	s3:   begin
			Dout<=1'b1;
			aorb<=1'b1;
			if(Din[7]==1) next_state<=s4;//启动正变负判别过程

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -