03_串口 RS232( 六 )


8.3
`timescale1ns/1nsmoduletb_rs232();//********************************************************************////****************** Parameter and Internal Signal *******************////********************************************************************////wiredefinewiretx;//regdefineregsys_clk;regsys_rst_n;regrx;//********************************************************************////***************************** Main Code ****************************////********************************************************************////初始化系统时钟、全局复位和输入信号initial beginsys_clk= 1'b1;sys_rst_n <= 1'b0;rx<= 1'b1;#20;sys_rst_n <= 1'b1;end//调用任务rx_byteinitial begin#200rx_byte();end//sys_clk:每10ns电平翻转一次,产生一个50MHz的时钟信号always #10 sys_clk = ~sys_clk;//创建任务rx_byte,本次任务调用rx_bit任务,发送8次数据,分别为0~7taskrx_byte();//因为不需要外部传递参数,所以括号中没有输入integer j;for(j=0; j<8; j=j+1)//调用8次rx_bit任务,每次发送的值从0变化7rx_bit(j);endtask//创建任务rx_bit,每次发送的数据有10位,data的值分别为0到7由j的值传递进来taskrx_bit(input[7:0]data);integer i;for(i=0; i<10; i=i+1)begincase(i)0: rx <= 1'b0;1: rx <= data[0];2: rx <= data[1];3: rx <= data[2];4: rx <= data[3];5: rx <= data[4];6: rx <= data[5];7: rx <= data[6];8: rx <= data[7];9: rx <= 1'b1;endcase#(5208*20); //每发送1位数据延时5208个时钟周期endendtask//********************************************************************////*************************** Instantiation **************************////********************************************************************////------------------------ rs232_inst ------------------------rs232rs232_inst(.sys_clk(sys_clk),//inputsys_clk.sys_rst_n(sys_rst_n),//inputsys_rst_n.rx(rx),//inputrx.tx(tx)//outputtx);endmodule