Extend khối TX để gửi 2 bytes
Vì tôi có bài sẵn về khối TX trước đây cho nên để giản tiện trong vấn đề giải thích về cách thay đổi để gửi 2 bytes như bạn quachtinh đã đề cập. Tôi sửa lại cái state machine để đặt thêm 3 states nữa cho byte thứ nhì. Code tôi sửa lại cho vấn đề đó ở dưới đây. Tôi chưa chạy thử, hy vọng các bạn giúp để thử giùm.
Nguyên văn bởi quachtinh83
Xem bài viết
Code:
module uart_tx ( clk, reset, tx_tick, tx_rdy, tx_reg1, tx_reg2, tx_done_o, tx_sdata_o ); input clk; input reset; input tx_tick; input tx_rdy; input [7:0] tx_reg; output tx_done_o; output tx_sdata_o; parameter IDLE = 6'b000001, START1 = 6'b000010, DATA1 = 6'b000100; parameter STOP1 = 6'b001000, START2 = 6'b010000, DATA2 = 6'b100000; reg [5:0] st; reg tx_done, tx_sdata; reg [2:0] cnt; assign tx_done_o = tx_done; assign tx_sdata_o = tx_sdata; always @ (posedge clk or reset) begin if (reset) begin tx_done = 1; st = IDLE; tx_sdata = 1; end else begin if (tx_tick) begin case (st) IDLE: begin tx_sdata = 1; if (tx_rdy) begin st = START1; tx_done = 0; end end START1: begin tx_sdata = 0; cnt = 0; st = DATA1; end DATA1: begin tx_sdata = tx_reg1[cnt]; if (cnt == 7) st = STOP1; else cnt = cnt + 1; end STOP1: begin tx_sdata = 1; st = START2; end START2: begin tx_sdata = 0; cnt = 0; st = DATA2; end DATA2: begin tx_sdata = tx_reg2[cnt]; if (cnt == 7) begin st = IDLE; tx_done = 1; end else cnt = cnt + 1; end default : st = IDLE; endcase end end end endmodule
Comment