连板子之后发送144位数据,只收到了1位,请问是哪里出错了
`timescale 1ns / 1ps
module uart_loop(
input i_clk_sys, // 时钟
input i_rst_n, // 复位
input i_uart_rx, // 输入
output o_uart_tx, // 输出
output o_ld_parity // 校验位检验
);
localparam DATA_WIDTH = 8; //有效数据位
localparam BAUD_RATE = 115200; //波特率
localparam PARITY_ON = 0; //无校验位
localparam PARITY_TYPE = 0; //偶校验
wire w_rx_done; //UART数据接收完成标志
wire[DATA_WIDTH-1 : 0] w_data; //UART接收数据
reg [143:0] buffer; //缓冲区
reg [4:0] index = 5'b00000; //缓冲区下标
reg [63:0] plaintext; //明文
reg [79:0] key; //密钥
reg [7:0] rs; //每8位输出
reg [3:0] rs_index = 4'b0000; //输出第几个8位
reg [0:0] a_done = 1'b0; //接收完成标志
wire [0:0] b_done; //加密完成标志
wire [63:0] ciphertext; //密文
reg [0:0] c_done = 1'b0; //可以输出标志
uart_rx
#(
.CLK_FRE(10), //时钟频率,默认时钟频率为50MHz
.DATA_WIDTH(DATA_WIDTH), //有效数据位,缺省为8位
.PARITY_ON(PARITY_ON), //校验位,1为有校验位,0为无校验位,缺省为0
.PARITY_TYPE(PARITY_TYPE), //校验类型,1为奇校验,0为偶校验,缺省为偶校验
.BAUD_RATE(BAUD_RATE) //波特率,缺省为9600
) u_uart_rx
(
.i_clk_sys(i_clk_sys), //系统时钟
.i_rst_n(i_rst_n), //全局异步复位,低电平有效
.i_uart_rx(i_uart_rx), //UART输入
.o_uart_data(w_data), //UART接收数据
.o_ld_parity(o_ld_parity), //校验位检验LED,高电平位为校验正确
.o_rx_done(w_rx_done) //UART数据接收完成标志
);
PRESENT_ENCRYPT dut(b_done, ciphertext, plaintext, key, i_clk_sys, i_rst_n, a_done); //加密
always@(posedge i_clk_sys or negedge i_rst_n) begin
if (!i_rst_n) begin //复位
index <= 5'b00000;
rs_index <= 4'b0000;
a_done <= 1'b0;
c_done <= 1'b0;
end
else if (b_done) begin //加密完成
if (rs_index == 8) begin //输出完成
c_done <= 1'b0;
end
else begin //每8位输出
rs <= ciphertext[63 - rs_index * 8 +: 8];
rs_index <= rs_index + 1;
c_done <= 1'b1;
end
end
else if (w_rx_done) begin
// 接收到一个字节的数据
buffer[143 - index * 8 +: 8] <= w_data; // 存储数据到缓冲区
index <= index + 1; // 增加索引,指向下一个存储位置
if (index == 18) begin //64位明文和80位密钥接收完毕
plaintext <= buffer[143:80];
key <= buffer[79:0];
index <= 5'b00000;
a_done <= 1'b1;
end
end
end
uart_tx
#(
.CLK_FRE(10), //时钟频率,默认时钟频率为50MHz
.DATA_WIDTH(DATA_WIDTH), //有效数据位,缺省为8位
.PARITY_ON(PARITY_ON), //校验位,1为有校验位,0为无校验位,缺省为0
.PARITY_TYPE(PARITY_TYPE), //校验类型,1为奇校验,0为偶校验,缺省为偶校验
.BAUD_RATE(BAUD_RATE) //波特率,缺省为9600
) u_uart_tx
( .i_clk_sys(i_clk_sys), //系统时钟
.i_rst_n(i_rst_n), //全局异步复位
.i_data_tx(rs), //传输数据输入
.i_data_valid(c_done), //传输数据有效
.o_uart_tx(o_uart_tx) //UART输出
);
endmodule