⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kcuart_tx.v

📁 vhdl语言编写的实现uart协议的程序,用于rs232电气接口程序开发.支持比特率从2400-115200.
💻 V
字号:
`timescale 1 ps / 1psmodule kcuart_tx     (data_in,      send_character,      en_16_x_baud,      serial_out,      Tx_complete,      clk);input 	[7:0]	data_in;input       	send_character;input       	en_16_x_baud;output		serial_out;output		Tx_complete;input 		clk;////////////////////////////////////////////////////////////////////////////////////////// Start of KCUART_TX//	 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// wires used in KCUART_TX////////////////////////////////////////////////////////////////////////////////////////wire 		data_01;wire 		data_23;wire 		data_45;wire 		data_67;wire 		data_0123;wire 		data_4567;wire 		data_01234567;wire 	[2:0] 	bit_select;wire 	[2:0] 	next_count;wire 	[2:0] 	mask_count;wire 	[2:0] 	mask_count_carry;wire 	[2:0] 	count_carry;wire 		ready_to_start;wire 		decode_Tx_start;wire 		Tx_start;wire 		decode_Tx_run;wire 		Tx_run;wire 		decode_hot_state;wire 		hot_state;wire 		hot_delay;wire 		Tx_bit;wire 		decode_Tx_stop;wire 		Tx_stop;wire 		decode_Tx_complete;//////////////////////////////////////////////////////////////////////////////////////////// Attributes to define LUT contents during implementation // The information is repeated in the generic map for functional simulation////////////////////////////////////////////////////////////////////////////////////////// synthesis attribute init of mux1_lut is "E4FF"; // synthesis attribute init of mux2_lut is "E4FF";// synthesis attribute init of mux3_lut is "E4FF";// synthesis attribute init of mux4_lut is "E4FF";// synthesis attribute init of ready_lut is "10";// synthesis attribute init of start_lut is "0190";// synthesis attribute init of run_lut is "1540";// synthesis attribute init of hot_state_lut is "94";// synthesis attribute init of delay14_srl is "0000";// synthesis attribute init of stop_lut is "0180";// synthesis attribute init of complete_lut is "8";// synthesis attribute init of count_lut_0 is "8";// synthesis attribute init of count_lut_1 is "8";// synthesis attribute init of count_lut_2 is "8";////////////////////////////////////////////////////////////////////////////////////////// Start of KCUART_TX circuit description////////////////////////////////////////////////////////////////////////////////////////	  // 8 to 1 multiplexer to convert parallel data to serial  	LUT4 mux1_lut  	  ( .I0(bit_select[0]),   	    .I1(data_in[0]),            .I2(data_in[1]),            .I3(Tx_run),            .O(data_01) )/* synthesis xc_props = "INIT=E4FF"*/;	// synthesis translate_off	defparam mux1_lut.INIT = 16'hE4FF; 	// synthesis translate_on  	LUT4 mux2_lut   	(   .I0(bit_select[0]),            .I1(data_in[2]),            .I2(data_in[3]),            .I3(Tx_run),            .O(data_23) )/* synthesis xc_props = "INIT=E4FF"*/;	// synthesis translate_off	defparam mux2_lut.INIT = 16'hE4FF; 	// synthesis translate_on  	LUT4 mux3_lut  	   (.I0(bit_select[0]),            .I1(data_in[4]),            .I2(data_in[5]),            .I3(Tx_run),            .O(data_45) )/* synthesis xc_props = "INIT=E4FF"*/;	// synthesis translate_off	defparam mux3_lut.INIT = 16'hE4FF; 	// synthesis translate_on  	LUT4 mux4_lut  	   (.I0(bit_select[0]),            .I1(data_in[6]),            .I2(data_in[7]),            .I3(Tx_run),            .O(data_67) )/* synthesis xc_props = "INIT=E4FF"*/;	// synthesis translate_off	defparam mux4_lut.INIT = 16'hE4FF; 	// synthesis translate_on  	MUXF5 mux5_muxf5  		(		.I1(data_23),            .I0(data_01),            .S(bit_select[1]),            .O(data_0123) );  	MUXF5 mux6_muxf5  		( 		.I1(data_67),            .I0(data_45),            .S(bit_select[1]),            .O(data_4567) );  	MUXF6 mux7_muxf6  		(		.I1(data_4567),            .I0(data_0123),            .S(bit_select[2]),            .O(data_01234567) );  // Register serial output and force start and stop bits  	FDRS pipeline_serial   	(   .D(data_01234567),            .Q(serial_out),            .R(Tx_start),            .S(Tx_stop),            .C(clk) ) ;  // 3-bit counter  // Counter is clock enabled by en_16_x_baud  // Counter will be reset when 'Tx_start' is active  // Counter will increment when Tx_bit is active  // Tx_run must be active to count  // count_carry[2] indicates when terminal count [7] is reached and Tx_bit=1 (ie overflow)	FDRE register_bit_0   	(.D(next_count[0]),         .Q(bit_select[0]),         .CE(en_16_x_baud),         .R(Tx_start),         .C(clk) );	LUT2 count_lut_0     	(.I0(bit_select[0]),         .I1(Tx_run),         .O(mask_count[0]) )/* synthesis xc_props = "INIT=8"*/;	// synthesis translate_off	defparam count_lut_0.INIT = 4'h8; 					 	// synthesis translate_on   MULT_AND mask_and_0   	(.I0(bit_select[0]),       	 .I1(Tx_run),         .LO(mask_count_carry[0]) );	MUXCY count_muxcy_0   	( .DI(mask_count_carry[0]),         .CI(Tx_bit),         .S(mask_count[0]),         .O(count_carry[0]) );       	XORCY count_xor_0   	(.LI(mask_count[0]),         .CI(Tx_bit),         .O(next_count[0]) ); 	FDRE register_bit_1     	(.D(next_count[1]),         .Q(bit_select[1]),         .CE(en_16_x_baud),         .R(Tx_start),         .C(clk) );	LUT2 count_lut_1     	(.I0(bit_select[1]),         .I1(Tx_run),         .O(mask_count[1]) )/* synthesis xc_props = "INIT=8"*/;	// synthesis translate_off	defparam count_lut_1.INIT = 4'h8; 					 	// synthesis translate_on   MULT_AND mask_and_1     	( 	.I0(bit_select[1]),         .I1(Tx_run),         .LO(mask_count_carry[1]) );	MUXCY count_muxcy_1   	( 	.DI(mask_count_carry[1]),         .CI(count_carry[0]),         .S(mask_count[1]),         .O(count_carry[1]) );       	XORCY count_xor_1     	( 	.LI(mask_count[1]),         .CI(count_carry[0]),         .O(next_count[1]) );	FDRE register_bit_2     	( 	.D(next_count[2]),         .Q(bit_select[2]),         .CE(en_16_x_baud),         .R(Tx_start),         .C(clk) );  	LUT2 count_lut_2   	( 	.I0(bit_select[2]),         .I1(Tx_run),         .O(mask_count[2]) )/* synthesis xc_props = "INIT=8"*/;	// synthesis translate_off	defparam count_lut_2.INIT = 4'h8; 					 	// synthesis translate_on		MULT_AND mask_and_2     	( 	.I0(bit_select[2]),         .I1(Tx_run),         .LO(mask_count_carry[2]) );	MUXCY count_muxcy_2   	( 	.DI(mask_count_carry[2]),         .CI(count_carry[1]),         .S(mask_count[2]) ,         .O(count_carry[2]) );       	XORCY count_xor_2		( 	.LI(mask_count[2]),         .CI(count_carry[1]),         .O(next_count[2]) );  // Ready to start decode  	LUT3 ready_lut  		( 	.I0(Tx_run),         .I1(Tx_start),         .I2(send_character),         .O(ready_to_start ) )/* synthesis xc_props = "INIT=10"*/;	// synthesis translate_off	defparam ready_lut.INIT = 8'h10; 	// synthesis translate_on  // Start bit enable  	LUT4 start_lut  		( 	.I0(Tx_bit),         .I1(Tx_stop),         .I2(ready_to_start),         .I3(Tx_start),         .O(decode_Tx_start ) )/* synthesis xc_props = "INIT=0190"*/;	// synthesis translate_off	defparam start_lut.INIT = 16'h0190; 	// synthesis translate_on  	FDE Tx_start_reg  	(	.D(decode_Tx_start),      .Q(Tx_start),      .CE(en_16_x_baud),      .C(clk) );  // Run bit enable  	LUT4 run_lut  	( 	.I0(count_carry[2]),      .I1(Tx_bit),      .I2(Tx_start),      .I3(Tx_run),		.O(decode_Tx_run ) )/* synthesis xc_props = "INIT=1540"*/;	// synthesis translate_off	defparam run_lut.INIT = 16'h1540; 	// synthesis translate_on  	FDE Tx_run_reg  	(	.D(decode_Tx_run),      .Q(Tx_run),      .CE(en_16_x_baud),      .C(clk) );  // Bit rate enable  	LUT3 hot_state_lut  	(	.I0(Tx_stop),      .I1(ready_to_start),      .I2(Tx_bit),      .O(decode_hot_state) )/* synthesis xc_props = "INIT=94"*/;	// synthesis translate_off	defparam hot_state_lut.INIT = 8'h94; 	// synthesis translate_on  	FDE hot_state_reg  	(	.D(decode_hot_state),      .Q(hot_state),      .CE(en_16_x_baud),      .C(clk) );  	SRL16E delay14_srl  	(	.D(hot_state),      .CE(en_16_x_baud),      .CLK(clk),      .A0(1'b1),      .A1(1'b0),      .A2(1'b1),      .A3(1'b1),      .Q(hot_delay) )/* synthesis xc_props = "INIT=0000"*/;	// synthesis translate_off	defparam delay14_srl.INIT = 16'h0000; 	// synthesis translate_on  	FDE Tx_bit_reg  	(	.D(hot_delay),     	.Q(Tx_bit),      .CE(en_16_x_baud),      .C(clk) );  // Stop bit enable  	LUT4 stop_lut  	(	.I0(Tx_bit),      .I1(Tx_run),      .I2(count_carry[2]),      .I3(Tx_stop),	        .O(decode_Tx_stop) )/* synthesis xc_props = "INIT=0180"*/;	// synthesis translate_off	defparam stop_lut.INIT = 16'h0180; 	// synthesis translate_on  FDE Tx_stop_reg  ( 	    .D(decode_Tx_stop),            .Q(Tx_stop),            .CE(en_16_x_baud),            .C(clk) );  // Tx_complete strobe  LUT2 complete_lut  ( 	    .I0(count_carry[2]),            .I1(en_16_x_baud),            .O(decode_Tx_complete) )/* synthesis xc_props = "INIT=8"*/;	// synthesis translate_off	defparam complete_lut.INIT = 4'h8; 	// synthesis translate_on  FD Tx_complete_reg  ( 	     .D(decode_Tx_complete),             .Q(Tx_complete),             .C(clk) );endmodule//////////////////////////////////////////////////////////////////////////////////////// END OF FILE KCUART_TX.V//////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -