如何实现乒乓操作Word文档格式.docx
《如何实现乒乓操作Word文档格式.docx》由会员分享,可在线阅读,更多相关《如何实现乒乓操作Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
![如何实现乒乓操作Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/3/9db22792-3390-46fa-a284-fc4a76344f4e/9db22792-3390-46fa-a284-fc4a76344f4e1.gif)
rst_n,
data_in,//输入数据
data_out//输出数据
);
inputclk;
inputrst_n;
input[7:
0]data_in;
output[7:
0]data_out;
reg[7:
0]buffer1[255:
0];
//缓存区1
0]buffer2[255:
0];
//缓存区2
regwr_flag;
//写标志,wr_flag=0,写buffer1,wr_flag=1,写buffer2
regrd_flag;
//读标志,rd_flag=0,读buffer2,wr_flag=1,读buffer1
regstate;
//状态机,0:
写1读2,1:
写2读1,状态转移和输出分开编码
reg[7:
0]cnt;
parameterstate0=1'
b0;
parameterstate1=1'
b1;
always@(posedgeclkornegedgerst_n)//状态转移
begin
if(rst_n==1'
b0)cnt<
=0;
elsecnt<
=cnt+1;
end
always@(posedgeclkornegedgerst_n)//状态转移
begin
if(rst_n==1'
b0)state<
=1'
else
begin
case(state)
state0:
if(cnt==8'
hff)state<
state1:
default:
state<
endcase
end
end
always@(state)//状态输出
case(state)
state0:
begin
wr_flag=1'
//写1
rd_flag=1'
//读2
end
state1:
wr_flag=1'
//写2
rd_flag=1'
//读1
end
default:
endcase
end
always@(posedgeclk)
begin
case(wr_flag)
1'
b0:
buffer1[cnt]<
=data_in;
//wr_flag=0,写buffer1
b1:
buffer2[cnt]<
//wr_flag=1,写buffer2
default:
buffer1[cnt]<
=8'
buffer2[cnt]<
end
endcase
end
always@(posedgeclkornegedgerst_n)
begin
if(rst_n==1'
b0)data_out<
else
begin
case(rd_flag)
1'
b0:
data_out<
=buffer2[cnt];
//rd_flag=0,读buffer2
b1:
=buffer1[cnt];
//rd_flag=1,读buffer1
default:
b0;
endcase
end
end
endmodule
TB代码如下:
`timescale100ns/10ns
modulepingpang_tb_v;
//Inputs
regclk;
regrst_n;
reg[7:
0]data_in;
//Outputs
wire[7:
//InstantiatetheUnitUnderTest(UUT)
pingpanguut(
.clk(clk),
.rst_n(rst_n),
.data_in(data_in),
.data_out(data_out)
);
initial
begin
//InitializeInputs
clk=0;
rst_n=0;
data_in=0;
#100;
rst_n=1;
always#10clk=~clk;
always@(posedgeclkornegedgerst_n)
if(rst_n==1'
b0)data_in<
elsedata_in<
=data_in+1'
end
仿真波形如图:
当state进行状态切换后,数据读写存储区域发生了变化,实现乒乓的操作。
通过“输入数据选择单元”和“输出数据选择单元’’按节拍的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算处理。