![]()
测试程序
测试程序设计FPGA为1秒向串口发送一次“HELLO ALINX
”,不发送期间,如果接受到串口数据,直接把接收到的数据送到发送模块再返回。“
”,在这里和C语言中表示一致,都是回车换行。
测试程序分别例化了发送模块和接收模块,同时将参数传递进去,波特率设置为115200。
always@(posedge sys_clk ornegedge rst_n)
begin
if(rst_n ==1'b0)
begin
wait_cnt tx_data state tx_cnt tx_data_valid end
else
case(state)
IDLE:
state SEND:
begin
wait_cnt tx_data
if(tx_data_valid ==1'b1&& tx_data_ready ==1'b1&& tx_cnt begin
tx_cnt end
elseif(tx_data_valid && tx_data_ready)//last byte sent is complete
begin
tx_cnt tx_data_valid state end
elseif(~tx_data_valid)
begin
tx_data_valid end
end
WAIT:
begin
wait_cnt
if(rx_data_valid ==1'b1)
begin
tx_data_valid tx_data end
elseif(tx_data_valid && tx_data_ready)
begin
tx_data_valid end
elseif(wait_cnt >= CLK_FRE *1000000)// wait for 1 second
state end
default:
state endcase
end
//combina
tional logic
//Send "HELLO ALINX
"
always@(*)
begin
case(tx_cnt)
8'd0: tx_str 8'd1: tx_str 8'd2: tx_str 8'd3: tx_str 8'd4: tx_str 8'd5: tx_str 8'd6: tx_str 8'd7: tx_str 8'd8: tx_str 8'd9: tx_str 8'd10: tx_str 8'd11: tx_str 8'd12: tx_str default:tx_str endcase
end
uart_rx#
(
.CLK_FRE(CLK_FRE),
.BAUD_RATE(115200)
) uart_rx_inst
(
.clk (sys_clk ),
.rst_n (rst_n ),
.rx_data (rx_data ),
.rx_data_valid (rx_data_valid ),
.rx_data_ready (rx_data_ready ),
.rx_pin (uart_rx )
);
uart_tx#
(
.CLK_FRE(CLK_FRE),
.BAUD_RATE(115200)
) uart_tx_inst
(
.clk (sys_clk ),
.rst_n (rst_n ),
.tx_data (tx_data ),
.tx_data_valid (tx_data_valid ),
.tx_data_ready (tx_data_ready ),
.tx_pin (uart_tx )
);
3. 仿真
这里我们添加了一个串口接收的激励程序vtf_uart_test.v文件,用来仿真uart串口接收。这里向串口模块的uart_rx发送0xa3的数据, 每位的数据按115200的波特率发送,1位起始位,8位数据位和1位停止位。