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

📄 syv.v

📁 针对串行存储器M25P80应用的verilog程序
💻 V
📖 第 1 页 / 共 2 页
字号:
`define b begin
`define e end

////////////////////////////////////////////////////////////////////////////////
// Company: 		 中北大学
// Engineer:		 石岩
//
// Create Date:    15:54:03 05/18/08
// Design Name:    
// Module Name:    syv
// Project Name:   
// Target Device:  
// Tool versions:  
// Description:
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////
module syv(	
      	global_clk,	div_clock,
		//--------------------interface with usb mcu--------
			data_in,	datam25_in, s_m25,  datam25_fpga,	hold_m25	, w_m25,
		//	--------------------interface usb------------------
			usbtxe,rd_usb,wr_usb,data_ft,	
		//	--------------------interface sdram------------------
			memaddr,data_mem ,wr_mem,rd_mem,
		//	--------------------lamp test------------------
			led_chip1,	led2,led_rd4

           );


    //输入输出引脚定义///////////////////////////////////////////////////////////////////////////////
    input   global_clk;
	 output  div_clock;

	 output  [18:0]memaddr;
	 output  wr_mem;
	 output  rd_mem;
	 inout	[7:0]data_mem	;

    input   [7:0]data_in;

	 input   datam25_fpga;
    output  datam25_in;
	 
    output  s_m25;
    output  w_m25;
    output  hold_m25;

    output	led_chip1;
	 output	led2;
	 output	led_rd4;

    output	rd_usb ;
	 output	usbtxe ;
	 output	wr_usb ;
	 output	[7:0]data_ft ;

    //输出引脚映射变量///////////////////////////////////////////////////////////////////////////////////////
    reg     datam25_in = 0;
    reg	   div_clock = 0;
    reg     s_m25;
	 
    reg     led_chip1= 1;	
	 reg     led2_3= 1;
	 reg     led_rd4 = 1;

//	 reg 	   [7:0]data_mem	;
	 reg     rd_mem= 1;
	 reg     wr_mem= 0; 
	 reg     [18:0]memaddr= 0; 
	 reg     wr_usb;					    
    assign  hold_m25 = 1;
    assign  w_m25 = 1;
	 assign  rd_usb = 1;
	 reg     usbtxe;
	 reg     [7:0]da_tp3= 0;
	 reg     ce=1;
	 assign 	data_mem= ce?da_tp3:8'bzzzzzzzz;
	 reg    [7:0]data_ft;

    //内部全局变量///////////////////////////////////////////////////////////////////////////////////
   
	 reg     [7:0]da_tp1 = 0;
	 reg     [7:0]da_tp2 = 0;
	 
	 reg     [7:0]da_tp4= 0;

    reg	   [9:0]counter_6M = 0;
    reg	   [23:0]resetcount= 0;
	 reg     [4:0]i = 0;
	 reg     [4:0]j = 0;
	 reg     [4:0]f = 0;
	 reg     [8:0]k = 0;
	 reg     sys_reset = 0;
	 reg		[5:0]st_wr = 0;
	 reg		[23:0]w_addr24	 = 0;
	 reg	   div_clock_t = 0;
	 reg	   [14:0]count_era = 0;
	 reg	   [5:0]count_pp = 0;
	 reg	   [5:0]count_rd = 0;

	 reg	   usbtxein = 1;
	 reg     txeflag;
	 reg	  [1:0] count;
    //复位信号的产生*********************************************************************************
    always @ (posedge global_clk)									//6M晶振
        `b
        if ((resetcount <= 24'h00ffff))                     //6M晶振全复位期间 约157us
            `b
                resetcount <= resetcount + 1 ;
    //            data_temp <=data_in;
                sys_reset <= 1 ;
            `e
        else               
            `b
                resetcount <= resetcount ;
    //            data_temp<=data_in;
                sys_reset <= 0 ;
				`e
		  `e
    //计数循环控制*********************************************************************************
  always @ (posedge global_clk)
    	 `b
			if(sys_reset)
    			`b
    			   	counter_6M <= 0;
						div_clock <= 0;

    			`e
    		else 
    			`b
    				if (counter_6M == 312)
    					`b
                            counter_6M <= 0;
									 div_clock <= ~div_clock;
		 						  //  led2 <= ~led2 ;
									 div_clock_t<= ~div_clock_t;
    					`e
                    else
    					`b
            				counter_6M <= counter_6M + 1;
    					`e
    			`e
			`e

	 //*******************   txe xiaodou  ***********
    always @ (posedge div_clock_t)                
        `b
           if (sys_reset) 
		  `b	
			usbtxein<= 1;	                           //init is ineffect
			txeflag<= 1;
			count[1:0]<= 0;
		  `e
		 else 
	       `b		
		   if ((usbtxe == 0)   &&  (count[1] == 0) && (txeflag == 1)) 
			`b
				txeflag <= 1;
				usbtxein <= 1;
				count <= count+1;
			 `e
			else if((usbtxe == 0) && (count[1] == 1) && (txeflag == 1))
			`b	
				usbtxein <= 0;
				count <= 0;
				txeflag<= 0;
			`e
			else if ((usbtxe == 1) && (count[1] == 0) && (txeflag == 0))
			 `b
				usbtxein <= 0;
				count <= count+1;
			     txeflag <= 0;
			 `e
			else if ((usbtxe == 1) && (count[1] == 1) && (txeflag == 0)) 
			 `b
				usbtxein <= 1;
				count <= 0;
				txeflag <= 1;
			  `e
			else
			 `b	
			     count <= 0;
			 `e
    		  `e									
        `e									
					


	
	 //*******************   zhu  ***********

  always @ (posedge div_clock_t )	//
        `b
    		if(sys_reset)
    			`b
						  datam25_in<= 0 ;
						  st_wr <= 0	;
						  s_m25 <= 1;
						  led_chip1  <= 1;
	//					  led2  <= 0;
						  w_addr24<= 0	;
						  da_tp1[7:0]<=0	;
    			`e
    		else 
    			`b
				  if (st_wr == 0)
						`b 
						  s_m25 <= 0;								//片选信号拉低
						  led_chip1  <= 0;								//led_chip1====s_m25 
						  st_wr <= 1;
						  da_tp1<=data_in;
    					`e
			else if (st_wr == 1)			               //开始发送写使能指令06H
    					`b
						  datam25_in <= 0;					   //	0
						  st_wr <= 2;
						`e	
    				
    		else if (st_wr == 2)			                
    					`b
						  datam25_in <= 0;						//	0
						  st_wr <= 3;
    					`e 
         else if (st_wr == 3)			                
    					`b
                    datam25_in <= 0; 					   //	0
						  st_wr <= 4; 								
    					`e            
			else if (st_wr == 4)			                
    					`b
                    datam25_in <= 0; 					   //	0 						 
						  st_wr <= 5;		
    					`e 
		   else if (st_wr == 5)			                
    					`b
                    datam25_in <= 0; 						//	0
						  st_wr <= 6;
						`e
			else if (st_wr == 6)			               
    					`b
                    datam25_in <= 1; 						//	4
						  st_wr <= 7;
						`e	
    		else if (st_wr == 7)			                
    					`b
                    datam25_in <= 0; 						//	2 						
						  st_wr <= 8;	
    					`e 
         else if (st_wr == 8)			                
    					`b
                    datam25_in <= 0;						//	0
						  st_wr <= 9 ;								
    					`e            
			else if (st_wr == 9)			                
    					`b
						  s_m25 <= 1;								//片选信号拉高
						  led_chip1  <= 1;								//led_chip1====s_m25
						  st_wr <= 10;		
    					`e 
		   else if (st_wr == 10)			                
						  st_wr <= 11 ;
			else if (st_wr == 11)			                
						  st_wr <= 12 ;
			else if (st_wr == 12)			                
						  st_wr<= 13 ;
			else if (st_wr == 13)			                
						  st_wr <= 14 ;
 	//------------------- 开始擦除M25P80 发送C7H ------------
			else if (st_wr == 14)
						`b  
						  datam25_in <= 1;
						  st_wr<= 15;
						`e
    		else if (st_wr == 15)			               
    					`b
                    datam25_in <= 1; 						 
						  st_wr <= 16;
						`e	
    				
    		else if (st_wr == 16)			                
    					`b
                     datam25_in<= 0; 								
						  st_wr <= 17;	
    					`e 
			else if (st_wr == 17)	
						 `b
					 	   datam25_in<= 0;                 
						  st_wr <= 18;	
						 `e
			else	if (st_wr == 18)	
						 `b
					 		datam25_in<= 0;                
						  st_wr <= 19;
						  `e	
			else	if (st_wr == 19)	
						 `b
					 		datam25_in <= 1;                
						   st_wr <= 20;	
						  `e
			else	if (st_wr == 20)	
						 `b
					 	  datam25_in <= 1;                
						  st_wr <= 21;	
						 `e
			else	if (st_wr == 21)	
					 	 `b
							datam25_in <= 1;                
						  st_wr <= 22;	
						 `e
         else  if (st_wr == 22)			                
    					`b
                    s_m25 <= 1;									//片选信号拉高
						  led_chip1  <= 1;								
						  st_wr <= 23; 						   
    					`e            
			else  if (st_wr == 23)			              
    					`b
						  count_era	<=	count_era+1;					//计数
						  st_wr <= 24;	
    					`e 

⌨️ 快捷键说明

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