大家好,本人正在学习FPGA的基本知识,目前正在编写板子和上位机的UART串口通信环回程序,其中发送端的输入输出定义如下所示
module uart_tx_fsm
#(
parameter SYS_CLK_FREQ = 50_000_000,
parameter BAUD_RATE = 9600
)(
input i_sys_clk,
input i_asyn_rst_n,
input i_data_vld, // 使能信号
input [7:0] i_data,
output o_txd,
output o_tx_done // 信号完成标志脉冲
);
我定义了一个来自顶层模块的使能信号i_data_vld,在输出端定义了一个o_tx_done作为发送完成的脉冲信号,顶层模块相关代码如下所示
reg tx_data_vld;
always@(posedge clk or negedge rst_n) begin
if (!rst_n)
tx_data_vld <= 1'b0;
else if (tx_done)
tx_data_vld <= 1'b0; // 当接收完成时,停止接收模块
else if (rx_done)
tx_data_vld <= 1'b1; // 当发送完成时,启动接收模块
end
tx_data_vld是在顶层模块中用于使能发送端的信号,这里使用了发送端的完成信号再反过来控制这个使能信号,仿真没问题,请问这样的设计合理吗?
没有回复内容