`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 = 1;
wire w_rx_done;
wire[DATA_WIDTH-1 : 0] w_data;
reg [143:0] buffer;
reg [4:0] index = 5'b00000;
reg [63:0] plaintext;
reg [63:0] ciphertext;
reg [79:0] key;
reg [7:0] rs;
reg [3:0] rs_index = 4'b0000;
reg [0:0] a_done = 1'b0;
reg [0:0] b_done = 1'b0;
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数据接收完成标志
);
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;
b_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
rs <= ciphertext[63 - rs_index * 8 +: 8];
rs_index <= rs_index + 1;
c_done <= 1'b1;
end
end
else if (a_done) begin
ciphertext <= plaintext;
b_done <= 1'b1;
end
else if (w_rx_done) begin
// 接收到一个字节的数据
buffer[143 - index * 8 +: 8] <= w_data; // 存储数据到缓冲区
index <= index + 1; // 增加索引,指向下一个存储位置
if (index == 18) begin
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
请问这哪里出错了,我输入了144位,输出只有1位