FPGA Uart rs232 异步通信串口 精简帧传输实现

项目:FPGA Uart rs232 异步通信串口 精简帧传输实现

要求:每次发送数据在VGA显示时,在数据前加自己设置的帧(密码),才可以发送成功,否则发送无效!

要求举例:假设密码为:

在串口发送的时候若在前不加这10位数据,会发送不过去数据。

FPGA Uart rs232 异步通信串口 精简帧传输实现_第1张图片

在前面添加了帧(密码)便可以发送过去了。

项目构架:

FPGA Uart rs232 异步通信串口 精简帧传输实现_第2张图片

帧时序图:

FPGA Uart rs232 异步通信串口 精简帧传输实现_第3张图片

仿真图:

部分程序:

module frame(
input  wire         sclk   ,
input  wire         rst_n  ,
input  wire [7:0]   f_data ,
input  wire         f_flag ,
input  wire         i_flag_en,

output wire  [7:0]  fo_data,
output wire 	      fo_flag
);

parameter  START  = 11'b000000_00001  ;
parameter  ONE    = 11'b000000_00010  ;
parameter  TWO    = 11'b000000_00100  ;
parameter  THREE  = 11'b000000_01000  ;
parameter  FOUR   = 11'b000000_10000  ;
parameter  FIVE   = 11'b000001_00000  ;
parameter  SIX    = 11'b000010_00000  ;
parameter  SEVEN  = 11'b000100_00000  ;
parameter  EIGHT  = 11'b001000_00000  ;
parameter  NINE   = 11'b010000_00000  ;
parameter  SENT   = 11'b100000_00000  ;


reg [10:0]    state ;

always@(posedge sclk or negedge rst_n)
	if(!rst_n)
			state <= START ;
	else if(state==11'h400 && i_flag_en==1)
			state <= START ;
	else if(f_flag==1'b1)
	case(state)

		  START:
		  			if(f_data== 8'h55)
		  					state <= ONE   ;
		  			else
		  					state <= START ;
      ONE  :
      			if(f_data== 8'h56)
		  					state <= TWO   ;
		  			else
		  					state <= START ;
      TWO  :
      			if(f_data== 8'h57)
		  					state <= THREE ;
		  			else
		  					state <= START ;
      THREE:
      			if(f_data== 8'h58)
		  					state <= FOUR  ;
		  			else
		  					state <= START ;
      FOUR :
      			if(f_data== 8'h59)
		  					state <= FIVE  ;
		  			else
		  					state <= START ;
      FIVE :
      			if(f_data== 8'h60)
		  					state <= SIX   ;
		  			else
		  					state <= START ;
      SIX  :
      			if(f_data== 8'h61)
		  					state <= SEVEN ;
		  			else
		  					state <= START ;
      SEVEN:
      			if(f_data== 8'hd5)
		  					state <= EIGHT ;
		  			else
		  					state <= START ;
      EIGHT:
      			if(f_data== 8'h00)
		  					state <= NINE  ;
		  			else
		  					state <= START ;
      NINE :
      			if(f_data== 8'h00)
		  					state <= SENT  ;
		  			else
		  					state <= START ;
 
		  					
    default: ;
  endcase
  
//fo_data
		assign fo_data=(state==SENT)?f_data:8'b0;
	

//fo_flag
    assign fo_flag=(state==SENT&&f_flag==1'b1)?f_flag:1'b0;
				
endmodule
	

 

本文为原创博客,请勿商用转载谢谢,若转载请标注原创地址 谢谢:

https://blog.csdn.net/qq_40261818/article/details/81941520

你可能感兴趣的:(FPGA Uart rs232 异步通信串口 精简帧传输实现)