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

📄 mac_tx_ff.v

📁 verilog实现的异步UART代码
💻 V
📖 第 1 页 / 共 2 页
字号:
    else if (!Packet_number_add&&Packet_number_sub_edge)        Packet_number_inFF      <=Packet_number_inFF - 1'b1;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Packet_number_inFF_reg      <=0;    else        Packet_number_inFF_reg      <=Packet_number_inFF;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        begin        Add_rd_reg_rdy_dl1          <=0;        Add_rd_reg_rdy_dl2          <=0;        end    else        begin        Add_rd_reg_rdy_dl1          <=Add_rd_reg_rdy;        Add_rd_reg_rdy_dl2          <=Add_rd_reg_rdy_dl1;        end     always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Add_rd_reg_dl1              <=0;    else if (Add_rd_reg_rdy_dl1&!Add_rd_reg_rdy_dl2)        Add_rd_reg_dl1              <=Add_rd_reg;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Fifo_data_count     <=0;    else if (FullDuplex)        Fifo_data_count     <=Add_wr[`MAC_RX_FF_DEPTH-1:`MAC_RX_FF_DEPTH-5]-Add_rd_ungray[`MAC_RX_FF_DEPTH-1:`MAC_RX_FF_DEPTH-5];    else        Fifo_data_count     <=Add_wr[`MAC_RX_FF_DEPTH-1:`MAC_RX_FF_DEPTH-5]-Add_rd_reg_dl1[`MAC_RX_FF_DEPTH-1:`MAC_RX_FF_DEPTH-5]; //for half duplex backoff requirement        always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Fifo_ra_tmp <=0;        else if (Packet_number_inFF_reg>=1||Fifo_data_count>=Tx_Lwmark)        Fifo_ra_tmp <=1;            else         Fifo_ra_tmp <=0;always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        begin         Tx_Hwmark_pl        <=0;        Tx_Lwmark_pl        <=0;            end    else        begin         Tx_Hwmark_pl        <=Tx_Hwmark;        Tx_Lwmark_pl        <=Tx_Lwmark;            end        always @ (posedge Clk_SYS or posedge Reset)    if (Reset)        Tx_mac_wa   <=0;      else if (Fifo_data_count>=Tx_Hwmark_pl)        Tx_mac_wa   <=0;    else if (Fifo_data_count<Tx_Lwmark_pl)        Tx_mac_wa   <=1;//******************************************************************************        //******************************************************************************//rd data to from FF .//domain Clk_MAC//******************************************************************************reg[35:0]   Dout_dl1;reg         Dout_reg_en /* synthesis syn_keep=1 */;always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Dout_dl1    <=0;    else        Dout_dl1    <=Dout;always @ (Current_state_MAC or Next_state_MAC)    if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)        Dout_reg_en     =1;    else        Dout_reg_en     =0;             always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Dout_reg        <=0;    else if (Dout_reg_en)        Dout_reg    <=Dout_dl1;             assign {Dout_eop,Dout_err,Dout_BE,Dout_data}=Dout_reg;always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Current_state_MAC   <=MAC_idle;    else        Current_state_MAC   <=Next_state_MAC;               always @ (Current_state_MAC or Fifo_rd or Dout_BE or Dout_eop or Fifo_rd_retry            or Fifo_rd_finish or Empty or Fifo_rd or Fifo_eop)        case (Current_state_MAC)            MAC_idle:                if (Empty&&Fifo_rd)                    Next_state_MAC=MAC_FF_Err;                else if (Fifo_rd)                    Next_state_MAC=MAC_byte3;                else                    Next_state_MAC=Current_state_MAC;            MAC_byte3:                if (Fifo_rd_retry)                    Next_state_MAC=MAC_retry;                           else if (Fifo_eop)                    Next_state_MAC=MAC_wait_finish;                else if (Fifo_rd&&!Fifo_eop)                    Next_state_MAC=MAC_byte2;                else                    Next_state_MAC=Current_state_MAC;            MAC_byte2:                if (Fifo_rd_retry)                    Next_state_MAC=MAC_retry;                else if (Fifo_eop)                    Next_state_MAC=MAC_wait_finish;                else if (Fifo_rd&&!Fifo_eop)                    Next_state_MAC=MAC_byte1;                else                    Next_state_MAC=Current_state_MAC;                   MAC_byte1:                if (Fifo_rd_retry)                    Next_state_MAC=MAC_retry;                else if (Fifo_eop)                    Next_state_MAC=MAC_wait_finish;                else if (Fifo_rd&&!Fifo_eop)                    Next_state_MAC=MAC_byte0;                else                    Next_state_MAC=Current_state_MAC;               MAC_byte0:                if (Empty&&Fifo_rd&&!Fifo_eop)                    Next_state_MAC=MAC_FFEmpty;                else if (Fifo_rd_retry)                    Next_state_MAC=MAC_retry;                else if (Fifo_eop)                    Next_state_MAC=MAC_wait_finish;                     else if (Fifo_rd&&!Fifo_eop)                    Next_state_MAC=MAC_byte3;                else                    Next_state_MAC=Current_state_MAC;               MAC_retry:                    Next_state_MAC=MAC_idle;            MAC_wait_finish:                if (Fifo_rd_finish)                    Next_state_MAC=MAC_pkt_sub;                else                    Next_state_MAC=Current_state_MAC;            MAC_pkt_sub:                    Next_state_MAC=MAC_idle;            MAC_FFEmpty:                if (!Empty)                    Next_state_MAC=MAC_byte3;                else                    Next_state_MAC=Current_state_MAC;            MAC_FF_Err:  //stopped state-machine need change                                             Next_state_MAC=Current_state_MAC;            default                    Next_state_MAC=MAC_idle;            endcase//always @ (posedge Reset or posedge Clk_MAC)    if (Reset)        Add_rd_gray         <=0;    else 		begin		Add_rd_gray[`MAC_RX_FF_DEPTH-1]	<=Add_rd[`MAC_RX_FF_DEPTH-1];		for (i=`MAC_RX_FF_DEPTH-2;i>=0;i=i-1)		Add_rd_gray[i]			<=Add_rd[i+1]^Add_rd[i];		end//always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_wr_gray_dl1     <=0;    else        Add_wr_gray_dl1     <=Add_wr_gray;            always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_wr_ungray       =0;    else        		begin		Add_wr_ungray[`MAC_RX_FF_DEPTH-1]	=Add_wr_gray_dl1[`MAC_RX_FF_DEPTH-1];			for (i=`MAC_RX_FF_DEPTH-2;i>=0;i=i-1)			Add_wr_ungray[i]	=Add_wr_ungray[i+1]^Add_wr_gray_dl1[i];			end                   //empty     always @ (posedge Clk_MAC or posedge Reset)    if (Reset)              Empty   <=1;    else if (Add_rd==Add_wr_ungray)        Empty   <=1;    else        Empty   <=0;            //raalways @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Fifo_ra <=0;    else        Fifo_ra <=Fifo_ra_tmp;always @ (posedge Clk_MAC or posedge Reset)         if (Reset)          Pkt_sub_apply_tmp   <=0;    else if (Current_state_MAC==MAC_pkt_sub)        Pkt_sub_apply_tmp   <=1;    else        Pkt_sub_apply_tmp   <=0;        always @ (posedge Clk_MAC or posedge Reset)     if (Reset)        Pkt_sub_apply   <=0;    else if ((Current_state_MAC==MAC_pkt_sub)||Pkt_sub_apply_tmp)        Pkt_sub_apply   <=1;    else                        Pkt_sub_apply   <=0;//reg Add_rd for collison retryalways @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_rd_reg      <=0;    else if (Fifo_rd_finish)        Add_rd_reg      <=Add_rd;always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_rd_reg_rdy_tmp      <=0;    else if (Fifo_rd_finish)        Add_rd_reg_rdy_tmp      <=1;    else        Add_rd_reg_rdy_tmp      <=0;        always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_rd_reg_rdy      <=0;    else if (Fifo_rd_finish||Add_rd_reg_rdy_tmp)        Add_rd_reg_rdy      <=1;    else        Add_rd_reg_rdy      <=0;          reg Add_rd_add /* synthesis syn_keep=1 */;always @ (Current_state_MAC or Next_state_MAC)    if ((Current_state_MAC==MAC_idle||Current_state_MAC==MAC_byte0)&&Next_state_MAC==MAC_byte3)        Add_rd_add  =1;    else        Add_rd_add  =0;                always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Add_rd          <=0;    else if (Current_state_MAC==MAC_retry)        Add_rd          <= Add_rd_reg;    else if (Add_rd_add)        Add_rd          <= Add_rd + 1;                      always @ (posedge Clk_MAC or posedge Reset)	if (Reset)	    Add_rd_jump_tmp <=0;	else if (Current_state_MAC==MAC_retry)	    Add_rd_jump_tmp <=1;	else	    Add_rd_jump_tmp <=0;always @ (posedge Clk_MAC or posedge Reset)	if (Reset)	    Add_rd_jump_tmp_pl1 <=0;	else	    Add_rd_jump_tmp_pl1 <=Add_rd_jump_tmp;	 	    always @ (posedge Clk_MAC or posedge Reset)	if (Reset)	    Add_rd_jump <=0;	else if (Current_state_MAC==MAC_retry)	    Add_rd_jump <=1;	else if (Add_rd_jump_tmp_pl1)	    Add_rd_jump <=0;		    					//gen Fifo_data         always @ (Dout_data or Current_state_MAC)    case (Current_state_MAC)        MAC_byte3:            Fifo_data   =Dout_data[31:24];        MAC_byte2:            Fifo_data   =Dout_data[23:16];        MAC_byte1:            Fifo_data   =Dout_data[15:8];        MAC_byte0:            Fifo_data   =Dout_data[7:0];        default:            Fifo_data   =0;         endcase//gen Fifo_da           always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Fifo_rd_dl1     <=0;    else        Fifo_rd_dl1     <=Fifo_rd;        always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Fifo_da         <=0;    else if ((Current_state_MAC==MAC_byte0||Current_state_MAC==MAC_byte1||              Current_state_MAC==MAC_byte2||Current_state_MAC==MAC_byte3)&&Fifo_rd&&!Fifo_eop)        Fifo_da         <=1;    else        Fifo_da         <=0;//gen Fifo_data_err_emptyassign  Fifo_data_err_full=Dout_err;//gen Fifo_data_err_emptyalways @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Current_state_MAC_reg   <=0;    else        Current_state_MAC_reg   <=Current_state_MAC;        always @ (posedge Clk_MAC or posedge Reset)    if (Reset)        Fifo_data_err_empty     <=0;    else if (Current_state_MAC_reg==MAC_FFEmpty)        Fifo_data_err_empty     <=1;    else        Fifo_data_err_empty     <=0;    always @ (posedge Clk_MAC)    if (Current_state_MAC_reg==MAC_FF_Err)          begin        $finish(2);         $display("mac_tx_FF meet error status at time :%t",$time);        end//gen Fifo_eop aligned to last valid data byte。            always @ (Current_state_MAC or Dout_eop)    if (((Current_state_MAC==MAC_byte0&&Dout_BE==2'b00||        Current_state_MAC==MAC_byte1&&Dout_BE==2'b11||        Current_state_MAC==MAC_byte2&&Dout_BE==2'b10||        Current_state_MAC==MAC_byte3&&Dout_BE==2'b01)&&Dout_eop))        Fifo_eop        =1;     else        Fifo_eop        =0;         //******************************************************************************//******************************************************************************duram #(36,`MAC_TX_FF_DEPTH,"M4K") U_duram(           .data_a         (Din        ), .wren_a         (Wr_en      ), .address_a      (Add_wr     ), .address_b      (Add_rd     ), .clock_a        (Clk_SYS    ), .clock_b        (Clk_MAC    ), .q_b            (Dout       ));endmodule

⌨️ 快捷键说明

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