• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

时分数据交换系统Verilog代码vivado仿真

06/19 11:04
347
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240103155629116.doc

共1个文件

名称:时分数据交换系统Verilog代码vivado仿真

软件:vivado

语言:Verilog

代码功能:

请设计一个串行输入、串行输出的时分数据交换系统。该时分数据输入如下图所示:

QQ图片20240103182634.png

针对上述输入信号,现要求给出如下的输出(可以有不超过8个时钟延时):

QQ图片20240103182710.png

请给出详细的设计思路、实现步骤、电路原理图,并在给出时序图的基础上说明“将第1路数据交换至第4路数据输出时”的工作原理。

其中:

时钟端?Clk?电路的工作时钟

串行输入Din?串行输入数据,图中序号表示对应的信道号

输入使能端En:?高有效,表示当前对应的信道需要进行交换

串行输出Dout?指示交换之后的数据输出

输出有效Eo?高有效,指示当前输出的Dout数据为有效交换数据

信道指示Ind[1:0]?指示当前输出Dout数据对应的信道号

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 工程文件

2. 程序文件

3. 程序编译

4. Testbench

5. 仿真图

部分代码展示:

reg?[3:0]?cnt=0;
reg?[3:0]?in_cnt=0;
reg?[3:0]?out_cnt1=0;
reg?[3:0]?data_in=0;
reg?[3:0]?cnt1=0;
reg?[3:0]?cnt2=0;
parameter?state1?=?4'b0001;//状态机
parameter?state2?=?4'b0010;
parameter?state3?=?4'b0011;
parameter?state4?=?4'b0100;
reg?[3:0]?state?=?4'b0001;//输入状态
always?@(posedge?CLK?)
begin
?case(state)
????????state1:?
if(EN)
begin
state?<=?state2;
data_in?<=?{data_in[2:0],DIN};
cnt2?<=?cnt2?+1'd1;
end
state2:?
if(EN)
begin
state?<=?state3;
data_in?<=?{data_in[2:0],DIN};
cnt2?<=?cnt2?+1'd1;
end
state3:?
if(EN)
begin
state?<=?state4;
data_in?<=?{data_in[2:0],DIN};
cnt2?<=?cnt2?+1'd1;
end
state4:?
if(EN)
begin
state?<=?state1;
data_in?<=?{data_in[2:0],DIN};
in_cnt?<=?in_cnt?+?1'd1;
cnt2?<=?cnt2?+1'd1;
end
endcase
end
reg?[3:0]?data,data1;
always@(posedge?CLK)
begin
if(state?==?state1)//数据缓存
begin
data?<=?data_in;
end
end
reg?[3:0]?state_out?=?4'b0001;//输出状态
always?@(posedge?CLK?)
begin
if(cnt2?>=?5)
begin
?case(state_out)
state1:
if(out_cnt1?<?in_cnt)
begin
cnt1?<=?4'd1;
state_out?<=?state2;
EO?<=?1'd1;
Ind?<=?Ind?-?1;
end
else
begin
EO?<=?1'd0;
end
state2:
begin
cnt1?<=?4'd2;
state_out?<=?state3;
Ind?<=?Ind?-?1;
end
state3:
begin
cnt1?<=?4'd3;
state_out?<=?state4;
Ind?<=?Ind?-?1;
end
state4:
begin
cnt1?<=?4'd0;
out_cnt1?<=?out_cnt1?+?1'd1;
state_out?<=?state1;
Ind?<=?Ind?-?1;
end
?endcase
end
else
begin
Ind?<=?2'b00;
end
end
always@(posedge?CLK)
begin
case(cnt1)
4'd0:DOUT?<=?data[0];
4'd1:DOUT?<=?data[1];
4'd2:DOUT?<=?data[2];
4'd3:DOUT?<=?data[3];
endcase
end
endmodule

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=479

  • 2-240103155629116.doc
    下载

相关推荐