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

📄 rcvr.v

📁 利用VHDL实现CPLD(EPM240T100C5)的串口接收程序
💻 V
字号:
/********************************************************************************    File Name:  rcvr.v*      Version:  1.1*         Date:  January 22, 2000*        Model:  Receiver Chip**      Company:  think studio*******************************************************************************/`timescale 1 ns / 1 nsmodule rcvr (dout,data_ready,framing_error,parity_error,rxd,clk50,rst) ;input rxd ;input clk50 ;input rst ;output [7:0] dout ;output data_ready ;output framing_error ;output parity_error ;reg rxd1 ;reg rxd2 ;reg clk1x_enable ;reg [3:0] clkdiv ;reg [7:0] rsr ;reg [7:0] rbr ;reg [3:0] no_bits_rcvd ;reg data_ready ;reg parity ;reg parity_error ;reg framing_error ;reg clk16x;reg[7:0] clkdiv2;reg clk;wire clk1x ;//assign dout = !rdn ? rbr : 8'bz ;assign dout = rbr;always @(posedge clk50)begin	clk <= !clk;endalways @(posedge clk or posedge rst)begin	if (rst)	begin	clk16x <= 1'b0 ;	clkdiv2 <= 8'h00 ;	end	else	begin		if(clkdiv2 == 8'h4b)		begin			clk16x <= !clk16x ;			clkdiv2 <= 8'h00 ;		end		else			clkdiv2 <= clkdiv2 + 1;	endendalways @(posedge clk16x or posedge rst)beginif (rst)beginrxd1 <= 1'b1 ;rxd2 <= 1'b1 ;endelse beginrxd1 <= rxd ;rxd2 <= rxd1 ;endendalways @(posedge clk16x or posedge rst)beginif (rst)clk1x_enable <= 1'b0;else if (!rxd1 && rxd2)clk1x_enable <= 1'b1 ;else if (no_bits_rcvd == 4'b1100)clk1x_enable <= 1'b0 ;endalways @(posedge clk16x or posedge rst)beginif (rst)data_ready = 1'b0 ;elseif (no_bits_rcvd == 4'b1011)data_ready = 1'b1 ;endalways @(posedge clk16x or posedge rst)beginif (rst)clkdiv = 4'b0000 ;else if (clk1x_enable)clkdiv = clkdiv +1 ;endassign clk1x = clkdiv[3] ;always @(posedge clk1x or posedge rst)if (rst)beginrsr <= 8'b0 ;rbr <= 8'b0 ;parity <= 1'b1 ;framing_error = 1'b0 ;parity_error = 1'b0 ;endelse beginif (no_bits_rcvd >= 4'b0001 && no_bits_rcvd <= 4'b1000) beginrsr[0] <= rxd2 ;rsr[7:1] <= rsr[6:0] ;parity <= parity ^ rsr[7] ;endelse if (no_bits_rcvd == 4'b1001)beginrbr <= rsr ;endelse if (!parity) parity_error = 1'b1 ;else if ((no_bits_rcvd == 4'b1010) && (rxd2 != 1'b1))framing_error = 1'b1 ;elseframing_error = 1'b0 ;endalways @(posedge clk1x or posedge rst or negedge clk1x_enable)if (rst)no_bits_rcvd = 4'b0000;elseif (!clk1x_enable)no_bits_rcvd = 4'b0000 ;elseno_bits_rcvd = no_bits_rcvd + 1 ;endmodule

⌨️ 快捷键说明

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