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

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

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

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
    下载

相关推荐