项目:FPGA Uart rs232 异步通信串口 精简帧传输实现
要求:每次发送数据在VGA显示时,在数据前加自己设置的帧(密码),才可以发送成功,否则发送无效!
要求举例:假设密码为:
在串口发送的时候若在前不加这10位数据,会发送不过去数据。
在前面添加了帧(密码)便可以发送过去了。
项目构架:
帧时序图:
仿真图:
部分程序:
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.youkuaiyun.com/qq_40261818/article/details/81941520