好文档 - 专业文书写作范文服务资料分享网站

FPGA的UART完整设计

天下 分享 时间: 加入收藏 我要投稿 点赞

.

output send,clk_enable4,clear4; output ks;//jia wire clear;

wire[7:0] dat_s;

reg send,parity_result,ks;

reg clk_enable,clear1,clear4,clk_enable4; reg[7:0] date_s;

///////////////////////////////////////////////////////////////////////////////////////////////////////// always(posedge clk) begin

if(send_enable & !reset)//当send_enable为高电平时为发送操作状态 begin

clk_enable4<=1; clear4<=clear1; end else

begin

clear4<=1; end end

//////////////////////////////////////////////////////////////////////////////////////////////////////////// always(posedge clk)

if(send_enable & !reset) begin

if(counters==8'b00000001)//0 begin

send<=0;

date_s<=dat_in;//? parity_result<=1; end

else if(counters==8'b00010000)//1 begin

send<=date_s[0];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b00100000)//2 begin

send<=date_s[1];

parity_result<=parity_result + date_s[0]; end

.

.

else if(counters==8'b00110000)//3 begin

send<=date_s[2];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b01000000)//4 begin

send<=date_s[3];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b01010000)//5 begin

send<=date_s[4];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b01100000)//6 begin

send<=date_s[5];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b01110000)//7 begin

send<=date_s[6];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b10000000)//8 begin

send<=date_s[7];

parity_result<=parity_result + date_s[0]; end

else if(counters==8'b10010000)//9发送奇偶校验结果 begin

send=parity_result; end

else if(counters==8'b10100000)//0发送高电平 begin

send<=1; end

else if(counters==8'b10101111)//0 begin

clear1<=1;

ks<=(send && parity_result) ? 1:0; end

.

.

else if(counters==8'b00000000) begin

send<=1; end

else clear1<=0; end else

send<=1; endmodule

/////////////////////////////////////////////////////////////////

3.4.4UART的数据接收模块程序功能仿真图 图3-8当counters指定时间时功能仿真

图3-8当counters指定时间时

.

.

解释:由图可明显看出data[0]和data[1]变化,模块功能仿真通过 图3-9当counters未指定时间时功能仿真

图3-9当counters未指定时间时功能仿真

.

.

3.5UART控制器

3.5.1UART控制器服务

UART控制器实质上是一组计数器,由state决定计数器数据发送对象,在这里指定当state为1时,发送到UART接收模块,反之,发送到UART发送模块。当计数到指定数据时,触发指定模块的制定操作。 3.5.2UART控制器模块程序

module counters(read_enable,send_enable,

clk,state,t1,read,counters,reset,clear);//程序计数寄存器 input clk,state,t1,read,reset,clear;//state为uart状态输入, //clear为程序计数寄存器清零控制位 output[7:0] counters;

.

39ocp4futj5dq8n1sig30fluh9bohz00uib
领取福利

微信扫码领取福利

微信扫码分享