`timescale 1ns / 1ps
//rx always语句块的仿真
module tb_rx( );
reg sysclk ;
reg rst_n ;
reg rx ;//数据线
wire [7:0] rx_data ;
wire rx_done ;
always #10 sysclk=~sysclk;
//第一种方法:数据传输
// initial begin
// sysclk = 0;
// rst_n = 0;
// rx = 1;
// #101
// rst_n = 1;
// #200
// rx = 0;//起始位
// #(5208*20)
// rx = 1;//有效数据位第一位
// end
initial begin
sysclk = 0 ;
rst_n = 0 ;
rx = 1 ;
#101
rst_n = 1 ;
#200
rx_bit(8'h56);
#200
rx_bit(8'ha3);
#200
rx_bit(8'h55);
end
//第二种方法
task rx_bit(
input [7:0] rx_data
);
integer i;//声明一个整数类型的变量
for(i=0;i<10;i=i+1)begin
case(i)
0:rx=0;//起始位
1:rx=rx_data[0];//第一个有效数据位
2:rx=rx_data[1];//第二个有效数据位
3:rx=rx_data[2];//第三个有效数据位
4:rx=rx_data[3];//第四个有效数据位
5:rx=rx_data[4];//第五个有效数据位
6:rx=rx_data[5];//第六个有效数据位
7:rx=rx_data[6];//第七个有效数据位
8:rx=rx_data[7];//第八个有效数据位
9:rx=1;//停止位
default:rx=1;
endcase
#(5208*20);//传输一个bit需要的时钟周期
end
endtask
rx rx_u(
. sysclk ( sysclk ) ,//系统时钟
. rst_n ( rst_n ) ,//复位
. rx ( rx ) ,//一根数据线-->传输(串行输入,数据一个bit一个bit的输入进来)数据的
. rx_data ( rx_data ) ,//输出有效数据位(并行打包输出)
. rx_done ( rx_done ) //拍手信号(握手信号)--->作用是意味着一帧数据传输完成 rx_done==1--->别的模块可以正常使用rx_data
);
endmodule
FPGA rx串口的仿真代码
最新推荐文章于 2024-07-27 11:30:47 发布