VHDL实现简单串口通信

目的:使用VHDL实现串口通信

使用芯片:EP1C3T144C8

实现结果:两块FPGA通信板均可作为发送方和接收方。按下复位键后,发送方根据拨码开关显示选择发送的数据,按下发送键后发送;接收方立马接收到数据并显示(特别快)

一、具体步骤

1.数码管显示

这个地方个人使用的是测试法,大家也可以查看原理图一步到位。

  1. 分清位码/段码引脚,给位码引脚0/1判断0/1谁是使能点亮?各个位码对应哪个数码管?
  2. 给段码引脚0/1判断0/1谁是使能点亮?各个段码对应数码管的哪条边?

测试结果表明0是点亮。

--------------------数据输入及显示部分-----------------------------------------------------
process(Rx_Valid,CLK)
begin
	if RESET='0' then	
		case button is
			when "000"=>Datarx<="01000000";
			when "001"=>Datarx<="01111001";
			when "010"=>Datarx<="00100100";
			when "011"=>Datarx<="00110000";
			when "100"=>Datarx<="00011001";
			when "101"=>Datarx<="00010010";
			when "110"=>Datarx<="00000010";
			when "111"=>Datarx<="01111000"; 
			when others=>null; 
		end case;
		Data00<='1'&Datarx&'0';
	else
		if rising_edge(Rx_Valid) then	
			Datarx<=Rx_Data;
		end if;
	end if;
end process;
--------------------数据输入及显示部分-----------------------------------------------------

2.波特率发生器

        波特率发生器实质是设计一个分频器,用于产生和RS232通信同步的时钟。在系统中用一个计数器来完成这个功能,系统时钟为40MHz,9600波特率时钟的周期约等于4167个系统时钟周期,则需要计数器为4167时输出高电平,同时令计数器为0,计数器为其他值时输出时钟保持低电平不变。由于接收方隔16个接收时钟接收一次,所以接受方的频率应该是发送方的16倍,即接受方需生成16倍于波特率的时钟,4167/16≈260。

--------------------产生波特率-----------------------------------------------------
process(CLK,RESET,Rx_Hold)         --时钟产生进程
			variable	ClockCount	    :	integer range 0 to 4167:=0;
			variable	ClockCount_Rx	:	integer range 0 to 260:=0;
begin				  
if (rising_edge(CLK)) then 
	ClockCount:=ClockCount+1;
	ClockCount_Rx:=ClockCount_Rx+1;
	
	  --产生9600时钟,1/40MHZ*4167=1/9600
	 if ClockCount=4167 then Clock9600<='1';ClockCount:=0;
	 else	Clock9600<='0';
	 end if;
	 --4167/16=260		  
	 if ClockCount_Rx=260 then	Clock3<='1';ClockCount_Rx:=0;
	 else Clock3<='0';
	 end if;
 end if;
end process;	
--------------------产生波特率-----------------------------------------------------

3.串口发送部分

        发送器的设计较容易,设置发送使能Send_en以及发送结束Send_over标志位,当复位键按下时,发送不使能,发送信号为"1000000000";复位键未按下时,当Clock9600上升沿到来时,发送使能,并按照拨码开关模式选择发送信号。如果发送使能,则发送起始位‘1’,并开始计数发送Bit数目,当Clock9600上升沿到来时,依次发送数据。如果发送Bit计数器为9时,则发送结束位‘0’,同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值