.
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;
.