停止等待ARQ部分功能的实现
1.代码
头文件+接收器+发送器+测试激励
/*发送装置,首先在存储器中写入八位数据,之后将数据经过并串转换传送*/
module transmit(rst,clk,datain,ack,dataout,state,wr_add);
input rst,clk,ack;
input [7:0]datain;
output dataout;
input state;//write or read
input [2:0]wr_add;
reg [7:0]mem[7:0];
reg ack1=0,ack2=0,ack3=0;
wire state;
reg [2:0]rd_add;
wire [2:0]wr_add;
reg jishu;
reg [7:0]dataout1;
wire sign;
assign sign=( (~ack3) & ack1)? 1:0;/*检测到ack是否为1,表明是否开始存储八位数据*/
/*存储datain*/
always@(posedge clk or negedge rst)
begin
if(~rst)
begin
rd_add<=0;
end
else
begin
if(state)//choose state 1为读 0为写
begin
ack1<=ack;
ack2<=ack1; //检测ack(边沿检测)
ack3<=ack2;
dataout1<=mem[rd_add];
if(sign)
jishu<=1;
end
else
begin
mem[wr_add]<=datain;//存储数据
end
end
end
/*发送*/
reg dataout;
reg [10:0]dataout_temp;//起始位1,数据位8